日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Nginx三部曲之一【配置文件详解】

發(fā)布時間:2025/7/14 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nginx三部曲之一【配置文件详解】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


????????初學(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)之處,請馬上通知,本人立即刪除;



#user??nobody;??#指定?Nginx?Worker進(jìn)程運(yùn)行用戶以及用戶組,默認(rèn)由?nobody運(yùn)行; worker_processes??1;???#指定Nginx要開啟的進(jìn)程數(shù),默認(rèn)情況下是1,如果存在多顆CPU,設(shè)置為和CPU同樣的數(shù)量即可;


# 全局錯誤日志位置及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)"錯誤;


????send_timeout?????????10;#?用于指定響應(yīng)客戶端的超時時間,超時僅限于兩個連接活動之間的時間,如果超過這個時間,客戶端沒有任何活動,Nginx將會關(guān)閉連接;proxy_connect_timeout?90;?#?后端服務(wù)器連接的超時時間_發(fā)起握手等候響應(yīng)超時時間proxy_read_timeout?180;#?連接成功后等候后端服務(wù)器響應(yīng)時間其實(shí)已經(jīng)進(jìn)入后端的排隊(duì)之中等候處理(也可以說是后端服務(wù)器處理請求的時間)proxy_send_timeout?180;#?后端服務(wù)器數(shù)據(jù)回傳時間_就是在規(guī)定時間之內(nèi)后端服務(wù)器必須傳完所有的數(shù)據(jù)proxy_buffer_size?256k;#?設(shè)置從被代理服務(wù)器讀取的第一部分應(yīng)答的緩沖區(qū)大小,通常情況下這部分應(yīng)答中包含一個小的應(yīng)答頭,默認(rèn)情況下這個值的大小為指令proxy_buffers中指定的一個緩沖區(qū)的大小,不過可以將其設(shè)置為更小proxy_buffers?4?256k;#?設(shè)置用于讀取應(yīng)答(來自被代理服務(wù)器)的緩沖區(qū)數(shù)目和大小,默認(rèn)情況也為分頁大小,根據(jù)操作系統(tǒng)的不同可能是4k或者8kproxy_busy_buffers_size?256k;????proxy_temp_file_write_size?256k;#?設(shè)置在寫入proxy_temp_path時數(shù)據(jù)的大小,預(yù)防一個工作進(jìn)程在傳遞文件時阻塞太長proxy_temp_path?/data0/proxy_temp_dir;


????注意:此下的所有設(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壓縮的頁面;



????????server{????#?用來標(biāo)志虛擬主機(jī)開始listen????80;?#?指定虛擬主機(jī)監(jiān)聽在哪個套接字上;server_name????192.16.12.188??www.nginx.com;??#?設(shè)置?IP地址或域名,多個域名間用空格分開index??index.html??index.htm??index.jsp;?#?設(shè)置?訪問的默認(rèn)首頁地址root??/web/www/;????#?指定虛擬主機(jī)的網(wǎng)頁根目錄,這個目錄可是相對路徑,也可是絕對路徑;charset?gb2312;??#?設(shè)置?網(wǎng)頁默認(rèn)編碼格式;access_log??logs/nginx.access.log??main;#?設(shè)定本虛擬主機(jī)的訪問日志}




? ? 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。