總結nginx的一些配置選項:javascript
nginx全局配置文件
# 定義nginx運行的用戶和組//一個默認同時爲用戶和組 //沒有則默認爲nobody
user www-data;
# nginx進程數,建議設置爲cpu核心數量,或者爲核心總數的2倍//默認auto則和核心數量相等
worker_processes auto;
# nginx的進程文件
pid /run/nginx.pid;
#一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(系統的值ulimit -n)與nginx進程數相除,可是nginx分配請求並不均勻,因此建議與ulimit -n的值保持一致。
worker_rlimit_nofile 65535;
# 工做模式與鏈接數量上限
events {
#參考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本內核中的高性能網絡I/O模型,若是跑在FreeBSD上面,就用kqueue模型。
(值得注意的是若是你不知道Nginx該使用哪一種輪詢方法的話,它會選擇一個最適合你操做系統的)
use epoll;
#單個進程最大鏈接數(最大鏈接數=鏈接數*進程數)
worker_connections 768;
#告訴nginx收到一個新鏈接通知後接受盡量多的鏈接。
multi_accept on;
}
# 設定http服務器
http {
#開啓目錄列表訪問,適合下載服務器,默認關閉。
autoindex on;
#開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設爲
on,若是用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡I/O處理速度,
下降系統的負載。注意:若是圖片顯示不正常把這個改爲off。
sendfile on;
# 防止網絡阻塞
tcp_nopush on;
# 防止網絡阻塞
tcp_nodelay on;
# http長鏈接超時時間,單位爲秒
keepalive_timeout 65;
#設置客戶端請求讀取超時時間
client_header_timeout 10;
#設置客戶端請求主體讀取超時時間
client_body_timeout 10;
# 客戶端請求頭部的緩衝區大小。這個能夠根據你的系統分頁大小來設置,通常一個請求頭的大小不會超過1k,不過因爲通常系統分頁都要大於1k,因此這裏設置爲分頁大小。分頁大小能夠用命令getconf PAGESIZE 取得。
client_header_buffer_size 4k;
#用於設置相應客戶端的超時時間
send_timeout 10
# 這個將爲打開文件指定緩存,默認是沒有啓用的,max指定緩存數量,建議和打開文件數一致,inactive是指通過多長時間文件沒被請求後刪除緩存。
open_file_cache max=65535 inactive=60s;
# 這個是指多長時間檢查一次緩存的有效信息。
open_file_cache_valid 80s;
# 語法:open_file_cache_min_uses number 默認值:open_file_cache_min_uses 1 使用字段:http, server, location 這個指令指定了在open_file_cache指令無效的參數中必定的時間範圍內可使用的最小文件數,若是使用更大的值,文件描述符在cache中老是打開狀態
open_file_cache_min_uses 1;
# 語法:open_file_cache_errors on | off 默認值:open_file_cache_errors off 使用字段:http, server, location 這個指令指定是否在搜索一個文件是記錄cache錯誤.
open_file_cache_errors;
# proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區
proxy_temp_path /data0/proxy_temp_dir;
# 設置內存緩存空間大小爲200MB,1天沒有被訪問的內容自動清除,硬盤緩存空間大小爲30GB。
proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
types_hash_max_size 2048;
# 並不會讓nginx執行的速度更快,但它能夠關閉在錯誤頁面中的nginx版本數字,這樣對於安全性是有好處的。
server_tokens;
server_tokens off;
server_names_hash_bucket_size 64;
server_name_in_redirect off;
# 文件擴展名與文件類型映射表
include /etc/nginx/mime.types;
# 默認文件類型
default_type application/octet-stream;
# SSL Settings
# Dropping SSLv3, ref: POODLE
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl on;
ssl_certificate /etc/nginx/cert_server/server.crt;
ssl_certificate_key /etc/nginx/cert_server/server.key;php
# Logging Settings
#access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# Gzip Settings
#開啓gzip壓縮輸出
gzip on;
gzip_disable "msie6";
# gzip_proxied any; #壓縮等級 # gzip_comp_level 6; #壓縮緩衝區 # gzip_buffers 16 8k; #壓縮版本(默認1.1,前端若是是squid2.5請使用1.0) # gzip_http_version 1.1; #壓縮類型,默認就已經包含text/html,因此下面就不用再寫了,寫上去也不會有問題,可是會有一個warn。 # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; #最小壓縮文件大小 gzip_min_length 1k; #開啓限制IP鏈接數的時候須要使用 #limit_zone crawler $binary_remote_addr 10m;
# upstream 負載均衡 upstream bakend { server 127.0.0.1:8027; server 127.0.0.1:8028; server 127.0.0.1:8029; hash $request_uri; } nginx的upstream目前支持4種方式的分配 一、輪詢(默認) 每一個請求按時間順序逐一分配到不一樣的後端服務器,若是後端服務器down掉,能自動剔除。 二、weight 指定輪詢概率,weight和訪問比率成正比,用於後端服務器性能不均的狀況。 例如: upstream bakend { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; } 二、ip_hash 每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個後端服務器,能夠解決session的問題。 例如: upstream bakend { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; } 三、fair(第三方) 按後端服務器的響應時間來分配請求,響應時間短的優先分配。 upstream backend { server server1; server server2; fair; } 四、url_hash(第三方) 按訪問url的hash結果來分配請求,使每一個url定向到同一個後端服務器,後端服務器爲緩存時比較有效。 例:在upstream中加入hash語句,server語句中不能寫入weight等其餘的參數,hash_method是使用的hash算法 upstream backend { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; } tips: upstream bakend{#定義負載均衡設備的Ip及設備狀態}{ ip_hash; server 127.0.0.1:9090 down; server 127.0.0.1:8080 weight=2; server 127.0.0.1:6060; server 127.0.0.1:7070 backup; } 在須要使用負載均衡的server中增長 proxy_pass http://bakend/; 每一個設備的狀態設置爲: 1.down表示單前的server暫時不參與負載 2.weight爲weight越大,負載的權重就越大。 3.max_fails:容許請求失敗的次數默認爲1.當超過最大次數時,返回proxy_next_upstream模塊定義的錯誤 4.fail_timeout:max_fails次失敗後,暫停的時間。 5.backup: 其它全部的非backup機器down或者忙的時候,請求backup機器。因此這臺機器壓力會最輕。 nginx支持同時設置多組的負載均衡,用來給不用的server來使用。 client_body_in_file_only設置爲On 能夠講client post過來的數據記錄到文件中用來作debug client_body_temp_path設置記錄文件的目錄 能夠設置最多3層目錄 location對URL進行匹配.能夠進行重定向或者進行新的代理 負載均衡
#虛擬主機的配置 server{
#監聽端口 listen 80;
#域名能夠有多個,用空格隔開
server_name www.ha97.com ha97.com;
index index.html index.htm index.php; root /data/www/ha97; location ~ .*\.(php|php5)?${ fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; }
#圖片緩存時間設置 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${ expires 10d; } #JS和CSS緩存時間設置 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-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
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;
} }
include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;
}
#mail { # # See sample authentication script at: # # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript # # # auth_http localhost/auth.php; # # pop3_capabilities "TOP" "USER"; # # imap_capabilities "IMAP4rev1" "UIDPLUS"; # # server { # listen localhost:110; # protocol pop3; # proxy on; # } # # server { # listen localhost:143; # protocol imap; # proxy on; # } #}