Nginx 配置檔案引數詳解

slovz發表於2020-05-22

nginx配置檔案主要分為4部分:

  1. main(全域性設定) main部分設定的指令將影響其他所有設定
  2. server(主機設定) server部分的指令主要用於指定主機和埠
  3. upstream(負載均衡伺服器設定) upstream指令主要用於負載均衡,設定後端伺服器
  4. location(URL匹配特定位置的設定) 部分用於匹配網頁位置

    全域性配置

    user

    主模組指令,定義Nginx執行的使用者和使用者組
    user www www;

worker_processes

主模組指令,指定了nginx要開啟的程式數,每個nginx程式平均耗費10M-12M,
建議設定為等於CPU總核心數。
CPU總核心數為4 worker_processes 4;
也有說法設定為CPU邏輯核心數的兩倍。

error_log

主模組指令,用來定義全域性錯誤日誌檔案,日誌輸出級別有[ debug | info | notice | warn | error | crit ]可供選擇,其中debug輸出日誌最為詳細,而crit輸出日誌最少。
error_log /var/log/nginx/error.log info;

pid

主模組指令,用來指定程式id的儲存檔案位置
pid /var/run/nginx.pid;

worker_rlimit_nofile

一個nginx程式開啟的最多檔案描述符數目,理論值應該是最多開啟檔案數(系統的值ulimit -n)與nginx程式數相除,但是nginx分配請求並不均勻,所以建議與ulimit -n的值保持一致。
worker_rlimit_nofile 65535;

events

用來設定nginx工作模式與連線數上限
events
{

use epoll;

use是個事件模組指令,用來指定nginx的工作模式,nginx支援的工作模式有[ kqueue、rtsig、epoll、poll、select、 /dev/poll];select和poll都是標準的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在linux平臺上,而kqueue用在BSD系統中,對於linux系統,epoll工作模式時首選

worker_connections 65535;

worker_connections事件模組指令,用於定義nginx每個程式的最大連線數,預設是1024,最大客戶端連線數有worker_processes和worker_connections決定,即max_client=worker_processesworker_connections,在作為反向代理是變為:max_clients=worker_processesworker_connections/4。程式的最大連線數受linux系統的最大開啟檔案數限制,在執行作業系統命令“ulimit -n 65535”後worker_connections的設定才能生效。
}

http模組設定

http
{

include mime.types;

主模組指令,實現對配置檔案所包含的檔案設定,可以減少主配置檔案的複雜度,類似apache中的include方法

default_type application/octet-stream;

屬於http核心模組指令,這裡預設型別為二進位制流,也就是當檔案型別未定義是使用這種方式,例如在沒有配置php環境時,nginx是不予解析的,此時,用瀏覽器訪問php檔案就會出現下載視窗

charset utf-8;

預設編碼

server_names_hash_bucket_size 128;

伺服器名字的hash表大小

proxy_headers_hash_max_size 51200;

設定頭部雜湊表的最大值,不能小於你後端伺服器設定的頭部總數

proxy_headers_hash_bucket_size 6400;

設定頭部雜湊表大小

client_header_buffer_size 32k;

用於指定來自客戶端請求頭headerbuffer大小,對於大多數請求,1KB的緩衝區大小已經足夠,如果自定義了訊息頭或有更大的cookie,可以增加緩衝區大小。這裡設定為32KB)

large_client_header_buffers 4 128k;

用來指定客戶端請求中較大的訊息頭的快取最大數量和大小,“4”為個數,“128”為大小,最大快取為4個128KB。

sendfile on;

開啟高效檔案傳輸模式,將tcp_nopush和tcp_nodely兩個指令設定為on,用於防止網路阻塞。

autoindex on;

開啟目錄列表訪問,合適下載伺服器,預設關閉。

tcp_nopush on;

防止網路阻塞

tcp_nodelay on;

防止網路阻塞

keepalive_timeout 120;

用於設定客戶端連線保持活動的超時時間,在超過這個時間之後伺服器會關閉該連結。

client_header_timeout 3m;

用於設定客戶端請求讀取超時時間,如果超過這個時間,客戶端沒有傳送任何資料,nginx將返回“request time out (408)”錯誤。

client_body_timeout 3m;

用於設定客戶端請求主體讀取超時時間,預設值為60.如果超過這個時間,客戶端還沒有傳送任何資料,nginx將返回“Request time out(408)”

server_tokens off;

修改或隱藏Nginx的版本號

client_body_buffer_size 256k;

緩衝區代理緩衝使用者端請求的最大位元組數

send_timeout 3m;

伺服器超時設定

FastCGI相關引數是為了改善網站的效能:減少資源佔用,提高訪問速度。下面引數看字面意思都能理解。

fastcgi_connect_timeout 300;

指定連線到後端fastCGI的超時時間

fastcgi_send_timeout 300;

向fastCGI請求的超時時間,這個值是指已經完成兩次握手後向fastCGI傳送的超時時間

fastcgi_read_timeout 300;

接收fastCGI應答的超時時間,這個值已經完成兩次握手後接收fastCGI應答的超時時間

fastcgi_buffer_size 64k;

指定讀取fastCGI應答第一部分需要用多大的緩衝區,一般第一部分應答不會超過1k,一般設定為64k

fastcgi_buffers 4 64k;

指定本地需要用多少和多大的緩衝區來緩衝fastCGI的應答

fastcgi_busy_buffers_size 128k;

預設值是fastcgi_buffers的兩倍

fastcgi_temp_file_write_size 128k;

在寫入fastcgi_temp_path是用多大的資料塊,預設值是fastcgi_buffers兩倍

gzip模組設定

gzip on;

開啟gzip壓縮輸出

gzip_min_length 1k;

用於設定允許壓縮的頁面最小位元組數,頁面位元組數從header頭的content-length中獲取,預設值是0,
不管頁面多大都進行壓縮,建議設定成大於1k的位元組數,小於1k可能會越壓越大最小壓縮檔案大小

gzip_buffers 4 16k;

表示申請4個單位為16k的記憶體作為壓縮結果流快取,預設值是申請與原始資料大小相同的記憶體空間來儲存gzip壓縮結果

gzip_http_version 1.0;

壓縮版本(預設1.1,前端如果是squid2.5請使用1.0)

gzip_comp_level 2;

壓縮等級

gzip_types text/plain application/x-javascript text/css application/xml;

壓縮型別,預設就已經包含text/html,所以下面就不用再寫了,寫上去也不會有問題,但是會有一個warn。

gzip_vary on;

選項可讓前端的快取伺服器快取經過gzip壓縮的頁面,例如,用squid快取經過nginx壓縮的資料。

limit_zone crawler $binary_remote_addr 10m;

開啟限制IP連線數的時候需要使用

upstream模組設定

upstream是nginx的http upstream模組,這個模組通過一個簡單的排程演算法來實現客戶端Ip到後端伺服器的負載均衡,
下面的設定中,通過upstream指令指定一個負載均衡器的名稱為www.laien.com,這個名稱可以任意指定,在後面需要用到的地方直接呼叫即可。

upstream www.laien.com {
server 192.168.0.120:80 weight=3;
server 192.168.1.138:80 weight=2;
server 192.168.12.92:80 weight=3;
}
nginx的負載均衡支援4種排程演算法:

輪詢(預設)

每個請求按時間順序逐一分配到不同的後端伺服器,如果後端某臺伺服器當機,故障系統自動剔除,使使用者訪問不受影響,

weight

指定輪詢權值,weight值越大,分配到的訪問機率越高,主要用於後端每個伺服器效能不均的情況下

ip_hash

每個請求按訪問ip的hash結果分配,這樣來自同一個ip的訪客固定訪問一個後端伺服器,有效解決動態網頁存在的session共享問題fair比上面連個更加智慧的演算法,此種演算法可以依據頁面大小和載入時間長短智慧的進行負載均衡,也就是根據後端伺服器的響應時間來分配請求,響應時間短的優先分配,nginx本身是不支援fair的,如果需要使用這種排程演算法,必須下載nginx的upstream_fair模組

url_hash

此方法按訪問的url的hash結果來分配請求,是每個url定向到同一個後端伺服器,可以進一步提高後端快取伺服器的效率,nginx本身是不支援url_hash,如果需要使用這種排程演算法,必須安裝nginx的hash軟體包在http upstream模組中,可以通過server指令指定後端伺服器的ip地址和埠,同時還可以設定每個後端伺服器在負載均衡排程中的狀態,常用的幾種狀態有:

down
表示當前的server暫時不參與負載均衡

backup
預留的備份機器,當其他所有的非backup機器出現故障或者忙的時候才會請求backup機器,因此這臺機器的壓力最輕

max_fails
允許請求失敗的次數,預設為1,當超過最大次數時,返回proxy_next_upstream模組定義的錯誤

fail_timeout
在經歷了max_fails此失敗後,暫停服務的時間,max_fails可以和fail_timeout一起使用

虛擬主機的配置

server
{

listen

指定虛擬主機伺服器埠
listen 80;

server_name

用來指定ip地址或者域名,多個域名之間用空格分開
server_name www.ha97.com ha97.com;

index用於設定訪問的預設首頁地址

index index.html index.htm index.php;

root

用於指定虛擬主機的網頁根目錄,這個目錄可以是相對路徑,也可以使絕對路徑
root /data/www/ha97;

charser用於設定網頁的預設編碼格式

charest gb2312

access_log

用來指定此虛擬機器的訪問日誌存放路徑
access_log /data/logs/nginx/goods.access.log;

error_log

用來指定此虛擬機器的錯誤日誌存放路徑
error_log /data/logs/nginx/goods.error.log;

location

轉發fastcgi

location ~ .*\.(php|php5)?$  
{  
    fastcgi_pass 127.0.0.1:9000;  
    fastcgi_index index.php;  
    include fastcgi.conf;  
}

圖片快取時間設定

expires用來指定過期時間

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$  
{  
    expires 10d;  
}

JS和CSS快取時間設定

expires用來指定過期時間

location ~ .*\.(js|css)?$  
{  
    expires 1h;  
}

日誌格式設定

log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';

定義本虛擬主機的訪問日誌

access_log /var/log/nginx/ha97access.log access;

對 “/“ 啟用反向代理

location / {
    proxy_pass http://127.0.0.1:88;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    #後端的Web伺服器可以通過X-Forwarded-For獲取使用者真實IP
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #以下是一些反向代理的配置,可選。
    proxy_set_header Host $host;
    client_max_body_size 10m; #允許客戶端請求的最大單檔案位元組數
    client_body_buffer_size 128k; #緩衝區代理緩衝使用者端請求的最大位元組數,
    proxy_connect_timeout 90; #nginx跟後端伺服器連線超時時間(代理連線超時)
    proxy_send_timeout 90; #後端伺服器資料回傳時間(代理髮送超時)
    proxy_read_timeout 90; #連線成功後,後端伺服器響應時間(代理接收超時)
    proxy_buffer_size 4k; #設定代理伺服器(nginx)儲存使用者頭資訊的緩衝區大小
    proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k以下的設定
    proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2)
    proxy_temp_file_write_size 64k;
    #設定快取資料夾大小,大於這個值,將從upstream伺服器傳
}

設定檢視Nginx狀態的地址

location /NginxStatus {
    stub_status on;
    access_log on;
    auth_basic "NginxStatus";
    auth_basic_user_file conf/htpasswd;
    #htpasswd檔案的內容可以用apache提供的htpasswd工具來產生。
}

本地動靜分離反向代理配置

所有jsp的頁面均交由tomcat或resin處理

location ~ .(jsp|jspx|do)?$ {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8080;
}

所有靜態檔案由nginx直接讀取不經過tomcat或resin

location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
{ 
    expires 15d; 
}

location ~ .*.(js|css)?$
{ 
    expires 1h; 
}

vi /usr/local/nginx/conf/nginx.conf

user  www www;
worker_processes  1;
error_log  /cacti/nginx/logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    server_names_hash_bucket_size 128;
    proxy_headers_hash_max_size 51200;
    proxy_headers_hash_bucket_size 6400;
    client_header_buffer_size 4k;
    large_client_header_buffers 4 32k;
    tcp_nopush     on;
    keepalive_timeout 300;
    tcp_nodelay on;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_intercept_errors on;
    server_tokens off;
    client_body_buffer_size 256k;
    send_timeout 3m;
    client_header_timeout 3m;
    client_body_timeout 3m;
    proxy_ignore_client_abort on;
    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types       text/plain application/x-javascript text/css ap        plication/xml;
    gzip_vary on;
    include vhosts/*.conf;
}

vi /usr/local/nginx/conf/vhosts/upstream.conf

upstream test {
        server 192.168.12.22:80;
        server 192.168.12.25:80;
        }
vi /usr/local/nginx/conf/vhosts/proxy.conf

server{
        listen             80;
        server_name  192.168.12.22;

location / {
        proxy_pass http://test/;
  }
}
server{
        listen             80;
        server_name  192.168.12.25;

location / {
        proxy_pass http://test/;
  }
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章