nginx 优化篇
?
????#運(yùn)行用戶(hù)
????user?www-data;???
????#啟動(dòng)進(jìn)程,通常設(shè)置成和cpu的數(shù)量相等
#阻塞和非阻塞網(wǎng)絡(luò)模型;
#同步阻塞模型,一請(qǐng)求一進(jìn)(線)程,當(dāng)進(jìn)(線)程增加到一定程度后
#更多CPU時(shí)間浪費(fèi)到切換一,性能急劇下降,所以負(fù)載率不高
#nginx基于時(shí)間的非阻塞多路復(fù)用(epoll或kquene)模型
#一個(gè)進(jìn)程在短時(shí)間內(nèi)可以相應(yīng)大量的請(qǐng)求
#建議值?<=cpu核心數(shù)量,一般高于cpu數(shù)量有好處,也許還有進(jìn)程切換開(kāi)銷(xiāo)的負(fù)面影響
????worker_processes??4;
#將work?process綁定到特定的cpu上,避免進(jìn)程在cpu間切換的開(kāi)銷(xiāo)
work_cpu_affinity??0001?0010?0100?1000
#8內(nèi)核4進(jìn)程時(shí)的設(shè)置方法?work_cpu_affinity?00000001?00000010?00000100?10000000
#每進(jìn)程最大可打開(kāi)文件描述符數(shù)量(Linux上文件描述符比較廣義,網(wǎng)絡(luò)端口、設(shè)備、磁盤(pán)文件都是)
#文件描述符用完了,新的鏈接會(huì)被拒絕,產(chǎn)生502類(lèi)錯(cuò)誤。
#linux最大可打開(kāi)文件數(shù)可通過(guò)ulimit?-n?FILECNT或?/etc/security/limit.conf配置
#理論值?系統(tǒng)最大數(shù)量/進(jìn)程數(shù)。但進(jìn)程間工作量并不是平均分配的,所以可設(shè)置的大一些
worker_rlimit_nofile?655350
?
????#全局錯(cuò)誤日志及PID文件
????error_log??/var/log/nginx/error.log;
????pid????????/var/run/nginx.pid;
?
????#工作模式及連接數(shù)上限
????events?{
#并發(fā)響應(yīng)能力的關(guān)鍵配置值
#每個(gè)進(jìn)程允許的最大同時(shí)連接數(shù),work_connectins?*?work_processes?=maxConnection;
#要注意maxconnections不等同于可相應(yīng)的用戶(hù)數(shù)量
#因?yàn)橐话阋粋€(gè)瀏覽器會(huì)同時(shí)開(kāi)兩條鏈接,如果反向代理,nginx到后端連服務(wù)器的鏈接數(shù)也要占用連接數(shù)
#所以,做靜態(tài)服務(wù)器時(shí),一般maxClient?=?work_connectins?*?work_processes?/?2
#做反向代理服務(wù)器時(shí)?maxClient?=?work_connectins?*?work_processes?/?4
#這個(gè)值理論上越大越好,但最多可承受多少請(qǐng)求與配件和網(wǎng)絡(luò)相關(guān),也可最大可打開(kāi)文件,最大可用socket數(shù)量
worker_connections?200000;
#指明使用epoll?或?kquene(*BSD)
????????use???epoll;?????????????#epoll是多路復(fù)用IO(I/O?Multiplexing)中的一種方式,但是僅用于linux2.6以上內(nèi)核,可以大大提高nginx的性能
#備注:要達(dá)到超高負(fù)載下最好的網(wǎng)絡(luò)響應(yīng)能力,還有必要優(yōu)化與網(wǎng)絡(luò)相關(guān)的linux內(nèi)核參數(shù)
????????worker_connections??1024;#單個(gè)后臺(tái)worker?process進(jìn)程的最大并發(fā)鏈接數(shù)
????????#?multi_accept?on;
????}
?
????#設(shè)定http服務(wù)器,利用它的反向代理功能提供負(fù)載均衡支持
????http?{
?????????#設(shè)定mime類(lèi)型,類(lèi)型由mime.type文件定義
????????include???????/etc/nginx/mime.types;
????????default_type??application/octet-stream;
????????#設(shè)定日志格式
#關(guān)閉此項(xiàng)可減少I(mǎi)O開(kāi)銷(xiāo),但也無(wú)法記錄訪問(wèn)信息,不利用業(yè)務(wù)分析,一般運(yùn)維情況不建議使用
????????access_log????/var/log/nginx/access.log;
#只記錄更為嚴(yán)重的錯(cuò)誤日志,可減少I(mǎi)O壓力
error_log?logs/error_log?crit;
#access_log?logs/access_log?main;
?
????????#sendfile?指令指定?nginx?是否調(diào)用?sendfile?函數(shù)(zero?copy?方式)來(lái)輸出文件,對(duì)于普通應(yīng)用,
????????#必須設(shè)為?on,如果用來(lái)進(jìn)行下載等應(yīng)用磁盤(pán)IO重負(fù)載應(yīng)用,可設(shè)置為?off,以平衡磁盤(pán)與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的uptime.
#啟用內(nèi)核復(fù)制模式,應(yīng)用保持開(kāi)啟達(dá)到最快的IO效率
????????sendfile????????on;
#簡(jiǎn)單說(shuō),啟動(dòng)如下兩項(xiàng)配置,會(huì)在數(shù)據(jù)包達(dá)到一定大小后在發(fā)送數(shù)據(jù)
#這樣會(huì)較少網(wǎng)絡(luò)通信次數(shù),降低阻塞概率,但也會(huì)影響響應(yīng)的及時(shí)性
#比較適合于文件下載這類(lèi)的大數(shù)據(jù)包通信場(chǎng)景
????????#tcp_nopush?????on;
#tcp_nodelay?on|off?on禁用Nagle算法
#keepalive_timeout?0;
#HTTP1.1支持持久連接alive
#降低每個(gè)鏈接的alive時(shí)間可在一定程度上提高可響應(yīng)連接數(shù)量,所以一般可適當(dāng)降低此值
?
????????#連接超時(shí)時(shí)間
????????keepalive_timeout??30s;
????????
???????
????????#開(kāi)啟gzip壓縮,有效降低網(wǎng)絡(luò)流量
????????gzip??on;
#過(guò)短的內(nèi)容壓縮效果不佳,壓縮過(guò)程還會(huì)浪費(fèi)系統(tǒng)資源
gzip_min_length?1000;
#可選值1~9研所級(jí)別越高壓縮效率越高,但對(duì)系統(tǒng)性能要求越高。
gzip_comp_level?4;
#壓縮內(nèi)容類(lèi)別
gzip_types?text/plain?text/css?application/json?application/x-javascript?text/xml
#靜態(tài)文件緩存
#最大緩存數(shù)量,文件未使用存活期
open_file_cache?max=655350?inactive=20s;
#驗(yàn)證緩存有效期時(shí)間間隔
open_file_cache_valid?30s;
#有效期內(nèi)文件最少使用次數(shù)
open_file_cache_min_uses?2;
?
????????#設(shè)定請(qǐng)求緩沖
????????client_header_buffer_size????1k;
????????large_client_header_buffers??4?4k;
?
????????include?/etc/nginx/conf.d/*.conf;
????????include?/etc/nginx/sites-enabled/*;
?
????????#設(shè)定負(fù)載均衡的服務(wù)器列表
?????????upstream?mysvr?{
????????#weigth參數(shù)表示權(quán)值,權(quán)值越高被分配到的幾率越大
????????#本機(jī)上的Squid開(kāi)啟3128端口
????????server?192.168.8.1:3128?weight=5;
????????server?192.168.8.2:80??weight=1;
????????server?192.168.8.3:80??weight=6;
????????}
========================================================================================================================================================
========================================================================================================================================================
?
???????server?{
????????#偵聽(tīng)80端口
????????????listen???????80;
????????????#定義使用www.xx.com訪問(wèn)
????????????server_name??www.xx.com;
charset?utf-8;
?
????????????#設(shè)定本虛擬主機(jī)的訪問(wèn)日志
????????????access_log??logs/www.xx.com.access.log??main;
#location表達(dá)式
#syntax:location?[=|~|~*|^~|@]?/uri/?{...}
#分別兩種配置模式,普通字符串匹配,正則匹配
#無(wú)開(kāi)頭引導(dǎo)字符或以=開(kāi)頭表示普通字符串匹配
#以~或~*開(kāi)頭表示正則匹配,~*表示不區(qū)分大小寫(xiě)
#多個(gè)location時(shí)匹配規(guī)則
#總體是先普通后正則,只識(shí)別URI部分,例如請(qǐng)求為/test/1/abc.do?arg=xxx
#1.先查找是否有=開(kāi)頭的精確匹配,及l(fā)ocation?=/test/1/abc.do?{...}
#2.再查找普通匹配,以最大前綴為規(guī)則,如下有兩個(gè)location
#location?/test/?{...}
#location?/test/1?{...}
#則匹配后一項(xiàng)
#3.匹配到一個(gè)普通格式后,搜索并未結(jié)束,而是暫存當(dāng)前結(jié)果,并繼續(xù)在搜索正則模式
#4.在所有正則模式location中找到第一個(gè)匹配向后,以此屁配項(xiàng)為最終結(jié)果
#所以正則匹配項(xiàng)匹配規(guī)則受定義前后順序影響,但普通匹配不會(huì)
#5.如果未找到正則匹配項(xiàng),則以3中緩存的結(jié)果為最終結(jié)果
#6.如果一個(gè)匹配都沒(méi)有,返回404
#location?=/?{...}?與?location?/?{...}的差別
#前一個(gè)是精確匹配,只響應(yīng)/請(qǐng)求,所有/xxx類(lèi)請(qǐng)求不會(huì)以前綴匹配形式匹配到它
#而后一個(gè)正相反,所有請(qǐng)求必然都是以/開(kāi)頭,所以沒(méi)有其他匹配結(jié)果時(shí)一定會(huì)執(zhí)行到它
#location?^~?/?{...}?^~意思是非正則,表示匹配到此模式后不再繼續(xù)正則搜索
#所有如果這樣配置,相當(dāng)于關(guān)閉了正則匹配功能
#因?yàn)橐粋€(gè)請(qǐng)求在普通匹配規(guī)則下沒(méi)得到其他普通匹配時(shí),最終匹配到這里
?
????????#默認(rèn)請(qǐng)求
????????location?/?{
??????????????root???/root;??????#定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置
??????????????index?index.php?index.html?index.htm;???#定義首頁(yè)索引文件的名稱(chēng)
?
??????????????fastcgi_pass??www.xx.com;
?????????????fastcgi_param??SCRIPT_FILENAME??$document_root/$fastcgi_script_name;
??????????????include?/etc/nginx/fastcgi_params;
????????????}
?
????????#?定義錯(cuò)誤提示頁(yè)面
????????error_page???500?502?503?504?/50x.html;?
????????????location?=?/50x.html?{
????????????root???/root;
????????}
?
????????#靜態(tài)文件,nginx自己處理
????????location?~?^/(p_w_picpaths|javascript|js|css|flash|media|static)/?{
????????????root?/var/www/virtual/htdocs;
????????????#過(guò)期30天,靜態(tài)文件不怎么更新,過(guò)期可以設(shè)大一點(diǎn),如果頻繁更新,則可以設(shè)置得小一點(diǎn)。
????????????expires?30d;
????????}
????????#PHP?腳本請(qǐng)求全部轉(zhuǎn)發(fā)到?FastCGI處理.?使用FastCGI默認(rèn)配置.
????????location?~?\.php$?{
????????????root?/root;
????????????fastcgi_pass?127.0.0.1:9000;
????????????fastcgi_index?index.php;
????????????fastcgi_param?SCRIPT_FILENAME?/home/www/www$fastcgi_script_name;
????????????include?fastcgi_params;
????????}
????????#設(shè)定查看Nginx狀態(tài)的地址
????????location?/NginxStatus?{
????????????stub_status????????????on;
????????????access_log??????????????on;
????????????auth_basic??????????????"NginxStatus";
????????????auth_basic_user_file??conf/htpasswd;
????????}
????????#禁止訪問(wèn)?.htxxx?文件
????????location?~?/\.ht?{
????????????deny?all;
????????}
????????
?????????}
????}
?
以上是一些基本的配置,使用Nginx最大的好處就是負(fù)載均衡
?
如果要使用負(fù)載均衡的話,可以修改配置http節(jié)點(diǎn)如下:
?
????#設(shè)定http服務(wù)器,利用它的反向代理功能提供負(fù)載均衡支持
????http?{
?????????#設(shè)定mime類(lèi)型,類(lèi)型由mime.type文件定義
????????include???????/etc/nginx/mime.types;
????????default_type??application/octet-stream;
????????#設(shè)定日志格式
????????access_log????/var/log/nginx/access.log;
?
????????#省略上文有的一些配置節(jié)點(diǎn)
?
????????#。。。。。。。。。。
?
????????#設(shè)定負(fù)載均衡的服務(wù)器列表
?????????upstream?mysvr?{
????????#weigth參數(shù)表示權(quán)值,權(quán)值越高被分配到的幾率越大
????????server?192.168.8.1x:3128?weight=5;#本機(jī)上的Squid開(kāi)啟3128端口
????????server?192.168.8.2x:80??weight=1;
????????server?192.168.8.3x:80??weight=6;
????????}
?
???????upstream?mysvr2?{
????????#weigth參數(shù)表示權(quán)值,權(quán)值越高被分配到的幾率越大
?
????????server?192.168.8.x:80??weight=1;
????????server?192.168.8.x:80??weight=6;
????????}
?
???????#第一個(gè)虛擬服務(wù)器
???????server?{
????????#偵聽(tīng)192.168.8.x的80端口
????????????listen???????80;
????????????server_name??192.168.8.x;
?
??????????#對(duì)aspx后綴的進(jìn)行負(fù)載均衡請(qǐng)求
????????location?~?.*\.aspx$?{
?
?????????????root???/root;??????#定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置
??????????????index?index.php?index.html?index.htm;???#定義首頁(yè)索引文件的名稱(chēng)
?
??????????????proxy_pass??http://mysvr?;#請(qǐng)求轉(zhuǎn)向mysvr?定義的服務(wù)器列表
?
??????????????#以下是一些反向代理的配置可刪除.
?
??????????????proxy_redirect?off;
?
??????????????#后端的Web服務(wù)器可以通過(guò)X-Forwarded-For獲取用戶(hù)真實(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;
??????????????client_max_body_size?10m;????#允許客戶(hù)端請(qǐng)求的最大單文件字節(jié)數(shù)
??????????????client_body_buffer_size?128k;??#緩沖區(qū)代理緩沖用戶(hù)端請(qǐng)求的最大字節(jié)數(shù),
??????????????proxy_connect_timeout?90;??#nginx跟后端服務(wù)器連接超時(shí)時(shí)間(代理連接超時(shí))
??????????????proxy_send_timeout?90;????????#后端服務(wù)器數(shù)據(jù)回傳時(shí)間(代理發(fā)送超時(shí))
??????????????proxy_read_timeout?90;?????????#連接成功后,后端服務(wù)器響應(yīng)時(shí)間(代理接收超時(shí))
??????????????proxy_buffer_size?4k;?????????????#設(shè)置代理服務(wù)器(nginx)保存用戶(hù)頭信息的緩沖區(qū)大小
??????????????proxy_buffers?4?32k;???????????????#proxy_buffers緩沖區(qū),網(wǎng)頁(yè)平均在32k以下的話,這樣設(shè)置
??????????????proxy_busy_buffers_size?64k;????#高負(fù)荷下緩沖大小(proxy_buffers*2)
??????????????proxy_temp_file_write_size?64k;??#設(shè)定緩存文件夾大小,大于這個(gè)值,將從upstream服務(wù)器傳
?
???????????}
?
?????????}
????}
轉(zhuǎn)載于:https://blog.51cto.com/liangml/1855776
總結(jié)
- 上一篇: 查看linux服务器硬件信息
- 下一篇: HDU 1695 BZOJ 2301 莫