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