日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx 优化篇

發(fā)布時間:2025/3/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx 优化篇 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


?

????#運行用戶

????user?www-data;???

????#啟動進程,通常設置成和cpu的數量相等

#阻塞和非阻塞網絡模型;

#同步阻塞模型,一請求一進(線)程,當進(線)程增加到一定程度后

#更多CPU時間浪費到切換一,性能急劇下降,所以負載率不高

#nginx基于時間的非阻塞多路復用(epoll或kquene)模型

#一個進程在短時間內可以相應大量的請求

#建議值?<=cpu核心數量,一般高于cpu數量有好處,也許還有進程切換開銷的負面影響

????worker_processes??4;

#將work?process綁定到特定的cpu上,避免進程在cpu間切換的開銷

work_cpu_affinity??0001?0010?0100?1000


#8內核4進程時的設置方法?work_cpu_affinity?00000001?00000010?00000100?10000000


#每進程最大可打開文件描述符數量(Linux上文件描述符比較廣義,網絡端口、設備、磁盤文件都是)

#文件描述符用完了,新的鏈接會被拒絕,產生502類錯誤。

#linux最大可打開文件數可通過ulimit?-n?FILECNT或?/etc/security/limit.conf配置

#理論值?系統(tǒng)最大數量/進程數。但進程間工作量并不是平均分配的,所以可設置的大一些

worker_rlimit_nofile?655350

?

????#全局錯誤日志及PID文件

????error_log??/var/log/nginx/error.log;

????pid????????/var/run/nginx.pid;

?

????#工作模式及連接數上限

????events?{

#并發(fā)響應能力的關鍵配置值

#每個進程允許的最大同時連接數,work_connectins?*?work_processes?=maxConnection;

#要注意maxconnections不等同于可相應的用戶數量

#因為一般一個瀏覽器會同時開兩條鏈接,如果反向代理,nginx到后端連服務器的鏈接數也要占用連接數

#所以,做靜態(tài)服務器時,一般maxClient?=?work_connectins?*?work_processes?/?2

#做反向代理服務器時?maxClient?=?work_connectins?*?work_processes?/?4

#這個值理論上越大越好,但最多可承受多少請求與配件和網絡相關,也可最大可打開文件,最大可用socket數量

worker_connections?200000;


#指明使用epoll?或?kquene(*BSD)

????????use???epoll;?????????????#epoll是多路復用IO(I/O?Multiplexing)中的一種方式,但是僅用于linux2.6以上內核,可以大大提高nginx的性能


#備注:要達到超高負載下最好的網絡響應能力,還有必要優(yōu)化與網絡相關的linux內核參數


????????worker_connections??1024;#單個后臺worker?process進程的最大并發(fā)鏈接數

????????#?multi_accept?on;

????}

?

????#設定http服務器,利用它的反向代理功能提供負載均衡支持

????http?{

?????????#設定mime類型,類型由mime.type文件定義

????????include???????/etc/nginx/mime.types;

????????default_type??application/octet-stream;

????????#設定日志格式

#關閉此項可減少IO開銷,但也無法記錄訪問信息,不利用業(yè)務分析,一般運維情況不建議使用

????????access_log????/var/log/nginx/access.log;

#只記錄更為嚴重的錯誤日志,可減少IO壓力

error_log?logs/error_log?crit;

#access_log?logs/access_log?main;

?

????????#sendfile?指令指定?nginx?是否調用?sendfile?函數(zero?copy?方式)來輸出文件,對于普通應用,

????????#必須設為?on,如果用來進行下載等應用磁盤IO重負載應用,可設置為?off,以平衡磁盤與網絡I/O處理速度,降低系統(tǒng)的uptime.

#啟用內核復制模式,應用保持開啟達到最快的IO效率

????????sendfile????????on;

#簡單說,啟動如下兩項配置,會在數據包達到一定大小后在發(fā)送數據

#這樣會較少網絡通信次數,降低阻塞概率,但也會影響響應的及時性

#比較適合于文件下載這類的大數據包通信場景

????????#tcp_nopush?????on;

#tcp_nodelay?on|off?on禁用Nagle算法



#keepalive_timeout?0;

#HTTP1.1支持持久連接alive

#降低每個鏈接的alive時間可在一定程度上提高可響應連接數量,所以一般可適當降低此值

?

????????#連接超時時間

????????keepalive_timeout??30s;

????????

???????

????????#開啟gzip壓縮,有效降低網絡流量

????????gzip??on;

#過短的內容壓縮效果不佳,壓縮過程還會浪費系統(tǒng)資源

gzip_min_length?1000;

#可選值1~9研所級別越高壓縮效率越高,但對系統(tǒng)性能要求越高。

gzip_comp_level?4;

#壓縮內容類別

gzip_types?text/plain?text/css?application/json?application/x-javascript?text/xml


#靜態(tài)文件緩存

#最大緩存數量,文件未使用存活期

open_file_cache?max=655350?inactive=20s;

#驗證緩存有效期時間間隔

open_file_cache_valid?30s;

#有效期內文件最少使用次數

open_file_cache_min_uses?2;



?

????????#設定請求緩沖

????????client_header_buffer_size????1k;

????????large_client_header_buffers??4?4k;

?

????????include?/etc/nginx/conf.d/*.conf;

????????include?/etc/nginx/sites-enabled/*;

?

????????#設定負載均衡的服務器列表

?????????upstream?mysvr?{

????????#weigth參數表示權值,權值越高被分配到的幾率越大

????????#本機上的Squid開啟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?{

????????#偵聽80端口

????????????listen???????80;

????????????#定義使用www.xx.com訪問

????????????server_name??www.xx.com;

charset?utf-8;

?

????????????#設定本虛擬主機的訪問日志

????????????access_log??logs/www.xx.com.access.log??main;

#location表達式

#syntax:location?[=|~|~*|^~|@]?/uri/?{...}

#分別兩種配置模式,普通字符串匹配,正則匹配

#無開頭引導字符或以=開頭表示普通字符串匹配

#以~或~*開頭表示正則匹配,~*表示不區(qū)分大小寫

#多個location時匹配規(guī)則

#總體是先普通后正則,只識別URI部分,例如請求為/test/1/abc.do?arg=xxx

#1.先查找是否有=開頭的精確匹配,及l(fā)ocation?=/test/1/abc.do?{...}

#2.再查找普通匹配,以最大前綴為規(guī)則,如下有兩個location

#location?/test/?{...}

#location?/test/1?{...}

#則匹配后一項

#3.匹配到一個普通格式后,搜索并未結束,而是暫存當前結果,并繼續(xù)在搜索正則模式

#4.在所有正則模式location中找到第一個匹配向后,以此屁配項為最終結果

#所以正則匹配項匹配規(guī)則受定義前后順序影響,但普通匹配不會

#5.如果未找到正則匹配項,則以3中緩存的結果為最終結果

#6.如果一個匹配都沒有,返回404


#location?=/?{...}?與?location?/?{...}的差別

#前一個是精確匹配,只響應/請求,所有/xxx類請求不會以前綴匹配形式匹配到它

#而后一個正相反,所有請求必然都是以/開頭,所以沒有其他匹配結果時一定會執(zhí)行到它


#location?^~?/?{...}?^~意思是非正則,表示匹配到此模式后不再繼續(xù)正則搜索

#所有如果這樣配置,相當于關閉了正則匹配功能

#因為一個請求在普通匹配規(guī)則下沒得到其他普通匹配時,最終匹配到這里

?

????????#默認請求

????????location?/?{

??????????????root???/root;??????#定義服務器的默認網站根目錄位置

??????????????index?index.php?index.html?index.htm;???#定義首頁索引文件的名稱

?

??????????????fastcgi_pass??www.xx.com;

?????????????fastcgi_param??SCRIPT_FILENAME??$document_root/$fastcgi_script_name;

??????????????include?/etc/nginx/fastcgi_params;

????????????}

?

????????#?定義錯誤提示頁面

????????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;

????????????#過期30天,靜態(tài)文件不怎么更新,過期可以設大一點,如果頻繁更新,則可以設置得小一點。

????????????expires?30d;

????????}

????????#PHP?腳本請求全部轉發(fā)到?FastCGI處理.?使用FastCGI默認配置.

????????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;

????????}

????????#設定查看Nginx狀態(tài)的地址

????????location?/NginxStatus?{

????????????stub_status????????????on;

????????????access_log??????????????on;

????????????auth_basic??????????????"NginxStatus";

????????????auth_basic_user_file??conf/htpasswd;

????????}

????????#禁止訪問?.htxxx?文件

????????location?~?/\.ht?{

????????????deny?all;

????????}

????????

?????????}

????}

?

以上是一些基本的配置,使用Nginx最大的好處就是負載均衡

?

如果要使用負載均衡的話,可以修改配置http節(jié)點如下:

?

????#設定http服務器,利用它的反向代理功能提供負載均衡支持

????http?{

?????????#設定mime類型,類型由mime.type文件定義

????????include???????/etc/nginx/mime.types;

????????default_type??application/octet-stream;

????????#設定日志格式

????????access_log????/var/log/nginx/access.log;

?

????????#省略上文有的一些配置節(jié)點

?

????????#。。。。。。。。。。

?

????????#設定負載均衡的服務器列表

?????????upstream?mysvr?{

????????#weigth參數表示權值,權值越高被分配到的幾率越大

????????server?192.168.8.1x:3128?weight=5;#本機上的Squid開啟3128端口

????????server?192.168.8.2x:80??weight=1;

????????server?192.168.8.3x:80??weight=6;

????????}

?

???????upstream?mysvr2?{

????????#weigth參數表示權值,權值越高被分配到的幾率越大

?

????????server?192.168.8.x:80??weight=1;

????????server?192.168.8.x:80??weight=6;

????????}

?

???????#第一個虛擬服務器

???????server?{

????????#偵聽192.168.8.x的80端口

????????????listen???????80;

????????????server_name??192.168.8.x;

?

??????????#對aspx后綴的進行負載均衡請求

????????location?~?.*\.aspx$?{

?

?????????????root???/root;??????#定義服務器的默認網站根目錄位置

??????????????index?index.php?index.html?index.htm;???#定義首頁索引文件的名稱

?

??????????????proxy_pass??http://mysvr?;#請求轉向mysvr?定義的服務器列表

?

??????????????#以下是一些反向代理的配置可刪除.

?

??????????????proxy_redirect?off;

?

??????????????#后端的Web服務器可以通過X-Forwarded-For獲取用戶真實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;????#允許客戶端請求的最大單文件字節(jié)數

??????????????client_body_buffer_size?128k;??#緩沖區(qū)代理緩沖用戶端請求的最大字節(jié)數,

??????????????proxy_connect_timeout?90;??#nginx跟后端服務器連接超時時間(代理連接超時)

??????????????proxy_send_timeout?90;????????#后端服務器數據回傳時間(代理發(fā)送超時)

??????????????proxy_read_timeout?90;?????????#連接成功后,后端服務器響應時間(代理接收超時)

??????????????proxy_buffer_size?4k;?????????????#設置代理服務器(nginx)保存用戶頭信息的緩沖區(qū)大小

??????????????proxy_buffers?4?32k;???????????????#proxy_buffers緩沖區(qū),網頁平均在32k以下的話,這樣設置

??????????????proxy_busy_buffers_size?64k;????#高負荷下緩沖大小(proxy_buffers*2)

??????????????proxy_temp_file_write_size?64k;??#設定緩存文件夾大小,大于這個值,將從upstream服務器傳

?

???????????}

?

?????????}

????}

轉載于:https://blog.51cto.com/liangml/1855776

總結

以上是生活随笔為你收集整理的nginx 优化篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。