主配置文件(nginx.conf):javascript
user nginx nginx; #運行用戶css
worker_processes 8; #啓動進程數,通常等於CPU的總核數或兩倍,太多會佔用CPU增高。html
error_log /tol/app/nginx/logs/nginx_error.log crit; #定義錯誤日誌文件及級別,有 [debug|info|notice|warn|error|crit]前端
pid /tol/app/nginx/logs/nginx.pid; #定義PID文件java
worker_rlimit_nofile 51200; #和系統的單進程打開文件數一致,使用ulimit -SHn 65534 設置node
events{nginx
use epoll; #工做模式,有 [kqueue|rtsig|epoll|/dev/poll|select|poll]web
worker_connections 51200; #單進程最大鏈接數,程序最大鏈接數=worker_connections*worker_processes算法
}後端
http{
include mime.types; #文件擴展名與文件類型映射表
default_type application/octet-stream; #設置默認類型是二進制流,當類型未定義時使用二進制流的方式。好比未加裝PHP時,是不予解析,用瀏覽器訪問則出現下載窗口
server_names_hash_bucket_size 128; #服務器名字的hash表大小,不能帶單位
client_header_buffer_size 128k; #客戶端請求頭部的緩衝區大小,這個能夠根據你的系統分頁大小來設置,通常一個請求頭的大小不會超過1k,不過因爲通常系統分頁都要大於1k,因此這裏設置爲分頁大小
large_client_header_buffers 4 128k; #客戶請求頭緩衝大小,4爲個數,128k爲大小,申請4個128k。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)。
client_max_body_size 8m; #容許客戶端請求的最大單個文件字節數(nginx上傳文件的大小),若超出此值,報413 Request Entity Too Large
client_body_buffer_size 128k; #緩衝區代理緩衝用戶端請求的最大字節數,能夠理解爲先保存到本地再傳給用戶,若是把它設置爲比較大的數值,例如256k,那麼,不管使用firefox仍是IE瀏覽器,來提交任意小於256k的圖片,都很正常。若是註釋該指令,使用默認的client_body_buffer_size設置,也就是操做系統頁面大小的兩倍,8k或者16k,問題就出現了。不管使用firefox4.0仍是IE8.0,提交一個比較大,200k左右的圖片,都返回500 Internal Server Error錯誤
sendfile on; #打開系統函數sendfile()支持,開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件對於普通應用設爲 on,若是用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡I/O處理速度,下降系統的負載。
注意:若是圖片顯示不正常把這個改爲off。
tcp_nopush on; #此選項容許或禁止使用socke的TCP_CORK的選項,此選項僅在使用sendfile的時候使用。參考:http://blog.csdn.net/zmj_88888888/article/details/9169227
也就是說tcp_nopush on 會設置調用tcp_cork方法。
這個也是默認的,結果就是數據包不會立刻傳送出去,等到數據包最大時,一次性的傳輸出去,這樣有助於解決網絡堵塞
keepalive_timeout 60; #長鏈接超時時間,單位是秒
tcp_nodelay on; #爲了發送小數據,好比10B如下的數據,會封裝一個帶有40B的IP包。若是每次都將這些小數據封裝成IP包,很容易形成網絡擁塞,因此就能夠設置是將多個小數據封裝成一個包(tcp_nodelay off)仍是封裝這些小數據成一個包(tcp_nodelay on)。tcp_nodelay和tcp_nopush是互斥的。不過若是你同時設置了兩個值的話,將會在第一個buf發送的時候,強制push數據,而第二個buf時,將會調用tcp_cork來打開nagle算法,也就是後面的都會應用tcp_nopush.
參考:http://www.pagefault.info/?p=228
#以上四項能夠提升文件傳輸性能
server_tokens off; #關閉報錯時的Nginx版本顯示
gzip on; #開啓gzip壓縮輸出
gzip_min_length 1k; #從Content-Length中數值獲取驗證,小於1K會越壓越大
gzip_buffers 4 16k; #以16K爲單位4倍的申請內存作壓縮結果流緩存,默認值是申請跟原始數據相同大小的內存空間去存儲gzip壓縮結果。
gzip_http_version 1.0; #壓縮版本(默認1.1,前端若是是squid2.5請使用1.0)
gzip_comp_level 2; #壓縮比率1-9,1壓縮比最小處理速度最快,9壓縮比最大但處理最慢且耗CPU
gzip_types text/plain application/x-javascript text/css application/xml; #壓縮類型,不管是否指定text/html老是會壓縮
gzip_vary on; #此選項可以讓前端的緩存服務,如squid緩存通過nginx壓縮的數據
#limit_zone connlimit $binary_remote_addr 10m; #開啓限制IP鏈接數的時候須要使用,定義名爲connlimit的併發鏈接數限制空間,存儲10M的帶有二進制IP的會話信息,每一個會話信息是32bytes,10M應該能夠記錄320000個會話。配合limit_conn 使用。
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,
$body_bytes_s ent :記錄發送給客戶端文件主體內容大小;
$http_referer:用來記錄從那個頁面連接訪問過來的;
$http_user_agent:記錄客戶瀏覽器的相關信息;
一般web服務器放在反向代理的後面,這樣就不能獲取到客戶的IP地址了,經過$remote_add拿到的IP地址是反向代理服務器的iP地址。
反向代理服務器在轉發請求的http頭信息中,能夠增長x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址;
access_log off; #關閉訪問日誌
include /tol/app/nginx/conf/vhost/*.conf; #加載其餘的配置文件
}
虛擬主機配置文件:
upstream zhuanti { #設定負載均衡的服務器列表,名稱爲zhuanti
server 127.0.0.1:8040;
}
server {
listen 80;
server_name zhuanti.test.com;
root /tol/htdocs/zhuanti/ROOT;
index index.html index.jsp index.htm;
#limit_conn connlimit 20; #限制一個IP只能最多隻能發起20個鏈接,超過報 503 Service unavailable,與主配置文件裏配置的名稱對應。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
expires 1h; #緩存到客戶端的瀏覽器一個小時
}
location / {
#autoindex on; 開啓自動索引功能,通常用於能夠下載文件的服務器
#autoindex_exact_size on|off; 設定索引時文件大小的單位,默認爲on,單位是bytes,設爲off時單位(B、KB、MB、GB)
#autoindex_localtime on|off; 開啓以本地時間來顯示文件時間的功能
if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|bingbot|360Spider") { #$http_user_agent 匹配客戶端agent信息
proxy_pass http://ask2;
}
proxy_pass http://zhuanti/;
proxy_redirect off;
#proxy_next_upstream http_502 http_504 error timeout invalid_header; #若是後端服務器返回50二、50四、超時等錯誤自動將請求轉發到upstream負載均衡池中的另外一臺服務器。
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
#以上三行,目的是將代理服務器收到的用戶的信息傳到真實服務器上
client_max_body_size 50m;
client_body_buffer_size 128k;
proxy_connect_timeout 120; #nginx跟後端服務器鏈接超時時間_發起握手等候響應超時時間
proxy_send_timeout 120; #後端服務器數據回傳時間_就是在規定時間以內後端服務器必須傳完全部的數據
proxy_read_timeout 120; #鏈接成功後_等候後端服務器響應時間_其實已經進入後端的排隊之中等候處理(也能夠說是後端服務器處理請求的時間)
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; #設置在寫入proxy_temp_path時數據的大小,預防一個工做進程在傳遞文件時阻塞太長
}
access_log /tol/app/nginx/logs/zhuanti.log access;
location /nginxstatus {
allow 127.0.0.1;
deny all;
stub_status on;
access_log off;
}
}