nginx配置詳解(轉)

#定義Nginx運行的用戶和用戶組
user www www;javascript

#nginx進程數,建議設置爲等於CPU總核心數(通常等於CPU的總核數或總核數的兩倍)。
worker_processes 4;php

#指定錯誤日誌的存放路徑,錯誤日誌記錄級別可選項爲:[ debug | info | notice | warn | error | crit //緊急狀態 ]
error_log /var/log/nginx/error.log info; #在後邊添加類型 默認在nginx主目錄的logs目錄裏面css

#用來指定進程id的存儲文件位置。
#在Linux/Unix下,不少程序好比nginx會啓動多個進程,而發信號的時候須要知道要向哪一個進程發信號。不一樣的進程有不一樣的pid(process id)。將pid寫進文件可使得在發信號時比較簡單。好比要從新加載nginx的配置能夠這樣寫:kill -HUP `cat /path/to/nginx.pid`
pid /var/run/nginx.pid;html

#指定進程能夠打開的最大描述符這個指令是指當一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit - n)與nginx進程數相除,可是nginx分配請求並非那麼均勻,因此最好與ulimit - n的值保持一致。如今在linux 2.6內核下開啓文件打開數爲65535,worker_rlimit_nofile就相應應該填寫65535。這是由於nginx調度時分配請求到進程並非那麼的均衡,因此假如填寫10240,總併發量達到3 - 4萬時就有進程可能超過10240了,這時會返回502錯誤
worker_rlimit_nofile 65535;前端

#工做模式與鏈接數上限
events
{
#參考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本內核中的高性能網絡I/O模型,若是跑在FreeBSD上面,就用kqueue模型。
#使用epoll的I / O模型補充說明: 與apache相類,nginx針對不一樣的操做系統,有不一樣的事件模型 

use epoll;
#告訴nginx收到一個新鏈接通知後接受盡量多的鏈接。
multi_accept on;
#設置可由一個worker進程同時打開的最大鏈接數。若是設置了上面提到的worker_rlimit_nofile,咱們能夠將這個值設得很高。記住,最大客戶數也由系統的可用socket鏈接數限制(~ 64K),因此設置不切實際的高沒什麼好處 worker_connections 2048;
#工做進程的最大鏈接數量,根據硬件調整,和前面工做進程配合起來用,儘可能大,可是別把cpu跑到100 % 就行,每一個進程容許的最多鏈接數,理論上每臺nginx服務器的最大鏈接數爲worker_processes * worker_connections keepalive_timeout 60;
worker_connections 65535;
}java

#設定http服務器
http
{
include mime.types; #文件擴展名與文件類型映射表 只是一個在當前文件中包含另外一個文件內容的指令。這裏咱們使用它來加載稍後會用到的一系列的MIME類型。
default_type application/octet-stream; #默認文件類型 設置文件使用的默認的MIME-type
#charset utf-8 charset gb2312; 設置咱們的頭文件中的默認的字符集
#並不會讓nginx執行的速度更快,但它能夠關閉在錯誤頁面中的nginx版本數字,這樣對於安全性是有好處的
server_tokens off
#sendfile指令指定nginx是否調用sendfile函數(zero copy方式)來輸出文件,對於普通應用,必須設爲on。若是用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡IO處理速度,下降系統uptime。
sendfile on;
#此選項容許或禁止使用socke的TCP_CORK的選項,此選項僅在使用sendfile的時候使用
tcp_nopush on; 
#告訴nginx不要緩存數據,而是一段一段的發送--當須要及時發送數據時,就應該給應用設置這個屬性,這樣發送一小塊數據信息時就不能當即獲得返回值。
tcp_nodelay on; 
#日誌定義格式 log_format name format [format...] name表示定義的格式名稱 format表示定義的格式樣式 默認格式爲combined

#系統日誌設置
log_format combined '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#自定義日誌格式設定
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#$remote_addr和$http_x_forwarded_for用於記錄客戶的真實IP 
#$remote_user用於記錄遠程客戶端用戶名稱 
#$time_local用於記錄訪問時間與時區 
#$request用於記錄請求URL與HTTP協議
#$status用於記錄請求狀態,例如:成功時狀態爲200,頁面找到時狀態爲404
#$body_bytes_sent用於記錄發送給客戶端的文件主體內容大小
#$http_referer用於記錄是從哪一個頁面連接訪問過來的
#$http_user_agent用於記錄客戶端瀏覽器的相關信息

#默認combined格式的日誌目錄
#access_log /data1/logs/filename.log

#設置nginx是否將存儲訪問日誌。關閉這個選項可讓讀取磁盤IO操做更快(aka,YOLO)
access_log /var/log/nginx/ha97access.log access;
#語法access_log access_log path [format [buffer=size | off]]
#path表示日誌文件的存放路徑 format表示使用log_format指令設置的日誌格式名稱
#buffer=size表示設置內存緩衝區的大小 eg:buffer=32k
#關閉日誌 access_log off

server_names_hash_bucket_size 128; #保存服務器名字的hash表是由指令server_names_hash_max_size和server_names_hash_bucket_size所控制的。參數hash bucket size老是等於hash表的大小,而且是一路處理器緩存大小的倍數。在減小了在內存中的存取次數後,使在處理器中加速查找hash表鍵值成爲可能。若是hash bucket size等於一路處理器緩存的大小,那麼在查找鍵的時候,最壞的狀況下在內存中查找的次數爲2。第一次是肯定存儲單元的地址,第二次是在存儲單元中查找鍵值。所以,若是Nginx給出須要增大hash max size或hash bucket size的提示,那麼首要的是增大前一個參數的大小
large_client_header_buffers 4 64k; #客戶請求頭緩衝大小nginx默認會用client_header_buffer_size這個buffer來讀取header值,若是header過大,它會使用large_client_header_buffers來讀取若是設置太小HTTP頭 / Cookie過大會報400錯誤nginx 400 bad request求行若是超過buffer,就會報HTTP 414錯誤 (URI Too Long) nginx接受最長的HTTP頭部大小必須比其中一個buffer大,不然就會報400的HTTP錯誤 (Bad Request)
keepalive_timeout 120; #給客戶端分配keep-alive連接超時時間。服務器將在這個超時時間事後關閉連接。咱們將它設置低些可讓ngnix持續工做的時間更長。
reset_timedout_connection on;#告訴nginx關閉不響應的客戶端鏈接。這將會釋放那個客戶端所佔有的內存空間 
send_timeout 10; #指定客戶端的響應超時時間。這個設置不會用於整個轉發器,而是在兩次客戶端讀取操做之間。若是在這段時間內,客戶端沒有讀取任何數據,nginx就會關閉鏈接。
autoindex on; #開啓目錄列表訪問,合適下載服務器,默認關閉。

client_header_buffer_size 32k; #客戶端請求頭部的緩衝區大小,這個能夠根據你的系統分頁大小來設置,通常一個請求頭的大小不會超過1k,不過因爲通常系統分頁都要大於1k,因此這裏設置爲分頁大小。分頁大小能夠用命令getconf PAGESIZE取得。 [root@web001~]#getconf PAGESIZE 4096但也有client_header_buffer_size超過4k的狀況,可是client_header_buffer_size該值必須設置爲「系統分頁大小」的整倍數
client_max_body_size 8m; # 設定經過nginx上傳文件的大小
client_header_timeout 10; #設置請求頭的超時時間 咱們也能夠把這個設置低些。
client_body_timeout 10; #設置請求體的超時時間 咱們也能夠把這個設置低些。
client_body_buffer_size 512k;#若是把它設置爲比較大的數值,例如256k,那麼,不管使用firefox仍是IE瀏覽器,來提交任意小於256k的圖片,都很正常。若是註釋該指令,使用默認的client_body_buffer_size設置,也就是操做系統頁面大小的兩倍,8k或者16k,問題就出現了。不管使用firefox4.0仍是IE8.0,提交一個比較大,200k左右的圖片,都返回500 Internal Server Error錯誤


#如下和反向代理中有對應解釋
client_body_buffer_size 512k;,
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_intercept_errors on;#表示使nginx阻止HTTP應答代碼爲400或者更高的應答


tcp_nopush on; #防止網絡阻塞
tcp_nodelay on; #防止網絡阻塞



limit_conn_zone $binary_remote_addr zone=addr:5m; #置用於保存各類key(好比當前鏈接數)的共享內存的參數。5m就是5兆字節,這個值應該被設置的足夠大以存儲(32K*5)32byte狀態或者(16K*5)64byte狀態。
limit_conn addr 100;#爲給定的key設置最大鏈接數。這裏key是addr,咱們設置的值是100,也就是說咱們容許每個IP地址最多同時打開有100個鏈接 

open_file_cache max = 65535 inactive = 60s;#這個將爲打開文件指定緩存,默認是沒有啓用的,max指定緩存數量,建議和打開文件數一致,inactive是指通過多長時間文件沒被請求後刪除緩存。
#open_file_cache指令中的inactive參數時間內文件的最少使用次數,若是超過這個數字,文件描述符一直是在緩存中打開的,如上例,若是有一個文件在inactive時間內一次沒被使用,它將被移除
open_file_cache_valid 80s;#這個是指多長時間檢查一次緩存的有效信息。
open_file_cache_min_uses 1;#
open_file_cache_valid 30s; #在open_file_cache中指定檢測正確信息的間隔時間。
open_file_cache_min_uses 2;#定義了open_file_cache中指令參數不活動時間期間裏最小的文件數。 
open_file_cache_errors on; #指定了當搜索一個文件時是否緩存錯誤信息,也包括再次給配置中添加文件。咱們也包括了服務器模塊,這些是在不一樣文件中定義的。若是你的服務器模塊不在這些位置,你就得修改這一行來指定正確的位置。




#FastCGI相關參數是爲了改善網站的性能:減小資源佔用,提升訪問速度。下面參數看字面意思都能理解。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;#buffer 緩存
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;node

#gzip模塊 是告訴nginx採用gzip壓縮的形式發送數據。這將會減小咱們發送的數據量。 Gzip壓縮模塊是Nginx是一個自帶的模塊可是默認狀態是它未啓用的,Gzip壓縮模塊啓用後能夠對WEB服務器傳輸給客戶端的圖片,html,js等數據進行壓縮傳輸了,最高能夠達到百分八十左右 該模塊能夠讀取預先壓縮的gz文件,這樣能夠減小每次請求進行gzip壓縮的CPU資源消耗。該模塊啓用後,nginx首先檢查是否存在請求靜態文件的gz結尾的文件,若是有則直接返回該gz文件內容。爲了要兼容不支持gzip的瀏覽器,啓用gzip_static模塊就必須同時保留原始靜態文件和gz文件。這樣的話,在有大量靜態文件的狀況下,將會大大增長磁盤空間。咱們能夠利用nginx的反向代理功能實現只保留gz文件。
gzip on; #開啓gzip壓縮輸出
gzip_disable "msie6"; #爲指定的客戶端禁用gzip功能。咱們設置成IE6或者更低版本以使咱們的方案可以普遍兼容。
gzip_static on; #告訴nginx在壓縮資源以前,先查找是否有預先gzip處理過的資源。這要求你預先壓縮你的文件,從而容許你使用最高壓縮比,這樣nginx就不用再壓縮這些文件了(想要更詳盡的gzip_static的信息,請點擊這裏)
gzip_proxied any; #容許或者禁止壓縮基於請求和響應的響應流。咱們設置爲any,意味着將會壓縮全部的請求。
gzip_min_length 1000; #設置對數據啓用壓縮的最少字節數。若是一個請求小於1000字節,咱們最好不要壓縮它,由於壓縮這些小的數據會下降處理此請求的全部進程的速度。

gzip_min_length 1k; #最小壓縮文件大小
gzip_buffers 4 16k; #壓縮緩衝區
gzip_http_version 1.0; #壓縮版本(默認1.1,前端若是是squid2.5請使用1.0)
gzip_comp_level 4; #設置數據的壓縮等級。這個等級能夠是1-9之間的任意數值,9是最慢可是壓縮比最大的。咱們設置爲4,這是一個比較折中的設置
gzip_types text/plain application/x-javascript text/css application/xml;#設置須要壓縮的數據格式。上面例子中已經有一些了,你也能夠再添加更多的格式。
#壓縮類型,默認就已經包含text/html,因此下面就不用再寫了,寫上去也不會有問題,可是會有一個warn。
gzip_vary on;
#注:proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區

proxy_temp_path /data0/proxy_temp_dir;
#設置Web緩存區名稱爲cache_one,內存緩存空間大小爲200MB,1天沒有被訪問的內容自動清除,硬盤緩存空間大小爲30GB。
proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;

include /etc/nginx/conf.d/*.conf; 
include /etc/nginx/sites-enabled/*;
limit_zone crawler $binary_remote_addr 10m; #開啓限制IP鏈接數的時候須要使用linux

upstream pasis.com {
#詳細看 "nginx註釋.doc"中的負載均衡
#upstream的負載均衡,weight是權重,能夠根據機器配置定義權重。weigth參數表示權值,權值越高被分配到的概率越大。
server 192.168.8.43:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.8.44:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.8.45:80 weight=1 max_fails=2 fail_timeout=30s;


}nginx

#虛擬主機的配置
server
{
#監聽端口
listen 80;
#域名能夠有多個,用空格隔開
server_name www.pasis.com pasis.com *.pasis.com;
index index.html index.htm index.php;
root /data/www/pasis; #存在的目錄
location ~* \.php${
fastcgi_pass 127.0.0.1:9000; #指定FastCGI服務器監聽端口與地址,能夠是本機或者其它
fastcgi_index index.php;
include fastcgi.conf;
}
#圖片緩存時間設置
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 10d;
}
#JS和CSS緩存時間設置
location ~ .*\.(js|css)?$
{
expires 1h;
}web

#對 "/" 啓用反向代理
location / {
#這個指令設置被代理服務器的地址和被映射的URI,地址可使用主機名或IP加端口號的形式
proxy_pass http://127.0.0.1:88;
#若是須要修改從被代理服務器傳來的應答頭中的"Location"和"Refresh"字段,能夠用這個指令設置。
proxy_redirect off;


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; #設置從被代理服務器讀取的第一部分應答的緩衝區大小,一般狀況下這部分應答中包含一個小的應答頭,默認狀況下這個值的大小爲指令proxy_buffers中指定的一個緩衝區的大小,不過能夠將其設置爲更小
proxy_buffers 4 32k; #設置用於讀取應答(來自被代理服務器)的緩衝區數目和大小,默認狀況也爲分頁大小,根據操做系統的不一樣多是4k或者8k 
proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;#設置在寫入proxy_temp_path時數據的大小,預防一個工做進程在傳遞文件時阻塞太長

#如下三行,目的是將代理服務器收到的用戶的信息傳到真實服務器上
proxy_pass http: //img_relay$request_uri;##設置被代理服務器的端口或套接字,以及URL proxy_set_header Host $host;
proxy_set_header X - Real - IP $remote_addr;
proxy_set_header X - Forwarded - For $proxy_add_x_forwarded_for;#後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP

}
location / face {
if ($http_user_agent~ * "xnp") {
rewrite ^ (. * ) $ http: //211.151.188.190:8080/face.jpg redirect;
}
proxy_pass http: //img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X - Real - IP $remote_addr;
proxy_set_header X - Forwarded - For $proxy_add_x_forwarded_for;
error_page 404 502 = @fetch;
}
location@fetch {
access_log / data / logs / face.log log404;#設定本服務器的訪問日誌rewrite ^ (. * ) $ http: //211.151.188.190:8080/face.jpg redirect;
}
location / image {
if ($http_user_agent~ * "xnp") {
rewrite ^ (. * ) $ http: //211.151.188.190:8080/face.jpg redirect;
}
proxy_pass http: //img_relay$request_uri;
proxy_set_header Host $host;
proxy_set_header X - Real - IP $remote_addr;
proxy_set_header X - Forwarded - For $proxy_add_x_forwarded_for;
error_page 404 502 = @fetch;
}
location@fetch {
access_log / data / logs / image.log log404;
rewrite ^ (. * ) $ http: //211.151.188.190:8080/face.jpg redirect;
}

#設定查看Nginx狀態的地址location /NginxStatus {stub_status on;#主要用於查看Nginx的一些狀態信息access_log on;#訪問日誌#如下是保護網站目錄的訪問auth_basic "NginxStatus";auth_basic_user_file conf/htpasswd;#htpasswd文件的內容能夠用apache提供的htpasswd工具來產生。}#禁止訪問.htxxx文件location~ / \.ht {deny all;}#本地動靜分離反向代理配置#全部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或resinlocation ~ .*.(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; }}}

相關文章
相關標籤/搜索