nginx配置檔案主要分為4部分:
- main(全域性設定) main部分設定的指令將影響其他所有設定
- server(主機設定) server部分的指令主要用於指定主機和埠
- upstream(負載均衡伺服器設定) upstream指令主要用於負載均衡,設定後端伺服器
- 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 協議》,轉載必須註明作者和本文連結