nginx.conf配置文件
–#定義Nginx運行的用戶和用戶組
– user wwwwww;
–#nginx進程數,建議設置爲等於CPU總核心數。
–worker_processes 8;
–#全局錯誤日誌定義類型,[ debug | info | notice | warn | error | crit ]
– error_log/var/log/nginx/error.log info;
– #進程文件
– pid/var/run/nginx.pid;
–#一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(系統的值
ulimit-n)與nginx進程數相除,但是nginx分配請求並不均勻,所以建議與ulimit -n的
值保持一致。
–worker_rlimit_nofile 65535;
#工作模式與連接數上限
• events
• {
• #參考事件模型,use [ kqueue |rtsig | epoll | /dev/poll | select | poll ];
epoll模型是Linux2.6以上版本內核中的高性能網絡I/O模型,如果跑在
FreeBSD上面,就用kqueue模型。
• use epoll;
• #單個進程最大連接數(最大連接數=連接數*進程數)
• worker_connections 65535;
• }
event下的一些配置及其意義
– #單個後臺worker process進程的最大併發鏈接數
–worker_connections 1024;
– # 併發總數是 worker_processes 和worker_connections 的乘積
– # 即 max_clients = worker_processes *worker_connections
– # 在設置了反向代理的情況下,max_clients =worker_processes *
worker_connections/ 4
– # 爲什麼上面反向代理要除以4,應該說是一個經驗值,
– # 根據以上條件,正常情況下的Nginx Server可以應付的最大連接數爲:4 *8000 =32000,
– #worker_connections 值的設置跟物理內存大小有關,
– # 因爲併發受IO約束,max_clients的值須小於系統可以打開的最大文件數,
– # 而系統可以打開的最大文件數和內存大小成正比,一般1GB內存的機器上可以打開的文件數大約是10萬左右。
– # 我們來看看360M內存的VPS可以打開的文件句柄數是多少:
– # $ cat/proc/sys/fs/file-max
– # 輸出 34336
– # 32000< 34336,即併發連接總數小於系統可以打開的文件句柄總數,這樣就在操
作系統可以承受的範圍之內,
– # 所以,worker_connections 的值需根據worker_processes 進程數目和系統可以
打開的最大文件總數進行適當地進行設置
– #使得併發總數小於操作系統可以打開的最大文件數目
– # 其實質也就是根據主機的物理CPU和內存進行配置
– #當然,理論上的併發總數可能會和實際有所偏差,因爲主機還有其他的工作進程需
要消耗系統資源。
– # ulimit-SHn 65535
http下的一些配置及其意義
– #設定http服務器
– http
– {
– include mime.types; #文件擴展名與文件類型映射表
– default_type application/octet-stream; #默認文件類型
– #charset utf-8; #默認編碼
– server_names_hash_bucket_size 128; #服務器名字的hash表大小
– client_header_buffer_size 32k; #上傳文件大小限制
– large_client_header_buffers 4 64k; #設定請求緩
– client_max_body_size 8m; #設定請求緩
– sendfile on; #開啓高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來
輸出文件,對於普通應用設爲on,如果用來進行下載等應用磁盤IO重負載應用,可設置
爲off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。注意:如果圖片顯示不正常
把這個改成off。
– autoindex on; #開啓目錄列表訪問,合適下載服務器,默認關閉。
– tcp_nopush on; #防止網絡阻塞
– tcp_nodelay on; #防止網絡阻塞
– keepalive_timeout 120; #長連接超時時間,單位是秒
– }
gzip的一些配置及其意義
– #gzip模塊設置
gzip on; #開啓gzip壓縮輸出
gzip_min_length1k; #最小壓縮文件大小
gzip_buffers4 16k; #壓縮緩衝區
gzip_http_version 1.0; #壓縮版本(默認1.1,前端如果是squid2.5請使用1.0)
gzip_comp_level2; #壓縮等級
gzip_typestext/plain application/x-javascript text/css application/xml;
#壓縮類型,默認就已經包含text/html,所以下面就不用再寫了,寫上去也不會有問題
,但是會有一個warn。
gzip_varyon;
#limit_zone crawler $binary_remote_addr 10m; #開啓限制IP連接數的時候需要使用
虛擬主機一些配置及其意義
– #虛擬主機的配置
server
{
#監聽端口
listen 80;
#域名可以有多個,用空格隔開
server_name www.ha97.comha97.com;
index index.html index.htm index.jsp;
root /data/www/ha97;
location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.jsp;
include fastcgi.conf;
}
通過nginx可以實現虛擬主機的配置,nginx支持三種類型的
虛擬主機配置,
– 1、基於ip的虛擬主機, (一塊主機綁定多個ip地址)
– 2、基於域名的虛擬主機(servername)
– 3、基於端口的虛擬主機(listen如果不寫ip端口模式)
– 示例基於虛擬機ip的配置,這裏需要配置多個ip
– server
– {
– listen192.168.20.20:80;
–server_name www.linuxidc.com;
– root/data/www;
– }
– server
– {
– listen192.168.20.21:80;
–server_name www.linuxidc.com;
– root/data/www;
– }
nginx.conf下的配置
– http{
– server{
– #表示一個虛擬主機
– }
– }
location 映射(ngx_http_core_module)
– location[ = | ~ | ~* | ^~ ] uri { ... }
– locationURI {}:
–對當前路徑及子路徑下的所有對象都生效;
– location = URI {}: 注意URL最好爲具體路徑。
–精確匹配指定的路徑,不包括子路徑,因此,只對當前資源生效;
– location~ URI {}:
– location~* URI {}:
– 模式匹配URI,此處的URI可使用正則表達式,~區分字符大小寫,~*不區
分字符大小寫;
– location^~ URI {}:
– 不使用正則表達式
– 優先級:= > ^~ > ~|~* > /|/dir/
location配置規則
=前綴的指令嚴格匹配這個查詢。如果找到,停止搜索。
•所有剩下的常規字符串,最長的匹配。如果這個匹配使用^〜前綴,搜索停止。
• 正則表達式,在配置文件中定義的順序。
• 如果第3條規則產生匹配的話,結果被使用。否則,如同從第2條規則被使用
location的執行邏輯跟 location 的編輯順序無關。
矯正:這句話不全對,“ 普通 location ” 的匹配規則是“ 最大前綴” ,因此“ 普
通 location ” 的確與 location 編輯順序無關;但是“ 正則 location ” 的匹配規則是“ 順序
匹配,且只要匹配到第一個就停止後面的匹配” ;“ 普通location ” 與“ 正則 location ” 之
間的匹配順序是?先匹配普通 location ,再“ 考慮” 匹配正則 location 。注意這裏的“ 考
慮” 是“ 可能” 的意思,也就是說匹配完“ 普通 location ” 後,有的時候需要繼續匹配“ 正
則 location ” ,有的時候則不需要繼續匹配“ 正則 location ” 。兩種情況下,不需要繼續
匹配正則 location :( 1 )當普通 location 前面指定了“^~ ” ,特別告訴 Nginx 本條普
通 location 一旦匹配上,則不需要繼續正則匹配;( 2 )當普通location 恰好嚴格匹配上
,不是最大前綴匹配,則不再繼續匹配正則。
使用一種工具當對他的配置特別熟悉的時候就能更容易的使用它,讓它發揮最大的作用,也能在出現問題之前能及時考慮好各種情況,最好查漏補缺,所以掌握Nginx配置很重要哦,如果想學好Nginx,先了解他的配置吧。