nginx初級學習心得

特性

  • 高併發鏈接: 官方稱單節點支持5萬併發鏈接數,實際生產環境可以承受2-3萬併發
  • 內存消耗少: 在3萬併發鏈接下,開啓10個nginx進程僅消耗150M內存 (15M*10=150M)

nginx原理(Unix I/O模型簡介)

初探nginx架構css

基本模塊

# 使用的用戶和組
user nobody nobody;
# 指定工做進程數
# 與CPU數目一致
worker_processes 2;
# 錯誤日誌
# 可使用 [ debug | info | notice | warn | error | crit ]  參數
error_log /var/log/nginx/nginx_error.log crit;
# 指定 pid 存放的路徑  
pid /usr/local/nginx/nginx.pid

user
語法: user user [group]
缺省值: nobody nobody
指定Nginx Worker進程運行用戶,默認是nobody賬號。html

worker_processes
語法: worker_processes number
缺省值: 1
指定工做進程數。nginx可使用多個worker進程。linux

error_log
語法: error_log file [ debug | info | notice | warn | error | crit ]
缺省值: /logs/error.log
制定錯誤日誌的存放位置和級別。nginx

pid
語法: pid file
進程id存儲文件。可使用 kill -HUP cat /var/log/nginx.pid/ 對Nginx進行配置文件從新加載。 瀏覽器

include
語法: include file | *
缺省值: none
include 指令還支持像下面配置同樣的全局包含的方法,例如包含一個目錄下全部以".conf"結尾的文件: include vhosts/*.conf; 緩存

worker_cpu_affinity
綁定cpu能夠減小進程間的切換服務器

事件模塊

events {
    # 使用epoll模型
    use epoll;
    # 每一個worker的最大鏈接數  
    worker_connections 1024;
}

use
語法:use [ kqueue | rtsig | epoll | /dev/poll | select | poll | eventport ]
若是在./configure的時候指定了不止一種事件模型,那麼能夠設置其中一個,以便告訴nginx使用哪一種事件模型。
默認狀況下nginx會在./configure時找出最適合系統的事件模型。
事件模型是指Nginx處理鏈接的方法。架構

worker_connections
語法:worker_connections number
經過worker_connections和worker_proceses能夠計算出maxclients: max_clients = worker_processes * worker_connections
做爲反向代理,max_clients爲: max_clients = worker_processes * worker_connections/4 ,由於瀏覽器訪問時會經過鏈接池創建多個鏈接。併發

HTTP模塊

http {
    #配置一臺虛擬機
    server {
        listen          80;
        server_name     www.linuxidc.com;
        access_log      logs/linuxidc.access.log main;
        location / {
            index index.html;
            root  /var/www/linuxidc.com/htdocs;
        }
    }
}

三個做用域:http, server, location 負載均衡

server
語法:server {...}
做用域: http
配置一臺虛擬機。

listen
語法: listen address:port [ default [ backlog=num | rcvbuf=size | sndbuf=size | accept_filter=filter | deferred | bind | ssl ]
默認值: listen 80
做用域: server
指定當前虛擬機的監聽端口。

location
語法: location [=|~|~*|^~] /uri/ { ... }
做用域: server
配置訪問路徑的處理方法。

root
語法: root path
默認值:root html
做用域:http, server, location
alias指定的目錄是準確的,root是指定目錄的上級目錄,而且該上級目錄要含有location指定名稱的同名目錄。

alias
語法: alias file-path|directory-path;
做用域: location
該指令設置指定location使用的路徑.注意它跟 root 類似,可是不改變文件的根路徑,僅僅是使用文件系統路徑

區別:

location /abc/ {  
    alias /home/html/abc/;  
}

在這段配置下,www.xxx/abc/a.html就指定的是/home/html/abc/a.html。這段配置亦可改爲

location /abc/ {  
    root /home/html/;  
}

這樣,nginx就會去找/home/html/目錄下的abc目錄了,獲得的結果是相同的。

示列配置

反向代理

http {
    # 負載均衡配置,能夠配置多個
    upstream WB {
        # 設置負載均衡策略爲ip_hash,會根據請求來源ip作hash,同一個C類地址網段hash值相同
        ip_hash;
        # 反向代理到後臺應用服務器節點上
        server 192.168.4.1:8080;
        server 192.168.4.2:8080;
    }
    server {
        location / {
            proxy_connect_timeout 3;
            proxy_send_timeout 30;
            proxy_read_timeout 30;
            # 配置全部請求都會分發到 WB 這個負載均衡器上
            proxy_pass http://WB/;
            expires 1d;
        }
    }
}

https

server {
    listen 443;
    ssl on;
    ssl_certificate /usr/local/nginx/server.crt;
    ssl_certificate_key /usr/local/nginx/server.key;
    error_page 497 https://$host$uri?$args;
}

緩存靜態化文件

server {
    location ~* \.(gif|jpg|jpeg|png|css|js|ico|html)$ {
        root /usr/local/nginx/html/;
        expires 3d;
    }
}

參考資料

官方文檔

相關文章
相關標籤/搜索