Nginx三部曲之一【配置文件详解】
????????初學(xué)Nginx,感覺Nginx配置文件中指令以及參數(shù)各類繁多,總結(jié)成博客備忘,也便廣大Linux愛好者學(xué)習(xí)交流,因?yàn)闀r間原因,總結(jié)的不夠全面后續(xù)會不斷完善此博文,筆者水平有限,如有疏漏不妥之處,還請不吝賜教!
????以下內(nèi)容部分參考互聯(lián)網(wǎng)和 南非螞蟻(高俊峰)所著的 ?《高性能Linux服務(wù)器構(gòu)建實(shí)戰(zhàn)運(yùn)行監(jiān)控、性能調(diào)優(yōu)與集群應(yīng)用》一書,
????感謝開源前輩以及Linux先行者提供的寶貴資料,如有侵權(quán)之處,請馬上通知,本人立即刪除;
# 全局錯誤日志位置及PID文件位置:
#error_log??logs/error.log;? #error_log??logs/error.log??notice;?? #error_log??logs/error.log??info; #pid??logs/nginx.pid;events?{????????#?用來設(shè)定Nginx的工作模式及連接數(shù)上限;worker_connections??1024;???用于定義Nginx每個進(jìn)程的最大連接數(shù),默認(rèn)為12024;#?并發(fā)總數(shù)是?worker_processes?和?worker_connections?的乘積#?即?max_clients?=?worker_processes?*?worker_connections#?進(jìn)程的最大連接數(shù)受Linux系統(tǒng)進(jìn)程的最大打開?文件數(shù)限制,在執(zhí)行操作系統(tǒng)命令"ulimit?-n?65536"后?worker_connections的設(shè)置才會生效;}http?{include???????mime.types;????#?設(shè)定mime類型,類型由mime.type文件定義;?default_type??application/octet-stream;??#?默認(rèn)類型為二進(jìn)制流,當(dāng)文件類型未定義時使用這種方式;}#定義日志格式:
????#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;??#訪問日志記錄位置???并使用main格式記錄? ??
????log_format:Nginx的HttpLog模塊指令,用于指定Nginx日志的輸出格式,main 為此日志格式名稱;
? ? $remote_addr:客戶端IP地址
? ? $remote_user:如果需要客戶端登陸才能訪問,記錄客戶端使用哪個用戶登陸;
? ? $time_local:訪問時間與時區(qū);
? ? $request:用戶的原始請求URL,與http協(xié)議(包含整個請求符);
? ? $status:狀態(tài)碼,成功即為200
? ? $body_bytes_sent:發(fā)送給客戶端的主體內(nèi)容大小
? ? $http_referer:從哪個頁面鏈接跳轉(zhuǎn)過來
? ? $http_user_agent:客戶端瀏覽器類型
? ? $http_x_forwarded_for:客戶端的IP地址
$remote_addr與$http_x_forwarded_for的區(qū)別:
????????通常web服務(wù)器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過$remote_add拿到的IP地址是反向代理服務(wù)器的iP地址。反向代理服務(wù)器在轉(zhuǎn)發(fā)請求的http頭信息中,可以增加x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務(wù)器地址;
? ? ? ?
????client_max_body_size??20m;#?允許客戶端請求的最大單個文件字節(jié)數(shù)(通過Nginx上傳單個文件大小);client_header_buffer_size??32k;#?指定來自客戶端請求頭的headerbuffer大小,對于大多數(shù)請求1KB緩沖區(qū)大小已經(jīng)足夠,如果自定義了消息頭或有更大的cookie,可以增加緩沖區(qū)大小,此處定義為32KB;large_client_header_buffers??4??32k;#?用來指定客戶端請求中較大的消息頭緩存最大數(shù)量和大小,4代表個數(shù),128K代表大小,最大緩存為4個128KB;#?nginx默認(rèn)會用client_header_buffer_size這個buffer來讀取header值,如果header過大,它會使用large_client_header_buffers來讀取如果設(shè)置過小HTTP頭/Cookie過大?會報400?錯誤nginx?400?bad?request?求行如果超過buffer,就會報HTTP?414錯誤(URI?Too?Long)nginx接受最長的HTTP頭部大小必須比其中一個buffer大,否則就會報400的HTTP錯誤(Bad?Request)。? ? ?
????sendfile????????on;#?開啟高效文件傳輸模式,?指定nginx?是否調(diào)用?sendfile?函數(shù)(zero?copy?方式)來輸出文件#?對于普通應(yīng)用,必須設(shè)為?on,#?如果用來進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用,可設(shè)置為?off,#?以平衡磁盤與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的uptime.tcp_nopush?????on;#?此選項(xiàng)允許或禁止使用socke的TCP_CORK的選項(xiàng),此選項(xiàng)僅在使用sendfile的時候使用tcp_nodelay????on;keepalive_timeout??0;?keepalive_timeout??65;????#?此處將保持時間設(shè)置為?65;#?用于設(shè)置客戶端連接保持活動的超時時間,開啟長連接以后,超過這個時間服務(wù)器會自動關(guān)閉這個連接;client_header_timeout?10;#?設(shè)置客戶端請求頭讀取超時時間,如果超過時間客戶端還沒有發(fā)送任何數(shù)據(jù),Nginx將返回?"Request?time?out?(408)"?錯誤;client_body_timeout??10;#?設(shè)置客戶端請求主體讀取超時時間,默認(rèn)為60。超過這個時間,客戶端沒有發(fā)送任何數(shù)據(jù),Nginx將返回?"Request?time?out?(408)"錯誤;????注意:此下的所有設(shè)置只有在編譯時安裝了? HttpGzip 模塊才會被啟用:
????????
????????#gzip??on;???#gzip_min_length????1k;#gzip_buffers????4????16k;#gzip_http_version????1.1;#gzip_comp_level????2;#gzip_types???text/plain??application/x-javascript??text/css??application/xml;#gzip_vary????on;???????? ? ? # gzip 用于設(shè)置開啟或關(guān)閉gzip模塊,"gzip on"表示 開啟gzip壓縮;
? ? ? ? ? ? ?# gzip_min_length 設(shè)置 允許壓縮的頁面最小字節(jié)數(shù),頁面字節(jié)數(shù)從header頭的Content-length中獲
? ? ? ? ? ? ?取,默認(rèn)值為0,不管頁面多大都進(jìn)行壓縮,建議更改成大于1K,不然會越壓越大;
? ? ? ? ? ? ?# gzip_buffers?表示申請4個單位為16K的內(nèi)存作為壓縮結(jié)果流緩存,默認(rèn)值是申請與原始數(shù)據(jù)大小相
? ? ? ? ? ? ?同的內(nèi)存空間來存儲gzip壓縮結(jié)果;
? ? ? ? ? ? ?# gzip_http_version 設(shè)置識別HTTP協(xié)議版本,默認(rèn)為1.1,目前大部分瀏覽器已經(jīng)支持gzip解壓,使
? ? ? ? ? ? ?用默認(rèn)即可;
? ? ? ? ? ? ?# gzip_comp_level 指定gzip壓縮比,范圍1-9 1壓縮比最小,處理速度快,9壓縮比最大,傳輸速度
?????????????快節(jié)約帶寬,但處理起來慢,也較消耗CPU資源;
? ? ? ? ? ? ?# gzip_types 指定壓縮哪些文件,無論是否指定,默認(rèn)情況下 text/html 類型總會被壓縮
? ? ? ? ? ? ?# gzip_vary 可以讓前端緩存服務(wù)器緩存經(jīng)過gzip壓縮的頁面;
? ? Nginx地址匹配相當(dāng)強(qiáng)大,location 支持正則表達(dá)式匹配,也支持條件判斷匹配,用戶可以通過location指定實(shí)現(xiàn)Nginx對動靜態(tài)網(wǎng)頁的過濾處理:
????????
????匹配方法:
????????=:精確匹配,把用戶請求的URI,與各location匹配
????????~:正則表達(dá)式模式匹配,匹配時區(qū)分字符大小寫
????????~*:正則表達(dá)式模式匹配,不區(qū)分字符大小寫
????????^~:做URI的前半部分匹配,匹配時不檢查正則表達(dá)式;
????匹配規(guī)則:
????????匹配優(yōu)先級:精確匹配(=)、^~、~ 和 ~*、最后由不帶符號的URL進(jìn)行左側(cè)匹配
????????當(dāng)被多個location所匹配時,這些優(yōu)先級還一樣,就會被第一個location所匹配;
????此處有三個小例子:
????1、通過location指令來對網(wǎng)頁URL進(jìn)行分析處理,~ 代表使用正則表達(dá)式 ?.* 代表以任意開頭任意長度,.代表本身的意義,可以是擴(kuò)號內(nèi)的任何結(jié)尾,也就是說所有擴(kuò)展名為.gif、.jpg、.jpeg、.png、.bmp、.swf的靜態(tài)文件都交給Nginx處理;
????????location?~?.*\.(gif|jpg|jpeg|png|bmp|swf)$??{root????/web/www/www.nginx.com;??#?匹配到哪個目錄?expries??30d;????#?靜態(tài)文件過期時間}????
????2、將upload和html下的所有文件都交給Nginx來處理,前提是upload和html目錄包含在/web/www/www.nginx.com目錄中
????????location?~?^/(upload|html)/??{root??/web/www/www.nginx.com;expries??30d;}????3、location 將所有以 .jsp 為后綴的文件都交給本機(jī)的 8080 端口處理;
??????
??????location?~?.*.jsp$?{index??index.jsp;proxy_pass??http://localhost:8080;}轉(zhuǎn)載于:https://blog.51cto.com/linuxzj/1596823
總結(jié)
以上是生活随笔為你收集整理的Nginx三部曲之一【配置文件详解】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redhat6.4中手动创建oracle
- 下一篇: Mono+Nginx环境