序言
Nginx是lgor Sysoev為俄羅斯訪問量第二的rambler.ru站點設(shè)計開發(fā)的氧猬。從2004年發(fā)布至今背犯,憑借開源的力量,已經(jīng)接近成熟與完善盅抚。
Nginx功能豐富漠魏,可作為HTTP服務(wù)器,也可作為反向代理服務(wù)器妄均,郵件服務(wù)器柱锹。支持FastCGI、SSL丰包、Virtual Host奕纫、URL Rewrite、Gzip等功能烫沙。并且支持很多第三方的模塊擴(kuò)展。
Nginx的穩(wěn)定性隙笆、功能集锌蓄、示例配置文件和低系統(tǒng)資源的消耗讓他后來居上,在全球活躍的網(wǎng)站中有12.18%的使用比率撑柔,大約為2220萬個網(wǎng)站瘸爽。
1.Nginx環(huán)境搭建;
自行安裝
2.Nginx_代理_反向代理
正向代理: 代理服務(wù)器站在客戶端那邊就是正向代理;
反向代理: 代理服務(wù)器站在原始服務(wù)器那邊就是反向代理;
詳解參考點擊Nginx正向代理與反向代理
Nginx在做反向代理時,提供性能穩(wěn)定铅忿,并且能夠提供配置靈活的轉(zhuǎn)發(fā)功能剪决。
Nginx可以根據(jù)不同的正則匹配,采取不同的轉(zhuǎn)發(fā)策略,比如圖片文件結(jié)尾的走文件服務(wù)器柑潦,動態(tài)頁面走web服務(wù)器享言,只要你正則寫的沒問題,又有相對應(yīng)的服務(wù)器解決方案渗鬼,你就可以隨心所欲的玩览露。
并且Nginx對返回結(jié)果進(jìn)行錯誤頁跳轉(zhuǎn),異常判斷等譬胎。如果被分發(fā)的服務(wù)器存在異常差牛,他可以將請求重新轉(zhuǎn)發(fā)給另外一臺服務(wù)器,然后自動去除異常服務(wù)器堰乔。
2.1 設(shè)置 404 頁面導(dǎo)向地址
error_page 404 https://www.runnob.com; #錯誤頁
proxy_intercept_errors on; #如果被代理服務(wù)器返回的狀態(tài)碼為400或者大于400偏化,設(shè)置的error_page配置起作用。默認(rèn)為off镐侯。
2.2 如果我們的代理只允許接受get侦讨,post請求方法的一種
proxy_method get; #支持客戶端的請求方法。post/get析孽;
2.3 設(shè)置支持的http協(xié)議版本
proxy_http_version 1.0 ; #Nginx服務(wù)器提供代理服務(wù)的http協(xié)議版本1.0搭伤,1.1,默認(rèn)設(shè)置為1.0版本
2.4 負(fù)載均衡的服務(wù)器如果有一臺服務(wù)器宕機(jī)的解決方案
如果你的nginx服務(wù)器給2臺web服務(wù)器做代理袜瞬,負(fù)載均衡算法采用輪詢怜俐,那么當(dāng)你的一臺機(jī)器web程序iis關(guān)閉,也就是說web不能訪問邓尤,那么nginx服務(wù)器分發(fā)請求還是會給這臺不能訪問的web服務(wù)器拍鲤,如果這里的響應(yīng)連接時間過長,就會導(dǎo)致客戶端的頁面一直在等待響應(yīng)汞扎,對用戶來說體驗就打打折扣季稳,這里我們怎么避免這樣的情況發(fā)生呢。這里我配張圖來說明下問題澈魄。
如果負(fù)載均衡中其中web2發(fā)生這樣的情況景鼠,nginx首先會去web1請求,但是nginx在配置不當(dāng)?shù)那闆r下會繼續(xù)分發(fā)請求道web2痹扇,然后等待web2響應(yīng)铛漓,直到我們的響應(yīng)時間超時,才會把請求重新分發(fā)給web1鲫构,這里的響應(yīng)時間如果過長浓恶,用戶等待的時間就會越長。
下面的配置是解決方案之一:
proxy_connect_timeout 1; #nginx服務(wù)器與被代理的服務(wù)器建立連接的超時時間结笨,默認(rèn)60秒
proxy_read_timeout 1; #nginx服務(wù)器想被代理服務(wù)器組發(fā)出read請求后包晰,等待響應(yīng)的超時間湿镀,默認(rèn)為60秒。
proxy_send_timeout 1; #nginx服務(wù)器想被代理服務(wù)器組發(fā)出write請求后伐憾,等待響應(yīng)的超時間勉痴,默認(rèn)為60秒。
proxy_ignore_client_abort on; #客戶端斷網(wǎng)時塞耕,nginx服務(wù)器是否終端對被代理服務(wù)器的請求蚀腿。默認(rèn)為off。
2.5 根據(jù)代理服務(wù)器網(wǎng)絡(luò)訪問返回的指令來決定請求方向:
如果使用upstream指令配置了一組服務(wù)器作為被代理服務(wù)器扫外,服務(wù)器中的訪問算法遵循配置的負(fù)載均衡規(guī)則莉钙,同時可以使用該指令配置在發(fā)生哪些異常情況時,將請求順次交由下一組服務(wù)器處理筛谚。
proxy_next_upstream timeout; #反向代理upstream中設(shè)置的服務(wù)器組磁玉,出現(xiàn)故障時,被代理服務(wù)器返回的狀態(tài)值驾讲。
狀態(tài)值可以是:error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off
- error:建立連接或向被代理的服務(wù)器發(fā)送請求或讀取響應(yīng)信息時服務(wù)器發(fā)生錯誤蚊伞。
- timeout:建立連接,想被代理服務(wù)器發(fā)送請求或讀取響應(yīng)信息時服務(wù)器發(fā)生超時吮铭。
- invalid_header:被代理服務(wù)器返回的響應(yīng)頭異常时迫。
- off:無法將請求分發(fā)給被代理的服務(wù)器。
- http_400谓晌,....:被代理服務(wù)器返回的狀態(tài)碼為400掠拳,500,502纸肉,等溺欧。
2.6 如果你想通過http獲取客戶的真是ip而不是獲取代理服務(wù)器的ip地址,那么要做如下的設(shè)置柏肪。
proxy_set_header Host $host; #只要用戶在瀏覽器中訪問的域名綁定了 VIP VIP 下面有RS姐刁;則就用$host ;host是訪問URL中的域名和端口 www.taobao.com:80
proxy_set_header X-Real-IP $remote_addr; #把源IP 【$remote_addr,建立HTTP連接header里面的信息】賦值給X-Real-IP;這樣在代碼中 $X-Real-IP來獲取 源IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#在nginx 作為代理服務(wù)器時烦味,設(shè)置的IP列表聂使,會把經(jīng)過的機(jī)器ip,代理機(jī)器ip都記錄下來谬俄,用 【柏靶,】隔開;代碼中用 echo $x-forwarded-for |awk -F, '{print $1}' 來作為源IP
2.7 代理配置文件部分配置
include mime.types; #文件擴(kuò)展名與文件類型映射表
default_type application/octet-stream; #默認(rèn)文件類型凤瘦,默認(rèn)為text/plain
#access_log off; #取消服務(wù)日志
log_format myFormat ' $remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義格式
access_log log/access.log myFormat; #combined為日志格式的默認(rèn)值
sendfile on; #允許sendfile方式傳輸文件,默認(rèn)為off案铺,可以在http塊蔬芥,server塊,location塊。
sendfile_max_chunk 100k; #每個進(jìn)程每次調(diào)用傳輸數(shù)量不能大于設(shè)定的值笔诵,默認(rèn)為0返吻,即不設(shè)上限。
keepalive_timeout 65; #連接超時時間乎婿,默認(rèn)為75s测僵,可以在http,server谢翎,location塊捍靠。
proxy_connect_timeout 1; #nginx服務(wù)器與被代理的服務(wù)器建立連接的超時時間,默認(rèn)60秒
proxy_read_timeout 1; #nginx服務(wù)器想被代理服務(wù)器組發(fā)出read請求后森逮,等待響應(yīng)的超時間榨婆,默認(rèn)為60秒。
proxy_send_timeout 1; #nginx服務(wù)器想被代理服務(wù)器組發(fā)出write請求后褒侧,等待響應(yīng)的超時間良风,默認(rèn)為60秒宵荒。
proxy_http_version 1.0 ; #Nginx服務(wù)器提供代理服務(wù)的http協(xié)議版本1.0奋单,1.1逆日,默認(rèn)設(shè)置為1.0版本件豌。
#proxy_method get; #支持客戶端的請求方法溜嗜。post/get钞啸;
proxy_ignore_client_abort on; #客戶端斷網(wǎng)時遥巴,nginx服務(wù)器是否中止對被代理服務(wù)器的請求在孝。默認(rèn)為off唾糯。
proxy_ignore_headers "Expires" "Set-Cookie"; #Nginx服務(wù)器不處理設(shè)置的http相應(yīng)投中的頭域怠硼,這里空格隔開可以設(shè)置多個。
proxy_intercept_errors on; #如果被代理服務(wù)器返回的狀態(tài)碼為400或者大于400移怯,設(shè)置的error_page配置起作用香璃。默認(rèn)為off。
proxy_headers_hash_max_size 1024; #存放http報文頭的哈希表容量上限舟误,默認(rèn)為512個字符葡秒。
proxy_headers_hash_bucket_size 128; #nginx服務(wù)器申請存放http報文頭的哈希表容量大小。默認(rèn)為64個字符嵌溢。
proxy_next_upstream timeout; #反向代理upstream中設(shè)置的服務(wù)器組眯牧,出現(xiàn)故障時,被代理服務(wù)器返回的狀態(tài)值赖草。error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off
#proxy_ssl_session_reuse on; 默認(rèn)為on学少,如果我們在錯誤日志中發(fā)現(xiàn)“SSL3_GET_FINSHED:digest check failed”的情況時,可以將該指令設(shè)置為off秧骑。
3.Nginx_負(fù)載均衡;
Nginx提供的負(fù)載均衡策略有2種:內(nèi)置策略和擴(kuò)展策略版确。
內(nèi)置策略: 1.輪詢;2.加權(quán)輪詢;3.Ip hash;
擴(kuò)展策略: 就天馬行空扣囊,只有你想不到的沒有他做不到的啦,你可以參照所有的負(fù)載均衡算法绒疗,給他一一找出來做下實現(xiàn)侵歇。
Ip hash算法,對客戶端請求的ip進(jìn)行hash操作吓蘑,然后根據(jù)hash結(jié)果將同一個客戶端ip的請求分發(fā)給同一臺服務(wù)器進(jìn)行處理惕虑,可以解決session不共享的問題。
3.1 負(fù)載均衡的配置
3.1.1 輪詢 nginx默認(rèn)就是輪詢其權(quán)重都默認(rèn)為1磨镶,服務(wù)器處理請求的順序:ABABABABAB...
upstream mysvr {
server 192.168.10.121:3333;
server 192.168.10.122:3333;
}
server {
....
location ~*^.+$ {
proxy_pass http://mysvr; #請求轉(zhuǎn)向mysvr 定義的服務(wù)器列表
}
}
3.1.2 熱備:如果你有2臺服務(wù)器溃蔫,當(dāng)一臺服務(wù)器發(fā)生事故時,才啟用第二臺服務(wù)器給提供服務(wù)棋嘲。服務(wù)器處理請求的順序:AAAAAA突然A掛啦酒唉,BBBBBBBBBBBBBB.....
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #熱備
}
3.1.3 加權(quán)輪詢:跟據(jù)配置的權(quán)重的大小而分發(fā)給不同服務(wù)器不同數(shù)量的請求。如果不設(shè)置沸移,則默認(rèn)為1痪伦。下面服務(wù)器的請求順序為:ABBABBABBABBABB....
upstream mysvr {
server 127.0.0.1:7878 weight=1;
server 192.168.10.121:3333 weight=2;
}
3.1.4 ip_hash:nginx會讓相同的客戶端ip請求相同的服務(wù)器。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333;
ip_hash;
}
nginx負(fù)載均衡配置的幾個狀態(tài)參數(shù)
- down: 表示當(dāng)前的server暫時不參與負(fù)載均衡雹锣。
- backup: 預(yù)留的備份機(jī)器网沾。當(dāng)其他所有的非backup機(jī)器出現(xiàn)故障或者忙的時候,才會請求backup機(jī)器蕊爵,因此這臺機(jī)器的壓力最輕辉哥。
- max_fails: 允許請求失敗的次數(shù),默認(rèn)為1攒射。當(dāng)超過最大次數(shù)時醋旦,返回proxy_next_upstream 模塊定義的錯誤。
- fail_timeout: 在經(jīng)歷了max_fails次失敗后会放,暫停服務(wù)的時間饲齐。max_fails可以和fail_timeout一起使用。
eg:
upstream mysvr {
server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2;
server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1;
}
4.Nginx緩存配置指南
4.1 如何配置基本緩存設(shè)置
開啟簡單的緩存配置咧最,只需要兩個指令:proxy_cache_path和proxy_cache捂人。
proxy_cache_path: 配置緩存的存放地址和其他的一些常用配置;
proxy_cache:指令是為了啟動緩存;
proxy_cache_path /path/to/cache levels=1:2 keys_zone=mycache:10m max_size=10g inactive=60m use_temp_path=off;
server {
# ...
location / {
proxy_cache mycache;
proxy_pass http://my_upstream;
}
}
相關(guān)配置說明:
- /path/to/cache 本地路徑,用來設(shè)置Nginx緩存資源的存放地址
- levels 默認(rèn)所有緩存文件都放在同一個/path/to/cache下矢沿,但是會影響緩存的性能滥搭,因此通常會在/path/to/cache下面建立子目錄用來分別存放不同的文件。假設(shè)levels=1:2捣鲸,Nginx為將要緩存的資源生成的key為f4cd0fbc769e94925ec5540b6a4136d0瑟匆,那么key的最后一位0,以及倒數(shù)第2-3位6d作為兩級的子目錄栽惶,也就是該資源最終會被緩存到/path/to/cache/0/6d目錄中
- key_zone 在共享內(nèi)存中設(shè)置一塊存儲區(qū)域來存放緩存的key和metadata(類似使用次數(shù))愁溜,這樣nginx可以快速判斷一個request是否命中或者未命中緩存无午,1m可以存儲8000個key,10m可以存儲80000個key
- max_size 最大cache空間祝谚,如果不指定,會使用掉所有disk space酣衷,當(dāng)達(dá)到配額后交惯,會刪除最少使用的cache文件
- inactive 未被訪問文件在緩存中保留時間,本配置中如果60分鐘未被訪問則不論狀態(tài)是否為expired穿仪,緩存控制程序會刪掉文件席爽。inactive默認(rèn)是10分鐘。需要注意的是啊片,inactive和expired配置項的含義是不同的只锻,expired只是緩存過期,但不會被刪除紫谷,inactive是刪除指定時間內(nèi)未被訪問的緩存文件
- use_temp_path 如果為off齐饮,則nginx會將緩存文件直接寫入指定的cache文件中,而不是使用temp_path存儲笤昨,official建議為off祖驱,避免文件在不同文件系統(tǒng)中不必要的拷貝
- proxy_cache 啟用proxy cache,并指定key_zone瞒窒。另外捺僻,如果proxy_cache off表示關(guān)閉掉緩存。
4.2 proxy_cache其他相關(guān)指令集
4.2.1 proxy_no_cache
Syntax:proxy_no_cache string ...;
Default: —
Context: http , server , location
該指令用于定義滿足條件的響應(yīng)不會被保存到緩存中崇裁。在條件字符串中至少有一個條件不為空或者0匕坯,符合這樣條件的響應(yīng)才不會被緩存。
舉例如下
proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
proxy_no_cache $http_pragma $http_authorization;
其中拔稳,cookie_nocache葛峻、arg_nocache...皆為變量,可以根據(jù)你訪問的匹配策略來設(shè)置壳炎,其值只有2類泞歉,0和非0;
訪問匹配策略例如:
if ($request_uri ~ ^/(login|register|password\/reset)/) { set $cookie_nocache 1; }
如果在此鏈?zhǔn)脚渲弥校灰幸粋€值不為0匿辩,則不會cache腰耙;例如:
proxy_no_cache $cookie_nocache(0) $arg_nocache(1) $arg_comment(0)
則不會被cache.
注:一般會配合proxy_cache_bypass共同使用;
4.2.2 proxy_cache_bypass
Syntax: proxy_cache_bypass string ...;
Default: —
Context: http , server , location
該指令用于定義哪些情況不從cache讀取铲球,直接從backend獲取資源挺庞;配置方式同proxy_no_cache。
4.2.3 proxy_cache_key
Syntax: proxy_cache_key string;
Default: proxy_cache_key $scheme$proxy_host$request_uri;
Context: http, server, location
給緩存數(shù)據(jù)定義一個鍵稼病,例如
proxy_cache_key “$host$request_uri $cookie_user”;
4.2.4 proxy_cache_methods
Syntax: proxy_cache_methods GET | HEAD | POST ...;
Default: proxy_cache_methods GET HEAD;
Context: http, server, location
該指令用于設(shè)置緩存哪些HTTP方法,默認(rèn)緩存HTTP GET/HEAD方法,不緩存HTTP POST 方法.选侨。
4.2.5 proxy_cache_valid
Syntax: proxy_cache_valid [code ...] time;
Default: —
Context: http, server, location
設(shè)置不同響應(yīng)碼的緩存時間掖鱼,當(dāng)不指定響應(yīng)碼的時候,例如
proxy_cache_valid 5m;
只對響應(yīng)碼為200援制,301戏挡,302的訪問請求資源設(shè)置緩存時間,此外可以個性化定制晨仑,例如:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid 404 1m;
proxy_cache_valid any 1m;
此外褐墅,還可以在相應(yīng)header里設(shè)置優(yōu)先級更高的緩存有效時間:
- “X-Accel-Expires”,設(shè)置響應(yīng)的緩存過期時間,以秒為單位洪己;0為不緩存妥凳;
- 如果沒有設(shè)置“X-Accel-Expires” header,則關(guān)于緩存的配置策略可能會在“Expires”或者“Cache-Control” header中答捕;
- 如果header含有“Set-Cookie”,則響應(yīng)不會被緩存逝钥,類似的配置可以在“proxy_ignore_header”中可見;
- header包含“Vary”并且設(shè)置為“*”拱镐,則請求不會被緩存艘款,如果“Vary”有具體的值,則對應(yīng)的請求會被緩存沃琅;
4.2.6 proxy_ignore_headers
Syntax: proxy_ignore_headers field ...;
Default: —
Context: http, server, location
不緩存包含在field的響應(yīng)header磷箕,可以設(shè)置的值有:“X-Accel-Redirect”, “X-Accel-Expires”, “X-Accel-Limit-Rate”,“X-Accel-Buffering”, “X-Accel-Charset”, “Expires”, “Cache-Control”, “Set-Cookie” (0.8.44), and “Vary”阵难。
如果上述的header field沒有設(shè)置為忽略岳枷,則header filed中有“X-Accel-Expires”, “Expires”, “Cache-Control”, “Set-Cookie”, and “Vary”的話,響應(yīng)會被緩存呜叫。
4.2.7 proxy_cache_min_uses指令
Syntax: proxy_cache_min_uses number;
Default: proxy_cache_min_uses 1;
Context: http, server, location
該指令用于設(shè)置緩存的最小使用次數(shù),默認(rèn)值為1
4.3 nginx緩存擴(kuò)展
4.3.1 proxy_cache_use_stale增強(qiáng)站點容錯能力
源站有問題時空繁,nginx可以通過proxy_cache_use_stale指令開啟容錯能力,即使用緩存內(nèi)容來響應(yīng)客戶端的請求朱庆。舉例如下:
location / {
...
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
}
如上配置表示盛泡,當(dāng)作為cache的NGINX收到源站返回error、timeout或者其他指定的5XX錯誤娱颊,并且在其緩存中有請求文件的陳舊版本傲诵,則會將這些陳舊版本的文件而不是錯誤信息發(fā)送給客戶端。
4.3.2 多磁盤分割緩存
使用NGINX箱硕,不需要建立一個RAID(磁盤陣列)拴竹。如果有多個硬盤,NGINX可以用來在多個硬盤之間分割緩存剧罩。舉例如下:
# 我們假設(shè)每塊硬盤掛載在相應(yīng)的目錄中:/mnt/disk1栓拜、/mnt/disk2、/mnt/disk3
proxy_cache_path /mnt/disk1 levels=1:2 keys_zone=cache_1:256m max_size=1024G use_temp_path=off;
proxy_cache_path /mnt/disk2 levels=1:2 keys_zone=cache_2:256m max_size=1024G use_temp_path=off;
proxy_cache_path /mnt/disk3 levels=1:2 keys_zone=cache_3:256m max_size=1024G use_temp_path=off;
split_clients $request_uri $disk {
33.3% 1;
33.3% 2;
* 3;
}
location / {
proxy_pass http://backend;
proxy_cache_key $request_uri;
proxy_cache cache_$disk;
}
在這份配置中,使用了3個獨立的緩存幕与,每個緩存專用一塊硬盤挑势,另外,3個獨立的線程池也各自專用一塊硬盤啦鸣。
緩存之間(其結(jié)果就是磁盤之間)的負(fù)載均衡使用split_clients模塊潮饱,split_clients非常適用于這個任務(wù)。
在 proxy_cache_path指令中設(shè)置use_temp_path=off诫给,表示NGINX會將臨時文件保存在緩存數(shù)據(jù)的同一目錄中饼齿。這是為了避免在更新緩存時,磁盤之間互相復(fù)制響應(yīng)數(shù)據(jù)蝙搔。
5.Nginx日志文件 + 日志文件切分講解;
5.1日志文件作用
通過訪問日志,你可以得到用戶地域來源考传、跳轉(zhuǎn)來源吃型、使用終端、某個URL訪問量等相關(guān)信息僚楞;
通過錯誤日志勤晚,你可以得到系統(tǒng)某個服務(wù)或server的性能瓶頸等。
因此泉褐,將日志好好利用赐写,你可以得到很多有價值的信息。
5.2 Nginx日志格式
打開nginx.conf配置文件:vim /usr/local/nginx/conf/nginx.conf
日志部分內(nèi)容:
#access_log logs/access.log main;
日志生成的到Nginx根目錄logs/access.log文件膜赃,默認(rèn)使用“main”日志格式挺邀,也可以自定義格式。
默認(rèn)“main”日志格式:
參數(shù)明細(xì)表:
參數(shù) | 解釋 |
---|---|
$remote_addr | 客戶端的ip地址(代理服務(wù)器跳座,顯示代理服務(wù)ip) |
$remote_user | 用于記錄遠(yuǎn)程客戶端的用戶名稱(一般為“-”) |
$time_local | 用于記錄訪問時間和時區(qū) |
$request | 用于記錄請求的url以及請求方法 |
$status | 響應(yīng)狀態(tài)碼端铛,例如:200成功、404頁面找不到等疲眷。 |
$body_bytes_sent | 給客戶端發(fā)送的文件主體內(nèi)容字節(jié)數(shù) |
$http_user_agent | 用戶所使用的代理(一般為瀏覽器) |
$http_x_forwarded_for | 可以記錄客戶端IP禾蚕,通過代理服務(wù)器來記錄客戶端的ip地址 |
$http_referer | 可以記錄用戶是從哪個鏈接訪問過來的 |
查看日志命令tail -f /usr/local/nginx/logs/access.log
5.3 Nginx自定義日志
打開nginx.conf配置文件去掉#注釋見下圖:
自定義某一個server配置的日志,使用“main”日志格式狂丝。
日志生成的到Nginx根目錄logs/access.log文件换淆,默認(rèn)使用“main”日志格式,也可以自定義格式几颜。
重新讀取加載Nginx配置文件:
執(zhí)行命令:nginx-s reload
5.4 Nginx日志分隔
網(wǎng)上一位老師寫的log文件分解的腳本
此腳本執(zhí)行時間根據(jù)自己公司情況來定,可以設(shè)置默認(rèn)一天執(zhí)行一次;
#!/bin/sh
BASE_DIR=/usr/local/nginx
BASE_FILE_NAME=bhz.com.access.log
CURRENT_PATH=$BASE_DIR/logs
BAK_PATH=$BASE_DIR/datalogs
CURRENT_FILE=$CURRENT_PATH/$BASE_FILE_NAME
BAK_TIME=`/bin/date -d yesterday +%Y%m%d%H%M`
BAK_FILE=$BAK_PATH/$BAK_TIME-$BASE_FILE_NAME
echo $BAK_FILE
$BASE_DIR/sbin/nginx -s stop
mv $CURRENT_FILE $BAK_FILE
$BASE_DIR/sbin/nginx
創(chuàng)建crontab設(shè)置作業(yè)
設(shè)置日志文件存放目錄crontab -e
*/1 * * * * sh /usr/local/software/nginx/nginx_log.sh
此設(shè)置的為一分鐘,如果設(shè)置一天自行修改;
6.Nginx配置文件結(jié)構(gòu)
默認(rèn)的 nginx 配置文件 nginx.conf 內(nèi)容如下
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
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 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#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;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
nginx 文件結(jié)構(gòu)
... #全局塊
events { #events塊
...
}
http #http塊
{
... #http全局塊
server #server塊
{
... #server全局塊
location [PATTERN] #location塊
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局塊
}
- 1倍试、全局塊:配置影響nginx全局的指令。一般有運行nginx服務(wù)器的用戶組蛋哭,nginx進(jìn)程pid存放路徑易猫,日志存放路徑,配置文件引入,允許生成worker process數(shù)等准颓。
- 2哈蝇、events塊:配置影響nginx服務(wù)器或與用戶的網(wǎng)絡(luò)連接。有每個進(jìn)程的最大連接數(shù)攘已,選取哪種事件驅(qū)動模型處理連接請求炮赦,是否允許同時接受多個網(wǎng)路連接,開啟多個網(wǎng)絡(luò)連接序列化等样勃。
- 3吠勘、http塊:可以嵌套多個server,配置代理峡眶,緩存剧防,日志定義等絕大多數(shù)功能和第三方模塊的配置。如文件引入辫樱,mime-type定義峭拘,日志自定義,是否使用sendfile傳輸文件狮暑,連接超時時間鸡挠,單連接請求數(shù)等。
- 4搬男、server塊:配置虛擬主機(jī)的相關(guān)參數(shù)拣展,一個http中可以有多個server。
- 5缔逛、location塊:配置請求的路由备埃,以及各種頁面的處理情況。
示例
########### 每個指令必須有分號結(jié)束褐奴。#################
#user administrator administrators; #配置用戶或者組瓜喇,默認(rèn)為nobody nobody。
#worker_processes 2; #允許生成的進(jìn)程數(shù)歉糜,默認(rèn)為1
#pid /nginx/pid/nginx.pid; #指定nginx進(jìn)程運行文件存放地址
error_log log/error.log debug; #制定日志路徑乘寒,級別。這個設(shè)置可以放入全局塊匪补,http塊伞辛,server塊,級別以此為:debug|info|notice|warn|error|crit|alert|emerg
events {
accept_mutex on; #設(shè)置網(wǎng)路連接序列化夯缺,防止驚群現(xiàn)象發(fā)生蚤氏,默認(rèn)為on
multi_accept on; #設(shè)置一個進(jìn)程是否同時接受多個網(wǎng)絡(luò)連接,默認(rèn)為off
#use epoll; #事件驅(qū)動模型踊兜,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大連接數(shù)竿滨,默認(rèn)為512
}
http {
include mime.types; #文件擴(kuò)展名與文件類型映射表
default_type application/octet-stream; #默認(rèn)文件類型,默認(rèn)為text/plain
#access_log off; #取消服務(wù)日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義格式
access_log log/access.log myFormat; #combined為日志格式的默認(rèn)值
sendfile on; #允許sendfile方式傳輸文件,默認(rèn)為off于游,可以在http塊毁葱,server塊,location塊贰剥。
sendfile_max_chunk 100k; #每個進(jìn)程每次調(diào)用傳輸數(shù)量不能大于設(shè)定的值倾剿,默認(rèn)為0,即不設(shè)上限蚌成。
keepalive_timeout 65; #連接超時時間前痘,默認(rèn)為75s,可以在http担忧,server芹缔,location塊。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #熱備
}
error_page 404 https://www.baidu.com; #錯誤頁
server {
keepalive_requests 120; #單連接請求上限次數(shù)瓶盛。
listen 4545; #監(jiān)聽端口
server_name 127.0.0.1; #監(jiān)聽地址
location ~*^.+$ { #請求的url過濾最欠,正則匹配,~為區(qū)分大小寫蓬网,~*為不區(qū)分大小寫。
#root path; #根目錄
#index vv.txt; #設(shè)置默認(rèn)頁
proxy_pass http://mysvr; #請求轉(zhuǎn)向mysvr 定義的服務(wù)器列表
deny 127.0.0.1; #拒絕的ip
allow 172.18.5.54; #允許的ip
}
}
}
幾個常見配置項:
- $remote_addr 與 $http_x_forwarded_for 用以記錄客戶端的ip地址鹉勒;
- $remote_user :用來記錄客戶端用戶名稱帆锋;
- 3.$time_local : 用來記錄訪問時間與時區(qū);
- 4.$request : 用來記錄請求的url與http協(xié)議禽额;
- 5.$status : 用來記錄請求狀態(tài)锯厢;成功是200;
- 6.$body_bytes_s ent :記錄發(fā)送給客戶端文件主體內(nèi)容大懈埂实辑;
- 7.$http_referer :用來記錄從那個頁面鏈接訪問過來的;
- 8.$http_user_agent :記錄客戶端瀏覽器的相關(guān)信息藻丢;
注意:
驚群現(xiàn)象:一個網(wǎng)路連接到來剪撬,多個睡眠的進(jìn)程被同事叫醒,但只有一個進(jìn)程能獲得鏈接悠反,這樣會影響系統(tǒng)性能
每個指令必須有分號結(jié)束残黑。
7.Nginx 常用命令
進(jìn)入安裝目錄下的sbin
./nginx #啟動
./nginx -t #檢查 nginx.conf配置文件
./nginx -s reload #重啟
./nginx -s stop # 停止
參考
Nginx 配置詳解
Nginx 反向代理與負(fù)載均衡詳解
正向代理與反向代理【總結(jié)】
Nginx緩存配置指南
nginx 緩存與優(yōu)化
Nginx日志管理
Nginx詳解(一)