Nginx 的nginx.conf文件,是調優后的,具體影響已經寫清楚注釋,可以拿來用,有一些設置無效,我備注上了,不知道是不是版本的問題,回頭查一下再更正。
#普通配置 #==性能配置 #運行用戶 user nobody; #pid文件 pid logs/nginx.pid; #Nginx基於事件的非阻塞多路復用模型(epoll或kquene) #一個進程在短時間內可以響應大量請求,工作進程設置與cpu數相同,避免cpu在多個進程間切換增加開銷 #==worker進程數,通常設置<=CPU數量,auto為自動檢測,一般設置最大8個即可,再大性能提升較小或不穩定 worker_processes auto; #==將每個進程綁定到特定cpu上,避免進程在cpu間切換的開銷 worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; #==worker進程打開最大文件數,可CPU*10000設置,或設置系統最大數量655350 worker_rlimit_nofile 102400; #全局錯誤日志 error_log logs/error.log; #events模塊中包含nginx中所有處理連接的設置,並發響應能力的關鍵配置 events { #==每個進程同時打開的最大連接數(最大並發數) worker_connections 102400; #==告訴nginx收到一個新鏈接通知后接受盡可能多的鏈接 #multi_accept on; #一般http 1.1協議下,瀏覽器默認使用兩個並發鏈接 #如果是反向代理,nginx需要和客戶端保持連接,還需要和后端服務器保持連接 #Http服務器時,設置max_client=worker_processes*worker_connections/2 #反向代理時,設置max_client=worker_processes*worker_connections/4 #==最大可用客戶端數 #max_client #==使用非阻塞模型,設置復用客戶端線程的輪訓方法 use epoll; } #http模塊控制着nginx http處理的所有核心特性 http { #打開或關閉錯誤頁面中的nginx版本號等信息 server_tokens on; #!server_tag on; #!server_info on; #==優化磁盤IO設置,指定nginx是否調用sendfile函數來輸出文件,普通應用設為on,下載等磁盤IO高的應用,可設為off sendfile on; #緩存發送請求,啟用如下兩個配置,會在數據包達到一定大小后再發送數據 #這樣會減少網絡通信次數,降低阻塞概率,但也會影響響應的及時性 #比較適合於文件下載這類的大數據包通信場景 #tcp_nopush on; #tcp_nodelay on; #==設置nginx是否存儲訪問日志,關閉這個可以讓讀取磁盤IO操作更快 access_log on; #設置nginx只記錄嚴重錯誤,可減少IO壓力 #error_log logs/error.log crit; #Http1.1支持長連接 #降低每個鏈接的alive時間可在一定程度上提高響應連接數量 #==給客戶端分配keep-alive鏈接超時時間 keepalive_timeout 30; #設置用戶保存各種key的共享內存的參數,5m指的是5兆 limit_conn_zone $binary_remote_addr zone=addr:5m; #為給定的key設置最大的連接數,這里的key是addr,設定的值是100,就是說允許每一個IP地址最多同時打開100個連接 limit_conn addr 100; #include指在當前文件中包含另一個文件內容 include mime.types; #設置文件使用默認的mine-type default_type text/html; #設置默認字符集 charset UTF-8; #==設置nginx采用gzip壓縮的形式發送數據,減少發送數據量,但會增加請求處理時間及CPU處理時間,需要權衡 gzip on; #==加vary給代理服務器使用,針對有的瀏覽器支持壓縮,有個不支持,根據客戶端的HTTP頭來判斷是否需要壓縮 gzip_vary on; #nginx在壓縮資源之前,先查找是否有預先gzip處理過的資源 #!gzip_static on; #為指定的客戶端禁用gzip功能 gzip_disable "MSIE[1-6]\."; #允許或禁止壓縮基於請求和相應的響應流,any代表壓縮所有請求 gzip_proxied any; #==啟用壓縮的最少字節數,如果請求小於1024字節則不壓縮,壓縮過程會消耗系統資源 gzip_min_length 1024; #==數據壓縮等級,1-9之間,9最慢壓縮比最大,壓縮比越大對系統性能要求越高 gzip_comp_level 2; #需要壓縮的數據格式 gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss; #靜態文件緩存 #==開啟緩存的同時也指定了緩存文件的最大數量,20s如果文件沒有被請求則刪除緩存 open_file_cache max=100000 inactive=20s; #==多長時間檢查一次緩存的有效期 open_file_cache_valid 30s; #==有效期內緩存文件最小的訪問次數,只有訪問超過2次的才會被緩存 open_file_cache_min_uses 2; #當搜索一個文件時是否緩存錯誤信息 open_file_cache_errors on; #==允許客戶端請求的最大單文件字節數 client_max_body_size 4m; #==客戶端請求頭緩沖區大小 client_header_buffer_size 4k; #是否啟用對發送給客戶端的URL進行修改 proxy_redirect off; #后端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #==nginx跟后端服務器連接超時時間(代理連接超時) proxy_connect_timeout 60; #==連接成功后,后端服務器響應時間(代理接收超時) proxy_read_timeout 120; #==后端服務器數據回傳時間(代理發送超時) proxy_send_timeout 20; #==設置代理服務器(nginx)保存用戶頭信息的緩沖區大小 proxy_buffer_size 32k; #==proxy_buffers緩沖區,網頁平均在32k以下的設置 proxy_buffers 4 128k; #==高負荷下緩沖大小(proxy_buffers*2) proxy_busy_buffers_size 256k; #==設定緩存文件夾大小,大於這個值,將從upstream服務器傳 proxy_temp_file_write_size 256k; #==1G內存緩沖空間,3天不用刪除,最大磁盤緩沖空間2G proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:1024m inactive=3d max_size=2g; #設定負載均衡服務器列表 upstream nginx.test.com{ #后端服務器訪問規則 #ip_hash; #weight參數表示權重值,權值越高被分配到的幾率越大 #server 10.11.12.116:80 weight=5; #PC_Local server 10.11.12.116:80; #PC_Server server 10.11.12.112:80; #Notebook #server 10.11.12.106:80; } #server代表虛擬主機,可以理解為站點(掛載多個站點,只需要配置多個server及upstream節點即可) server { #監聽80端口 listen 80; #識別的域名,定義使用nginx.test.com訪問 server_name nginx.test.com; #設定本虛擬主機的訪問日志 access_log logs/nginx.test.com.access.log; #一個域名下匹配多個URI的訪問,使用location進行區分,后面緊跟着的/代表匹配規則 #如動態資源訪問和靜態資源訪問會分別指向不同的位置的應用場景 # # 基本語法規則:location [=|~|~*|^~] /uri/ {...} # = 開頭表示精確匹配 # ^~ 開頭表示uri以某個常規字符串開頭,匹配成功后不再進行正則匹配 # ~ 開頭表示區分大小寫的正則匹配 # ~* 開頭表示不區分大小寫的正則匹配 # !~ 開頭表示區分大小寫的不匹配的正則 # !~* 開頭表示不區分大小寫的不匹配的正則 # / 通用匹配,任何請求都會被匹配到 # # 理解如下: # 有兩種匹配模式:普通字符串匹配,正則匹配 # 無開頭引導字符或以=開頭表示普通字符串匹配 # 以~或~*開頭表示正則匹配,~*表示不區分大小寫 # 【多個location時,先匹配普通字符串location,再匹配正則location】 # 只識別URI部分,例如請求為“/test/1/abc.do?arg=xxx” # (1)先查找是否有=開頭的精確匹配,即“location=/test/1/abc.do {...}” # (2)再查找普通匹配,以“最大前綴”為規則,如有以下兩個location # location /test/ {...} # location /test/1/ {...} # 則匹配后一項 # (3)匹配到一個普通location后,搜索並未結束,而是暫存當前結果,並繼續進行正則搜索 # (4)在所有正則location中找到第一個匹配項后,以此匹配項為最終結果 # 【所以正則匹配項,匹配規則受定義前后順序影響,但普通匹配不會】 # (5)如果未找到正則匹配項,則以(3)中緩存的結果為最終結果 # (6)如果一個匹配都沒有,則返回404 # location =/ {...}與location / {...}的差別 # 前一個是精確匹配,只響應“/”的請求,所有“/xxx”形式的請求不會以“前綴匹配形式”匹配到它 # 后一個正相反,所有請求必然都是以“/”開頭,所以沒有其他匹配結果時一定會執行到它 # location ^~ / {...} ^~的意思是禁止正則匹配,表示匹配到此項后不再進行后續的正則搜索 # 相當於普通匹配模式匹配成功后就以此結果為最終結果,停止進行后續的正則匹配 location / { #定義服務器的默認網站根目錄位置,可以寫相對路徑,也可以寫絕對路徑 root html; #定義首頁索引文件的名稱 index index.html index.htm; #定義轉發后端負載服務器組 proxy_pass http://nginx.test.com; } #定義錯誤提示頁面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } #靜態文件,nginx自己處理 location ~ ^/(images|javascript|js|css|flash|media|static)/{ root /var/www/virtual/htdocs; #過期時間1天 expires 1d; #關閉媒體文件日志 access_log off; log_not_found off; } #設定查看Nginx狀態的地址 location /NginxStatus { #!stub_status on; #無此關鍵字 access_log off; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; } #禁止訪問的文件.htxxx location ~ /\.ht { #deny all;禁止訪問,返回403 deny all; #allow all;允許訪問 } } #網站較多的情況下ngxin又不會請求瓶頸可以考慮掛多個站點,並把虛擬主機配置單獨放在一個文件內,引入進來 #include website.conf; }