nginx配置文件參數詳解


nginx配置文件主要分為4部分:
main(全局設置)    main部分設置的指令將影響其他所有設置
server(主機設置)server部分的指令主要用於指定主機和端口
upstream(負載均衡服務器設置)upstream指令主要用於負載均衡,設置后端服務器
location(URL匹配特定位置的設置)部分用於匹配網頁位置
這四者之間的關系:
server繼承main,location繼承server,
upstream既不會繼承其他設置也不會被繼承

-------------------------------------------------------------------------------------------------------------------

#user是主模塊指令,定義Nginx運行的用戶和用戶組
user www www;

#worker——processes是主模塊指令,指定了nginx要開啟的進程數,每個nginx進程平均耗費10M-12M,
建議設置為等於CPU總核心數。
worker_processes 8;

#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;

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

#events指令用來設定nginx工作模式與連接數上限
events
{
#use是個事件模塊指令,用來指定nginx的工作模式,nginx支持的工作模式有[ kqueue、rtsig、epoll、poll、select、 /dev/poll];select和poll都是標准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在linux平台上,而kqueue用在BSD系統中,對於linux系統,epoll工作模式時首選
use epoll;
#worker_connections事件模塊指令,用於定義nginx每個進程的最大連接數,默認是1024,最大客戶端連接數有worker_processes和worker_connections決定,即max_client=worker_processes*worker_connections,在作為反向代理是變為:max_clients=worker_processes*worker_connections/4。進程的最大連接數受linux系統的最大打開文件數限制,在執行操作系統命令“ulimit -n 65535”后worker_connections的設置才能生效。
worker_connections 65535;
}

-------------------------------------------以上是全局配置-------------------------------------
#設定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連接數的時候需要使用
----------------------------------以上是http模塊設置--------------------
upstream是nginx的http upstream模塊,這個模塊通過一個簡單的調度算法來實現客戶端Ip到后端服務器的負載均衡,
下面的設置中,通過upstream指令指定一個負載均衡器的名稱為blog.123.com,這個名稱可以任意指定,在后面需要用到的地方直接調用即可。
upstream www.123.com {
server 192.168.12.25:80 weight=3;
server 192.168.12.22: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;
--------------------------------------以上是server虛擬主機配置----------------------------
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; }
}
}
---------------------------------------------以上是url匹配設置-----------------------------------

例子:

配置文件信息
 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/;
  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM