nginx配置文件主要分為六個(gè)區(qū)域:
main(全局設(shè)置)真友、events(nginx工作模式)盔然、http(http設(shè)置)、
sever(主機(jī)設(shè)置)叠纷、location(URL匹配)、upstream(負(fù)載均衡服務(wù)器設(shè)置)航厚。
其中還有若干模塊幔睬,如HttpGzip模塊,stubstatus模塊等等
結(jié)構(gòu)類似如下:
main
events {
....
}
http {
....
upstream myproject {
.....
}
server {
....
location {
....
}
}
1辅肾、功能特性
1)基本HTTP服務(wù)
可以作為http代理服務(wù)器和反向代理服務(wù)器矫钓,支持通過緩存加速訪問,可以完成簡(jiǎn)單的負(fù)載均衡和容錯(cuò)概龄,支持包過濾旁钧,支持SSL嚎幸,具體包括:
1>處理靜態(tài)文件嫉晶,如HTML網(wǎng)頁以及請(qǐng)求;
2>打開并自行管理文件描述符緩存;
3>提供反向代理服務(wù)兽赁,并且可用緩存加速反向代理刀崖;
4>提供遠(yuǎn)程FastCGI(通用網(wǎng)關(guān)接口)服務(wù)的緩存機(jī)制;
5>模塊化提供過濾器功能蜂莉,gzip壓縮 ranges支持 chunked響應(yīng) XSLT SSI 圖像縮放 針對(duì)包含多個(gè)SSI的頁面巡语,經(jīng)由反向代理SSI過濾器可并行處理;
6>支持安全套接協(xié)議SSL枢赔;
2)高級(jí)HTTP服務(wù)
可以進(jìn)行自定義配置,支持虛擬主機(jī)速梗,支持URL重定向姻锁,支持網(wǎng)絡(luò)監(jiān)控,支持流媒體傳輸?shù)冉Щ疲唧w包括:
1>支持基于名字和IP的虛擬主機(jī)設(shè)置懊昨;
2>支持HTTP/1.0 中的keep-alive模式和管線模型(PipelLined)連接疚颊;
3>支持重新升級(jí)時(shí),無需中斷正在處理的請(qǐng)求其掂;
4>自定義訪問日志格式、帶緩存的日志寫操作以及快速日志輪轉(zhuǎn)贤牛;
5>提供3xx 5xx錯(cuò)誤代碼重定向功能殉簸;
6>支持重寫模塊擴(kuò)展;
7>支持HTTP DAV模塊蝠检,從而為HTTP DAV模塊提供PUT DELETE MKCOL COPY MOVE方法;
8>支持FLV流和MP4流傳輸焰檩;
9>支持網(wǎng)絡(luò)監(jiān)控监氢,訪問控制、速度限制或請(qǐng)求限制等;
10>支持嵌入perl語言璧榄;
3)郵件代理服務(wù)
郵件代理服務(wù)器,支持IMAP/POP3代理服務(wù)功能搓蚪,支持內(nèi)部SMTP代理服務(wù)功能,具體包括:
1>支持使用外部HTTP認(rèn)證服務(wù)器重定向用戶到IMAP/POP3后端雳灾,并支持IMAP認(rèn)證方式和POP3認(rèn)證方式;
2>支持使用外部HTTP認(rèn)證服務(wù)器器認(rèn)證用戶后重定向連接到內(nèi)部SMTP后端团驱,并支持SMTP認(rèn)證方式;
3>支持郵件代理服務(wù)下的安全套接層安全協(xié)議SSL紊选;
4>支持純文本通信協(xié)議的擴(kuò)展協(xié)議STARTTLS;
4)常用功能
1>HTTP代理和反向代理道逗,優(yōu)勢(shì):請(qǐng)求穩(wěn)定兵罢,后端轉(zhuǎn)發(fā)與業(yè)務(wù)配合分離,配置靈活滓窍,支持判斷表達(dá)式卖词。
2>負(fù)載均衡,優(yōu)勢(shì):
1》將單一的重負(fù)載分擔(dān)到多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)上做并行處理此蜈,每個(gè)節(jié)點(diǎn)處理結(jié)束后將結(jié)果匯總給用戶提高網(wǎng)絡(luò)系統(tǒng)的處理能力即横;
2》將大量的前端并發(fā)訪問或者數(shù)據(jù)流量分擔(dān)到多個(gè)后端網(wǎng)絡(luò)節(jié)點(diǎn)上分別處理;
nginx的負(fù)載均衡策略:
1》內(nèi)置策略:輪詢裆赵、加權(quán)輪詢东囚、IP hash
2》擴(kuò)展策略 主要通過第三方模塊實(shí)現(xiàn),常見有url hash
3>WEB緩存战授,主要由Proxy_Cache(提供代理服務(wù)時(shí)页藻,對(duì)后端服務(wù)器返回內(nèi)容進(jìn)行URL緩存)和FastCGI_Cache(對(duì)FastCGI程序緩存)指令集構(gòu)成。
2植兰、常用命令
方法 | 說明 |
---|---|
1)檢查: | nginx -t |
2)啟動(dòng): | nginx 加參數(shù)-c指定nginx.conf |
3)停止: | nginx -s stop |
4)重啟: | nginx -s reload |
3份帐、配置
nginx.conf主要由以下三塊組成:
1)全局塊
配置一些影響整體運(yùn)行的指令,通常有:服務(wù)器用戶組楣导、允許生成的worker弥鹦、process、nginx.pid存放路徑爷辙、日志存放路徑彬坏、類型和配置文件引入,全局塊配置項(xiàng)有:
配置項(xiàng) 說明 其它可配置的地方
user
配置用戶和組膝晾,默認(rèn)為nobody nobody栓始,表示所有用戶有啟停權(quán)限。
daemon 設(shè)置是否以守護(hù)進(jìn)程模式運(yùn)行血当,默認(rèn)on幻赚。該選項(xiàng)僅用于開發(fā)測(cè)試。
debug_points 斷點(diǎn)調(diào)試臊旭。
master_process 設(shè)置是否啟用主進(jìn)程落恼,默認(rèn)on。
worker_processes
設(shè)置為數(shù)字离熏,表示啟動(dòng)后就具有幾個(gè)worker process佳谦,
設(shè)置為auto則表示自動(dòng)檢測(cè)。
worker_rlimit_nofile worker進(jìn)程能打開的文件描述符個(gè)數(shù)
worker_rlimit_sigpending 設(shè)置每個(gè)用戶能夠發(fā)往worker進(jìn)程的信號(hào)數(shù)量(信號(hào)隊(duì)列的大小)
worker_cpu_affinity 為worker進(jìn)程綁定若干個(gè)CPU滋戳,OS為linux才能使用此參數(shù)钻蔑。
worker_priority 設(shè)置worker進(jìn)程的優(yōu)先級(jí)
error_log 指定nginx的運(yùn)行日志存放路徑,必須包含文件名稱奸鸯。
全局塊咪笑、http塊、server塊和location塊
pid
指定nginx的pid存放路徑娄涩,必須包含文件名稱窗怒。
SSL_engine
指定所使用的ssl硬件加速設(shè)備。
timer_resolution 設(shè)置多長(zhǎng)時(shí)間獲取一次系統(tǒng)時(shí)間并更新nginx的緩存時(shí)鐘。
include 引入的其他配置文件路徑扬虚。 任意位置
2)events塊
影響nginx服務(wù)器與用戶的網(wǎng)絡(luò)連接努隙,這一塊的設(shè)置對(duì)服務(wù)的性能影響較大。通常有:是否開啟對(duì)WP下的網(wǎng)絡(luò)進(jìn)行序列化孔轴、是否允許同時(shí)接受多個(gè)網(wǎng)絡(luò)連接剃法、事件驅(qū)動(dòng)模型碎捺、每個(gè)WP可以同時(shí)支持處理的最大連接數(shù)路鹰,events塊配置項(xiàng)有:
配置項(xiàng) | 說明 | 其他可配置的地方 |
---|---|---|
use | 設(shè)置事件驅(qū)動(dòng)模動(dòng)模型,建議讓nginx自行選擇收厨〗可以設(shè)置為:select、poll诵叁、kqueue雁竞、epoll、rtsig /dev/poll拧额、eventport碑诉。 | |
debug_connection | 設(shè)置指定的IP產(chǎn)生debug日志。 | |
accept_mutex | 是否開啟負(fù)載均衡鎖侥锦,即:當(dāng)只有一個(gè)請(qǐng)求進(jìn)來時(shí)进栽,是否只喚醒一個(gè)進(jìn)程(控制“驚群效應(yīng)”),否則輪流接受請(qǐng)求恭垦。 | |
lock_file | 設(shè)置負(fù)載均衡鎖文件路徑 | |
multi_accept | 設(shè)置一個(gè)進(jìn)程是否可以同時(shí)接受多個(gè)請(qǐng)求快毛。 | |
accept_mutex_delay | 設(shè)置獲得負(fù)載均衡鎖的重試時(shí)間間隔。 | |
worker_connections | 允許每一個(gè)worker process同時(shí)開啟的最大連接數(shù)番挺,此值不能大于操作系統(tǒng)支持的打開的最大文件句柄數(shù)唠帝,默認(rèn)512。 |
3)http塊
nginx.conf最重要的組成部分玄柏,包括:MIME-TYPE定義襟衰、日志自定義、是否使用sendfile傳輸文件粪摘、連接超時(shí)時(shí)間右蒲、單連接請(qǐng)求數(shù)上限、代理赶熟、緩存和第三方模塊的配置瑰妄。http塊中包含http全局塊和多個(gè)server塊。http全局塊配置項(xiàng)有:
配置項(xiàng) | 說明 | 其他可配置的地方 |
---|---|---|
allow | 配置允許訪問服務(wù)的ip | server塊映砖、location塊 |
deny | 配置不允許訪問服務(wù)的ip | server塊间坐、location塊 |
default_type | 默認(rèn)為text/plain。 | server塊、location塊 |
log_format [name] [string] | string整體需要用'括起來竹宋,變量名稱使用雙引號(hào)括起來劳澄。 | |
access_log [path] [format_name [buffer=size]] | 應(yīng)答前端請(qǐng)求的服務(wù)日志,關(guān)閉日志使用off蜈七。 server塊秒拔、location塊 | |
sendfile | 是否允許sendfile方式傳輸文件,默認(rèn)on飒硅。 | |
sendfile_max_chunk | 每個(gè)進(jìn)程每次調(diào)用傳輸數(shù)量不能大于設(shè)定的值砂缩,默認(rèn)為0,即不設(shè)上限三娩。 | |
client_body_in_file_only | 指定是否將用戶請(qǐng)求體存儲(chǔ)到一個(gè)文件里庵芭。 server塊、location塊 | |
client_body_in_single_buffer | 設(shè)置是否將完整的請(qǐng)求主體存儲(chǔ)在單個(gè)緩沖區(qū)中雀监。 | |
client_body_buffer_size | 指定用戶請(qǐng)求體所使用的buffer的最大值双吆。 server塊、location塊 | |
client_body_temp_path | 設(shè)置存儲(chǔ)用戶請(qǐng)求體的文件的目錄路徑 server塊会前、location塊 | |
client_body_timeout | 設(shè)置用戶請(qǐng)求體的超時(shí)時(shí)間好乐。 server塊、location塊 | |
client_header_buffer_size | 設(shè)置用戶請(qǐng)求頭所使用的buffer大小 server塊 | |
large_client_header_buffers | 設(shè)置用于讀取大型客戶端請(qǐng)求頭的緩沖區(qū)的最大數(shù)量和大小 | |
client_header_timeout | 設(shè)置用戶請(qǐng)求頭的超時(shí)時(shí)間瓦宜。 server塊蔚万、location塊 | |
client_max_body_size | 設(shè)置所能接收的最大請(qǐng)求體的大小,默認(rèn)1M歉提。 server塊笛坦、location塊 | |
send_timeout | 指定響應(yīng)客戶端的超時(shí)時(shí)間,單位:秒,默認(rèn)60 | |
keepalive_timeout | 設(shè)置用戶會(huì)話連接的保持時(shí)間苔巨。 server塊版扩、location塊 | |
tcp_nopush | 設(shè)置TCP鏈接是否不推送,默認(rèn)on侄泽。 | |
tcp_nodelay | 設(shè)置TCP鏈接是否延遲礁芦,默認(rèn)on。將tcp_nopush和tcp_nodelay兩個(gè)指令設(shè)置為on用于防止網(wǎng)絡(luò)阻塞悼尾。 | |
autoindex | 如果沒有首頁文件是否列出目錄中的所有文件柿扣,即是否開啟目錄瀏覽功能。 server塊闺魏、location塊 | |
autoindex_format | 設(shè)置目錄瀏覽功能展示風(fēng)格未状,可選:html、xml析桥、json司草、jsonp server塊艰垂、location塊 | |
autoindex_exact_size | 設(shè)置文件大小是否以字節(jié)數(shù)顯示,autoindex_format為html時(shí)有效埋虹。 server塊猜憎、location塊 | |
autoindex_localtime | 是否以服務(wù)器的文件時(shí)間作為顯示的時(shí)間,autoindex_format為html時(shí)有效搔课。 server塊胰柑、location塊 | |
set_real_ip_from | 設(shè)置符合條件的網(wǎng)段,結(jié)合real_ip_header爬泥,設(shè)置新的$remote_addr server塊柬讨、location塊 | |
real_ip_header | 結(jié)合set_real_ip_from,設(shè)置新的$remote_addr急灭,如果設(shè)置X-Forwarded-For則為真實(shí)的ip server塊姐浮、location塊 | |
gzip | 是否開啟gzip壓縮谷遂。 | |
gzip_min_length | 設(shè)置允許壓縮的頁面最小字節(jié)數(shù)葬馋,默認(rèn)0。 | |
gzip_buffers | 設(shè)置系統(tǒng)獲取幾個(gè)單位的緩存用于存儲(chǔ)gzip的壓縮結(jié)果數(shù)據(jù)流肾扰。 | |
gzip_http_version | 識(shí)別http的協(xié)議版本畴嘶。 | |
gzip_comp_level | gzip壓縮比,1壓縮比最小處理速度最快集晚,9壓縮比最大但處理速度最慢(傳輸快但比較消耗cpu)窗悯。 | |
gzip_types | 匹配mime類型進(jìn)行壓縮,無論是否指定,”text/html”類型總是會(huì)被壓縮的偷拔。 | |
gzip_vary | 和http頭有關(guān)系蒋院,加個(gè)vary頭,給代理服務(wù)器用的莲绰,有的瀏覽器支持壓縮欺旧,有的不支持,所以避免浪費(fèi)不支持的也壓縮蛤签,所以根據(jù)客戶端的HTTP頭來判斷辞友,是否需要壓縮。 | |
gzip_disable | 指定版本瀏覽器不壓縮震肮。 | |
upstream | 指定負(fù)載均衡的后端服務(wù)器称龙,例如:server www.xx.com:8080;其后的選項(xiàng)有:weight:負(fù)載均衡策略權(quán)重戳晌, 默認(rèn)為1鲫尊;max_fails:在一定時(shí)間內(nèi)(這個(gè)時(shí)間在fail_timeout參數(shù)中設(shè)置) 檢查這個(gè)服務(wù)器是否可用時(shí)產(chǎn)生的最多失敗請(qǐng)求數(shù);fail_timeout:在fail_timeout時(shí)間內(nèi)經(jīng)歷了max_fails次失敗后沦偎, 暫停服務(wù)的時(shí)間疫向。 max_fails可以和fail_timeout一起使用竞帽, 進(jìn)行對(duì)后端服務(wù)器的健康狀態(tài)檢查;backup:當(dāng)所有后端服務(wù)器都宕機(jī)時(shí)鸿捧, 可以指定代理服務(wù)器自身作為備份屹篓, 對(duì)外提供維護(hù)提示頁面;down:永久不可用匙奴。 | |
proxy_cache_path | 定義一個(gè)完整的緩存空間堆巧,指定緩存數(shù)據(jù)的磁盤路徑、索引存放的內(nèi)存空間以及一些其他參數(shù)泼菌。常用選項(xiàng)有:levels:配置在該目錄下再分兩層目錄谍肤,一層1個(gè)隨機(jī)字符作為名稱,二層2個(gè)隨機(jī)字符作為名稱哗伯,levels最多三層荒揣,每層最多兩個(gè)字符,這是為了加快訪問文件的速度焊刹;最后使用代理url的哈希值作為關(guān)鍵字與文件名系任;keys_zone:用來為這個(gè)緩存區(qū)起名,并設(shè)置大信翱椤俩滥;max_size:指定最大緩存數(shù)據(jù)磁盤空間的大小贺奠;inactive:在inactive指定的時(shí)間內(nèi)霜旧,未被訪問的緩存數(shù)據(jù)將從緩存中刪除。 | |
proxy_cache | 用來proxy_cache_path中keys_zone定義的緩存空間儡率, 打開緩存功能挂据,off表示關(guān)閉緩存。 | |
proxy_cache_valid | 設(shè)置不同響應(yīng)代碼的緩存時(shí)間 |
每個(gè)server塊中包含server全局塊和多個(gè)location塊儿普,采用就近原則生效崎逃。server全局塊配置項(xiàng)有:
配置項(xiàng) | 說明 | 其他可配置的地方 |
---|---|---|
keepalive_requests | 單連接請(qǐng)求上限次數(shù)。 | location塊 |
listen | 設(shè)置監(jiān)聽地址和端口箕肃,可加如下參數(shù):address:ip地址婚脱,如果是ipv6需要使用[fe13:..]格式;port:端口號(hào)勺像,如果只有ip則默認(rèn)80障贸;path:socket文件路徑;default_server:標(biāo)識(shí)符吟宦,將ip:port設(shè)置為默認(rèn)的虛擬主機(jī)篮洁; backlog:設(shè)置監(jiān)聽函數(shù)listen()最多允許多少網(wǎng)絡(luò)連接同時(shí)處于掛起的狀態(tài),默認(rèn)511(FreeBSD 為-1) rcvbuf:設(shè)置監(jiān)聽socket接受緩存區(qū)大醒晷铡袁波;sendbuf:設(shè)置監(jiān)聽socket發(fā)送緩存區(qū)大型卟;deferred:標(biāo)識(shí)符篷牌,將accept()設(shè)置為Deferred模式睡蟋;bind: 標(biāo)識(shí)符,使用獨(dú)立的bind()處理此adress:port枷颊,一般情況下端口相同而IP地址不同戳杀,只使用一個(gè) ssl:標(biāo)識(shí)符,設(shè)置會(huì)話使用ssl模式(https)夭苗;accept_filter:設(shè)置監(jiān)聽端口的請(qǐng)求過濾信卡,被過濾的內(nèi)容不能被接受和處理(只在FreeBSD NetBSD中有用); setfib:為監(jiān)聽socket關(guān)聯(lián)路由表题造,只對(duì)FreeBSD起作用傍菇; | |
server_name | 設(shè)置虛擬主機(jī)名稱,支持多個(gè)界赔《埃可以使用正則,~作為正則開始的標(biāo)記仔蝌,并支持捕獲泛领。匹配的優(yōu)先級(jí)為:1. 精確匹配荒吏,如:www.li.com2. 通配符在開始 敛惊,如:.li.com3. 通配符在結(jié)尾 ,如:www.4. 正則表達(dá)式匹配 绰更,以波浪線開頭(~^*.li.com$)如果都不匹配1.優(yōu)先選擇listen配置項(xiàng)后有default或default_server的2.找到匹配listen端口的第一個(gè)server塊 | |
server_name_hash_bucket_size | 為實(shí)現(xiàn)快速主機(jī)查找瞧挤,nginx使用hash表保存主機(jī)名,該參數(shù)用來設(shè)置hash表大小儡湾。 | |
root | 設(shè)置服務(wù)器收到請(qǐng)求后查找資源的根目錄路徑特恬,最終路徑拼接為:root路徑+location路徑。通常 |
location塊 |
alias | 設(shè)置服務(wù)器收到請(qǐng)求后查找資源的根目錄路徑,最終路徑替換為:alias路徑+文件名尝丐。alias無法在正則的location中使用显拜。 location匹配有四種:按優(yōu)先順序分別為:①=:用于普通uri之前,表示嚴(yán)格匹配爹袁; ②:uri包含正則表達(dá)式远荠,并且區(qū)分大小寫;③* :表示包含正則表達(dá)式失息,并且不區(qū)分大小寫譬淳; ④!~:與②相反档址,不匹配區(qū)分大小寫的正則; ⑤!~*:與③相反邻梆,不匹配不區(qū)分大小寫的正則守伸; ⑥^~ :如果找到與uri匹配度最高的location,立即處理請(qǐng)求浦妄,會(huì)對(duì)uri進(jìn)行反編碼含友;location塊可以使用if條件,配置項(xiàng)有: |
配置項(xiàng) | 說明 | 其他可配置的地方 |
---|---|---|
add_header [key] [value] | 設(shè)置response響應(yīng)報(bào)文的header | |
auth_basic | 是否開啟認(rèn)證功能校辩,并設(shè)置提示信息窘问,off關(guān)閉。 | |
auth_basic_user_file | 指定包含用戶名信息的文件路徑宜咒。 | |
rewrite | 重寫跳轉(zhuǎn)地址惠赫,支持正則。重寫規(guī)則后需指定控制標(biāo)識(shí)故黑,控制標(biāo)識(shí)有:last:重寫完成后停止對(duì)當(dāng)前URI在當(dāng)前l(fā)ocation中后續(xù)的其它重寫操作儿咱,而后對(duì)新的URI啟動(dòng)新一輪(從第一個(gè)開始)重寫檢查,在循環(huán)中則提前重啟新一輪循環(huán)场晶;break:重寫完成后停止對(duì)當(dāng)前URI在當(dāng)前l(fā)ocation中后續(xù)的其它重寫操作混埠,而后直接跳轉(zhuǎn)至重寫規(guī)則配置塊之后的其它配置;在循環(huán)中則結(jié)束循環(huán)诗轻,建議在location中使用钳宪;redirect:臨時(shí)重定向,重寫完成后以臨時(shí)重定向方式直接返回重寫后生成的新URI給客戶端扳炬,由客戶端重新發(fā)起請(qǐng)求吏颖;不能以http://或https://開頭,使用相對(duì)路徑恨樟,狀態(tài)碼:302半醉;permanent:重寫完成后以永久重定向方式直接返回重寫后生成的新URI給客戶端,由客戶端重新發(fā)起請(qǐng)求劝术,狀態(tài)碼:301缩多。 | server塊 |
rewrite_log | 是否把重寫過程記錄到錯(cuò)誤日志中,默認(rèn)為off养晋,級(jí)別默認(rèn)notice衬吆。 | |
return [code] [url] | 用于結(jié)束rewrite規(guī)則,并且為客戶端返回狀態(tài)碼204匙握,400咆槽,402-400,500-504等圈纺。格式可以為return code秦忿、return url或者return code url | |
index | 設(shè)置網(wǎng)站的默認(rèn)首頁麦射。 | |
error_page [code] [path] | 設(shè)置網(wǎng)站的錯(cuò)誤頁面。 http塊灯谣、server塊 | |
proxy_pass | 指定反向代理的服務(wù)器池潜秋,如:192.168.10.10 或使用upstream | |
proxy_set_header | 設(shè)置發(fā)往后端請(qǐng)求頭,參數(shù)有:Host:指定反向代理到哪個(gè)主機(jī)名胎许;X-REMOTE-IP:上一跳的ip;X-Forwarded-For:設(shè)置客戶端ip峻呛;http_user_agent:設(shè)置客戶端OS;默認(rèn)情況下辜窑,只有兩個(gè)請(qǐng)求頭會(huì)被重新定義:proxy_set_header Host $proxy_host钩述;proxy_set_header Connection close; | |
proxy_body_buffer_size | 設(shè)置客戶端請(qǐng)求主體緩沖區(qū)大小穆碎,可以理解為先保存到本地在傳給用戶牙勘。 | |
proxy_connect_timeout | 設(shè)置后端服務(wù)器連接的超時(shí)時(shí)間,即發(fā)起握手等候響應(yīng)的超時(shí)時(shí)間所禀。 | |
proxy_send_timeout | 設(shè)置后端服務(wù)器的數(shù)據(jù)回傳時(shí)間方面,即在規(guī)定的時(shí)間內(nèi)后端服務(wù)器必須傳完所有的數(shù)據(jù),否則nginx將斷開這個(gè)連接色徘。 | |
proxy_read_timeout | 設(shè)置從后端服務(wù)器獲取信息的時(shí)間恭金,表示連接建立成功之后,nginx等待后端服務(wù)器的響應(yīng)時(shí)間褂策,其實(shí)nginx已經(jīng)進(jìn)入后端的排隊(duì)之中等候處理横腿。 | |
proxy_buffer_size | 設(shè)置緩沖區(qū)大小。 | |
proxy_buffers | 設(shè)置緩沖區(qū)的數(shù)量和大小辙培。 | |
proxy_busy_buffers_size | 設(shè)置系統(tǒng)忙碌時(shí)可以使用的proxy_buffers大小蔑水,官方推薦為proxy_buffers*2 | |
proxy_tmep_file_write_size | 指定proxy緩存臨時(shí)文件的大小 | |
proxy_next_upstream | 請(qǐng)求出錯(cuò)后,轉(zhuǎn)向下一個(gè)節(jié)點(diǎn) | |
fastcgi_pass | 指定fastcgi進(jìn)程監(jiān)聽的IP地址和端口扬蕊,例如127.0.0.1:9000或者unix:/tmp/fastcgi.socket。也可以使用upstream指定丹擎,例如: |
upstream backend {
server 127.0.0.1:9000;
}
fastcgi_pass backend;
http塊尾抑、server塊
fastcgi_pass_header
設(shè)置請(qǐng)求fastcgi的請(qǐng)求頭。 http塊蒂培、server塊
fastcgi_read_timeout fastcgi服務(wù)器的響應(yīng)超時(shí)時(shí)間再愈。 http塊、server塊
fastcgi_send_timeout
為上游服務(wù)器設(shè)置等待一個(gè)FastCGI進(jìn)程的傳送數(shù)據(jù)時(shí)間护戳。
http塊翎冲、server塊
fastcgi_split_path_info 0.7.31以上版本使用,是否允許設(shè)置SCRIPT_FILENAME (SCRIPT_NAME)和PATH_INFO變量媳荒,分別對(duì)應(yīng):fastcgi_path_info抗悍。 http塊驹饺、server塊
fastcgi_store 設(shè)置存儲(chǔ)前端文件的路徑,on指定將使用root和alias指令相同的路徑缴渊,off禁止存儲(chǔ)赏壹,此外還可以指定具體的路徑。 http塊衔沼、server塊
fastcgi_store_access 指定創(chuàng)建文件或目錄的權(quán)限蝌借,比如:
user:rw group:rw all:r
http塊痊班、server塊
fastcgi_temp_path 指定存儲(chǔ)從別的服務(wù)器傳送來的數(shù)據(jù)臨時(shí)文件路徑 http塊贩汉、server塊
fastcgi_index 如果請(qǐng)求fastcgi的URI以/結(jié)束,該指令設(shè)置的文件會(huì)被附加到URI的后面并保存在變量$fastcgi_script_name中 http塊剑逃、server塊
fastcgi_param 指定參數(shù)傳遞給fastcgi http塊凝化、server塊
fastcgi_redirect_errors 已重命名為:fastcgi_intercept_errors擎鸠。指定是否傳遞4xx和5xx錯(cuò)誤信息到客戶端,或者是否允許nginx使用error_page處理錯(cuò)誤信息缘圈。 http塊劣光、server塊
4、內(nèi)置變量
變量名 | 說明 |
---|---|
$uri | 當(dāng)前請(qǐng)求的URI糟把,不帶參數(shù) |
$document_uri | 當(dāng)前請(qǐng)求的URI绢涡,不帶參數(shù) |
$request_uri | 請(qǐng)求的uri,帶完整參數(shù) |
$is_args | 表示請(qǐng)求中的 URI 是否帶參數(shù)遣疯,如果帶參數(shù)雄可,$is_args 值為 ?,如果不帶參數(shù)缠犀,則是空字符串 |
$args | http請(qǐng)求的完整參數(shù) |
$arg_[param] | http請(qǐng)求中某個(gè)參數(shù)的值 |
$query_string | http請(qǐng)求的完整參數(shù)数苫,只讀不可改變 |
$host | http請(qǐng)求報(bào)文中的host首部,如果請(qǐng)求中沒有host首部辨液,則以處理此請(qǐng)求的虛擬主機(jī)的主機(jī)名代替 |
$hostname | nginx服務(wù)運(yùn)行在的主機(jī)的主機(jī)名虐急。 |
$proxy_host | nginx對(duì)于upstream默認(rèn)使用的是基于IP的轉(zhuǎn)發(fā),所以表示請(qǐng)求到對(duì)應(yīng)的upstream配置的域名的ip |
$remote_addr | 客戶端的ip地址滔迈,如果客戶端有代理止吁,則為最新的代理服務(wù)器的ip |
$http_x_real_ip | 客戶端的ip地址,如果客戶端有代理燎悍,則為已設(shè)置的最新的代理服務(wù)器的ip |
$http_x_forwarded_for | 客戶端的ip地址敬惦,默認(rèn)是空。使用proxy_set_header設(shè)置后谈山,多個(gè)ip按順序用逗號(hào)隔開 |
$binary_remote_addr | 二進(jìn)制格式的客戶端地址 |
$remote_port | 客戶端端口 |
$remote_user | 啟用用戶認(rèn)證時(shí),客戶端輸入的用戶名 |
$request_method | 請(qǐng)求方法 |
$request_filename | 用戶請(qǐng)求中的uri經(jīng)過本地root或alias轉(zhuǎn)換后映射的本地文件路徑 |
$request_body | 表示http請(qǐng)求中的body體,該參數(shù)只在proxy_pass或fastcgi_pass中有意義 |
$request_body_file | 表示http請(qǐng)求中的body體存儲(chǔ)的臨時(shí)文件名 |
$request_completion | 當(dāng)請(qǐng)求已經(jīng)全部完成時(shí)畴椰,其值為 “ok” 臊诊。若沒有完成,就要返回客戶端迅矛,則其值為空字符串妨猩;或者在斷點(diǎn)續(xù)傳等情況下使用http range訪問的并不是文件的最后一塊,那么其值也是空字符串秽褒。 |
$server_addr | 服務(wù)器地址 |
$server_name | 服務(wù)器域名 |
$server_port | 服務(wù)器端口 |
$server_protocol | 服務(wù)器向客戶端發(fā)送響應(yīng)時(shí)的協(xié)議壶硅,如http/1.1 |
$scheme | 在請(qǐng)求中使用scheme,如https://www.magedu.com/中的scheme |
$http_[header] | 匹配請(qǐng)求報(bào)文中指定的HEADER销斟,例如:$http_host匹配請(qǐng)求報(bào)文中的host首部 |
$sent_http_[header] | 匹配響應(yīng)報(bào)文中指定的HEADER庐椒,例如:$sent_http_content_type匹配響應(yīng)報(bào)文中content-type首部 |
$document_root | 當(dāng)前請(qǐng)求映射到的root配置項(xiàng) |
$time_local | 訪問時(shí)間與時(shí)區(qū) |
$request | 請(qǐng)求的url與http協(xié)議 |
$status | 請(qǐng)求狀態(tài),成功是200 |
$body_bytes_sent | 發(fā)送給客戶端文件主體內(nèi)容大小 |
$http_referer | 記錄從那個(gè)頁面鏈接訪問過來的 |
$http_user_agent | 記錄客戶端瀏覽器的相關(guān)信息 |
$content_length | 請(qǐng)求頭部中的Content-Length字段 |
$content_type | 請(qǐng)求頭部中的Content-Type字段 |
$cookie_COOKIE | 請(qǐng)求頭部中的cookie字段 |
$limit_rate | 表示當(dāng)前連接的限速是多少蚂踊,0表示無限速 |
$nginx_version | 表示當(dāng)前Nginx的版本號(hào) |
例一:
這是一個(gè)比較完整的nginx配置文件示例约谈,下面的nginx.conf簡(jiǎn)單的實(shí)現(xiàn)nginx在前端做反向代理服務(wù)器的例子,處理js犁钟、png等靜態(tài)文件棱诱,jsp等動(dòng)態(tài)請(qǐng)求轉(zhuǎn)發(fā)到其它服務(wù)器tomcat,以及負(fù)載均衡的配置涝动。
user www www;
worker_processes 2;
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
use epoll;
worker_connections 2048;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
# tcp_nopush on;
keepalive_timeout 65;
# gzip壓縮功能設(shè)置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 6;
gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
# http_proxy 設(shè)置
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 75;
proxy_send_timeout 75;
proxy_read_timeout 75;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path /usr/local/nginx/proxy_temp 1 2;
# 設(shè)定負(fù)載均衡后臺(tái)服務(wù)器列表
upstream backend {
#ip_hash;
server 192.168.10.100:8080 max_fails=2 fail_timeout=30s ;
server 192.168.10.101:8080 max_fails=2 fail_timeout=30s ;
}
# 很重要的虛擬主機(jī)配置
server {
listen 80;
server_name itoatest.example.com;
root /apps/oaapp;
charset utf-8;
access_log logs/host.access.log main;
#對(duì) / 所有做負(fù)載均衡+反向代理
location / {
root /apps/oaapp;
index index.jsp index.html index.htm;
proxy_pass http://backend;
proxy_redirect off;
# 后端的Web服務(wù)器可以通過X-Forwarded-For獲取用戶真實(shí)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;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
#靜態(tài)文件迈勋,nginx自己處理,不去backend請(qǐng)求tomcat
location ~* /download/ {
root /apps/oa/fs;
}
location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
root /apps/oaapp;
expires 7d;
}
location /nginx_status {
stub_status on;
access_log off;
allow 192.168.10.0/24;
deny all;
}
location ~ ^/(WEB-INF)/ {
deny all;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
## 其它虛擬主機(jī)醋粟,server 指令開始
}
二
#運(yùn)行用戶
user nobody;
#啟動(dòng)進(jìn)程,通常設(shè)置成和cpu的數(shù)量相等
worker_processes 1;
#全局錯(cuò)誤日志及PID文件
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
#工作模式及連接數(shù)上限
events {
#epoll是多路復(fù)用IO(I/O Multiplexing)中的一種方式,
#僅用于linux2.6以上內(nèi)核,可以大大提高nginx的性能
use epoll;
#單個(gè)后臺(tái)worker process進(jìn)程的最大并發(fā)鏈接數(shù)
worker_connections 1024;
# 并發(fā)總數(shù)是 worker_processes 和 worker_connections 的乘積
# 即 max_clients = worker_processes * worker_connections
# 在設(shè)置了反向代理的情況下靡菇,max_clients = worker_processes * worker_connections / 4 為什么
# 為什么上面反向代理要除以4,應(yīng)該說是一個(gè)經(jīng)驗(yàn)值
# 根據(jù)以上條件米愿,正常情況下的Nginx Server可以應(yīng)付的最大連接數(shù)為:4 * 8000 = 32000
# worker_connections 值的設(shè)置跟物理內(nèi)存大小有關(guān)
# 因?yàn)椴l(fā)受IO約束厦凤,max_clients的值須小于系統(tǒng)可以打開的最大文件數(shù)
# 而系統(tǒng)可以打開的最大文件數(shù)和內(nèi)存大小成正比,一般1GB內(nèi)存的機(jī)器上可以打開的文件數(shù)大約是10萬左右
# 我們來看看360M內(nèi)存的VPS可以打開的文件句柄數(shù)是多少:
# $ cat /proc/sys/fs/file-max
# 輸出 34336
# 32000 < 34336育苟,即并發(fā)連接總數(shù)小于系統(tǒng)可以打開的文件句柄總數(shù)较鼓,這樣就在操作系統(tǒng)可以承受的范圍之內(nèi)
# 所以,worker_connections 的值需根據(jù) worker_processes 進(jìn)程數(shù)目和系統(tǒng)可以打開的最大文件總數(shù)進(jìn)行適當(dāng)?shù)剡M(jìn)行設(shè)置
# 使得并發(fā)總數(shù)小于操作系統(tǒng)可以打開的最大文件數(shù)目
# 其實(shí)質(zhì)也就是根據(jù)主機(jī)的物理CPU和內(nèi)存進(jìn)行配置
# 當(dāng)然宙搬,理論上的并發(fā)總數(shù)可能會(huì)和實(shí)際有所偏差笨腥,因?yàn)橹鳈C(jī)還有其他的工作進(jìn)程需要消耗系統(tǒng)資源。
# ulimit -SHn 65535
}
http {
#設(shè)定mime類型,類型由mime.type文件定義
include mime.types;
default_type application/octet-stream;
#設(shè)定日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
#sendfile 指令指定 nginx 是否調(diào)用 sendfile 函數(shù)(zero copy 方式)來輸出文件勇垛,
#對(duì)于普通應(yīng)用,必須設(shè)為 on,
#如果用來進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用士鸥,可設(shè)置為 off闲孤,
#以平衡磁盤與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的uptime.
sendfile on;
#tcp_nopush on;
#連接超時(shí)時(shí)間
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
#開啟gzip壓縮
gzip on;
gzip_disable "MSIE [1-6].";
#設(shè)定請(qǐng)求緩沖
client_header_buffer_size 128k;
large_client_header_buffers 4 128k;
#設(shè)定虛擬主機(jī)配置
server {
#偵聽80端口
listen 80;
#定義使用 www.nginx.cn訪問
server_name www.nginx.cn;
#定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置
root html;
#設(shè)定本虛擬主機(jī)的訪問日志
access_log logs/nginx.access.log main;
#默認(rèn)請(qǐng)求
location / {
#定義首頁索引文件的名稱
index index.php index.html index.htm;
}
# 定義錯(cuò)誤提示頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
#靜態(tài)文件,nginx自己處理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
#過期30天讼积,靜態(tài)文件不怎么更新肥照,過期可以設(shè)大一點(diǎn),
#如果頻繁更新勤众,則可以設(shè)置得小一點(diǎn)舆绎。
expires 30d;
}
#PHP 腳本請(qǐng)求全部轉(zhuǎn)發(fā)到 FastCGI處理. 使用FastCGI默認(rèn)配置.
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#禁止訪問 .htxxx 文件
location ~ /.ht {
deny all;
}
}
}
三
user www www; #指定Nginx Worker進(jìn)程運(yùn)行用戶以及用戶組
worker_processes 2; #指定了Nginx要開啟的進(jìn)程數(shù),多核CPU指定和核數(shù)一樣多的進(jìn)程數(shù)
pid logs/nginx.pid; #指定進(jìn)程id的存儲(chǔ)文件位置
worker_rlimit_nofile 65535; #指定單進(jìn)程打開文件數(shù)们颜,需與系統(tǒng)設(shè)定一致
events {
use epoll; #指定nginx工作模式吕朵,nginx主要的工作模式有select、poll窥突、kqueue努溃、epoll
其中select、poll是標(biāo)準(zhǔn)工作模式阻问,kqueue梧税、epoll為高效工作模式,epoll用在Linux系統(tǒng)中称近,而kqueue用在BSD系統(tǒng)中
worker_connections 65535;#指定單進(jìn)程的最大連接數(shù)
}
HTTP部分
http {
include mime.types; #指定配置文件所包含的文件
default_type application/octet-stream; #指定默認(rèn)類型為二進(jìn)制流第队,也就是當(dāng)文件類型未定義時(shí)使用這種方式,例如在沒有配置PHP環(huán)境時(shí)刨秆,Nginx是不予解析的凳谦,此時(shí),用瀏覽器訪問PHP文件就會(huì)出現(xiàn)下載窗口
log_format main '$remote_addr - $remote_user [$time_local] "$request" '#設(shè)定日志格式
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';;
client_max_body_size 20m; #設(shè)置允許客戶端請(qǐng)求的最大的單個(gè)文件字節(jié)數(shù)
client_header_buffer_size 16k;#指定來自客戶端請(qǐng)求頭的headerbuffer大小坛善,如果自定義了消息頭或有更大的cookie晾蜘,可以在這里增加緩沖大小
large_client_header_buffers 4 32k;#指定客戶端請(qǐng)求中較大的消息頭的緩存最大數(shù)量和大小,4為個(gè)數(shù)眠屎,32k為大小剔交,最大緩存為4個(gè)32kb
sendfile on;#開啟高效傳輸模式
tcp_nopush on; # tcp_nopush,tcp_nodelay設(shè)置on,防止網(wǎng)絡(luò)阻塞
tcp_nodelay on;
keepalive_timeout 65; #指定客戶端連接保持活動(dòng)的超時(shí)時(shí)間
client_header_timeout 10;#指定客戶端請(qǐng)求頭讀取超時(shí)時(shí)間改衩,如果超過這個(gè)時(shí)間岖常,客戶端還沒有發(fā)送任何數(shù)據(jù),Nginx將返回“Request time out(408)”錯(cuò)誤
client_body_timeout 10;#指定客戶端請(qǐng)求主體讀取超時(shí)時(shí)間葫督,如果超過這個(gè)時(shí)間???客戶端還沒有發(fā)送任何數(shù)據(jù)竭鞍,Nginx將返回“Request time out(408)”錯(cuò)誤
send_timeout 10;#指定響應(yīng)客戶端的超時(shí)時(shí)間。這個(gè)超時(shí)僅限于兩個(gè)連接活動(dòng)之間的時(shí)間橄镜,如果超過這個(gè)時(shí)間偎快,客戶端沒有任何活動(dòng),Nginx將會(huì)關(guān)閉連接
gzip on; #開啟gzip壓縮洽胶,實(shí)時(shí)壓縮輸出數(shù)據(jù)流
gzip_min_length 1k; #設(shè)置允許壓縮的頁面最小字節(jié)數(shù)
gzip_buffers 4 16k; #指定內(nèi)存空間來存貯壓縮結(jié)果晒夹,這里指定4個(gè)單位為16k的內(nèi)存來存儲(chǔ)壓縮結(jié)果,即總大小為64k
gzip_http_version 1.1;#指定識(shí)別HTTP協(xié)議版本,默認(rèn)是1.1
gzip_comp_level 2;#指定gzip壓縮比丐怯,1 壓縮比最小喷好,處理速度最快;9 壓縮比最大读跷,傳輸速度快梗搅,但處理最慢,也比較消耗CPU資源
gzip_types text/plain application/x-javascript text/css application/xml;#指定壓縮的類型效览,無論是否指定无切,“text/html”類型總是會(huì)被壓縮
gzip_vary on;#該選項(xiàng)開啟可以讓前端的緩存服務(wù)器緩存經(jīng)過gzip壓縮的頁面,例如钦铺,用Varnish緩存經(jīng)過Nginx壓縮的數(shù)據(jù)
server_tokens off;#隱藏Nginx版本號(hào)
server {
listen 8000; #指定Nginx監(jiān)端口
server_name localhost;#用來指定IP或者域名
charset utf-8;#指定Nginx默認(rèn)的字符集订雾,只有utf-8支持中文字符
access_log logs/host.access.log main;#指定訪問日志的名稱及位置
location / {
index index.html index.htm;#設(shè)定默認(rèn)首頁
root /tom/webapps/ROOT;#指定網(wǎng)頁根目錄
}
location ~ (jsp|\?) { #指定url中包含jsp或者?的全部轉(zhuǎn)發(fā)到192.168.0.10的80端口即tomcat處理
proxy_pass http://192.168.0.10:80;
}
狀態(tài)監(jiān)控模塊: