摘要:優化運行用戶啟動進程通常設置成和的數量相等阻塞和非阻塞網絡模型同步阻塞模型,一請求一進線程,當進線程增加到一定程度后更多時間浪費到切換一,性能急劇下降,所以負載率不高基于時間的非阻塞多路復用或模型一個進程在短時間內可以相應大量的請求建議值
nginx 優化
user www-data; 運行用戶
worker_processes 4; 啟動進程,通常設置成和cpu的數量相等
阻塞和非阻塞網絡模型;同步阻塞模型,一請求一進(線)程,當進(線)程增加到一定程度后
更多CPU時間浪費到切換一,性能急劇下降,所以負載率不高
nginx基于時間的非阻塞多路復用(epoll或kquene)模型
一個進程在短時間內可以相應大量的請求
建議值 <=cpu核心數量,一般高于cpu數量有好處,也許還有進程切換開銷的負面影響
將work process綁定到特定的cpu上,避免進程在cpu間切換的開銷
work_cpu_affinity 0001 0010 0100 1000
8內核4進程時的設置方法 work_cpu_affinity 00000001 00000010 00000100 10000000
worker_rlimit_nofile 655350 每進程最大可打開文件描述符數量(Linux上文件描述符比較廣義,網絡端口、設備、磁盤文件都是)
文件描述符用完了,新的鏈接會被拒絕,產生502類錯誤。linux最大可打開文件數可通過ulimit -n FILECNT或 /etc/security/limit.conf配置
理論值 系統最大數量/進程數。但進程間工作量并不是平均分配的,所以可設置的大一些
error_log /var/log/nginx/error.log; 全局錯誤日志及PID文件
pid /var/run/nginx.pid;
工作模式及連接數上限
events {
? worker_connections 200000; 并發響應能力的關鍵配置值
每個進程允許的最大同時連接數,work_connectins * work_processes =maxConnection; 要注意maxconnections不等同于可相應的用戶數量 因為一般一個瀏覽器會同時開兩條鏈接,如果反向代理,nginx到后端連服務器的鏈接數也要占用連接數 所以,做靜態服務器時,一般maxClient = work_connectins * work_processes / 2 做反向代理服務器時 maxClient = work_connectins * work_processes / 4 這個值理論上越大越好,但最多可承受多少請求與配件和網絡相關,也可最大可打開文件,最大可用socket數量? 指明使用epoll 或 kquene(*BSD)
? use epoll; epoll是多路復用IO(I/O Multiplexing)中的一種方式,但是僅用于linux2.6以上內核,可以大大提高nginx的性能
要達到超高負載下最好的網絡響應能力,還有必要優化與網絡相關的linux內核參數
worker_connections 1024; 單個后臺worker process進程的最大并發鏈接數
multi_accept on;
}
http區域設定http服務器,利用它的反向代理功能提供負載均衡支持
? http {
? include /etc/nginx/mime.types; 設定mime類型,類型由mime.type文件定義
? default_type application/octet-stream;
? access_log /var/log/nginx/access.log; 設定日志格式
? error_log logs/error_log crit;
? access_log logs/access_log main;
關閉此項可減少IO開銷,但也無法記錄訪問信息,不利用業務分析,一般運維情況不建議使用
只記錄更為嚴重的錯誤日志,可減少IO壓力
endfile on; sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,對于普通應用,必須設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置為 off,以平衡磁盤與網絡I/O處理速度,降低系統的uptime.
cp_nopush on; 啟用內核復制模式,應用保持開啟達到最快的IO效率
cp_nodelay on|off; on禁用Nagle算法
簡單說,啟動如上兩項配置,會在數據包達到一定大小后在發送數據,這樣會較少網絡通信次數,降低阻塞概率,但也會影響響應的及時性,比較適合于文件下載這類的大數據包通信場景
keepalive_timeout 0; HTTP1.1支持持久連接alive
* 降低每個鏈接的alive時間可在一定程度上提高可響應連接數量,所以一般可適當降低此值
keepalive_timeout 30s; 連接超時時間
gzip on; 開啟gzip壓縮,有效降低網絡流量
gzip_min_length 1000; 過短的內容壓縮效果不佳,壓縮過程還會浪費系統資源
gzip_comp_level 4; 可選值1~9研所級別越高壓縮效率越高,但對系統性能要求越高。
gzip_types text/plain text/css application/json application/x-javascript text/xml 壓縮內容類別
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 { server 192.168.8.1:3128 weight=5; server 192.168.8.2:80 weight=1; server 192.168.8.3:80 weight=6; } weigth參數表示權值,權值越高被分配到的幾率越大(本機上的Squid開啟3128端口)
location表達式
syntax:location [=|~|~*|^~|@] /uri/ {...}分別兩種配置模式,普通字符串匹配,正則匹配
無開頭引導字符或以=開頭表示普通字符串匹配
以~或~*開頭表示正則匹配,~*表示不區分大小寫
多個location時匹配規則
總體是先普通后正則,只識別URI部分,例如請求為/test/1/abc.do? arg=xxx
1.先查找是否有=開頭的精確匹配,及location =/test/1/abc.do {...}
2.再查找普通匹配,以最大前綴為規則,如下有兩個location
location /test/ {...}
location /test/1 {...}
則匹配后一項
3.匹配到一個普通格式后,搜索并未結束,而是暫存當前結果,并繼續在搜索正則模式
4.在所有正則模式location中找到第一個匹配向后,以此屁配項為最終結果,所以正則匹配項匹配規則受定義前后順序影響,但普通匹配不會
5.如果未找到正則匹配項,則以3中緩存的結果為最終結果
6.如果一個匹配都沒有,返回404
location =/ {...} 與 location / {...}的差別
前一個是精確匹配,只響應/請求,所有/xxx類請求不會以前綴匹配形式匹配到它 ,而后一個正相反,所有請求必然都是以/開頭,所以沒有其他匹配結果時一定會執行到它
location ^~ / {...} ^~意思是非正則,表示匹配到此模式后不再繼續正則搜索,所有如果這樣配置,相當于關閉了正則匹配功能 ,因為一個請求在普通匹配規則下沒得到其他普通匹配時,最終匹配到這里
默認請求
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; }
靜態文件,nginx自己處理
location ~ ^/(images|javascript|js|css|flash|media|static)/ { root /var/www/virtual/htdocs; #過期30天,靜態文件不怎么更新,過期可以設大一點,如果頻繁更新,則可以設置得小一點。 expires 30d; }
PHP 腳本請求全部轉發到 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狀態的地址
location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; } #禁止訪問 .htxxx 文件 location ~ /.ht { deny all; } } }
以上是一些基本的配置,使用Nginx最大的好處就是負載均衡
如果要使用負載均衡的話,可以修改配置http節點如下:
設定http服務器,利用它的反向代理功能提供負載均衡支持
http { include /etc/nginx/mime.types; #設定mime類型,類型由mime.type文件定義 default_type application/octet-stream; #設定日志格式 access_log /var/log/nginx/access.log; #省略 #設定負載均衡的服務器列表 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; #允許客戶端請求的最大單文件字節數 client_body_buffer_size 128k; #緩沖區代理緩沖用戶端請求的最大字節數, proxy_connect_timeout 90; #nginx跟后端服務器連接超時時間(代理連接超時) proxy_send_timeout 90; #后端服務器數據回傳時間(代理發送超時) proxy_read_timeout 90; #連接成功后,后端服務器響應時間(代理接收超時) proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩沖區大小 proxy_buffers 4 32k; #proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置 proxy_busy_buffers_size 64k; #高負荷下緩沖大?。╬roxy_buffers*2) proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大于這個值,將從upstream服務器傳 } } }Nginx平滑升級
下載Nginx地址:http://nginx.org/download/ngi...
nginx版本:1.8.0
nginx升級版本:1.12.1
nginx -v #查看當前Nginx版本
nginx -V #查看當前Nginx編譯參數
在執行編譯時會報錯沒有--with-http_spdy_module選項(nginx 1.9.5 已經沒有了 --with-http_spdy_module ,取代的是 --with-http_v2_module),查看官方模塊地址:http://nginx.org/en/docs/
開始部署
[root@localhost src]#tar xvf nginx-1.12.1.tar.gz [root@localhost nginx-1.12.1]# cd nginx-1.12.1 [root@localhost nginx-1.12.1]# ./configure --user=tdoa --group=tdoa --prefix=/usr/local/tdoa/nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-pcre=/root/linux-2015/down/pcre-8.32 --with-pcre-jit --with-http_v2_module [root@localhost nginx-1.12.1]# make
執行make后,make install無需執行,將現有nginx重命名
[root@localhost objs]# mv /usr/local/tdoa/nginx/sbin/nginx /usr/local/tdoa/nginx/sbin/nginx.old [root@localhost objs]# pwd /usr/local/src/nginx-1.12.1/objs [root@localhost objs]# cp nginx nginx nginx.8 [root@localhost objs]# cp nginx /usr/local/tdoa/nginx/sbin/ [root@localhost objs]# /usr/local/tdoa/nginx/sbin/nginx -v nginx version: nginx/1.12.1 [root@localhost objs]# /usr/local/tdoa/nginx/sbin/nginx -t nginx: the configuration file /usr/local/tdoa/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/tdoa/nginx/conf/nginx.conf test is successful [root@localhost objs]# /usr/local/tdoa/nginx/sbin/nginx -s reload [root@localhost objs]# netstat -tnlp |grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 98457/nginx tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1680/cupsd tcp 0 0 ::1:631 :::* LISTEN 1680/cupsd
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/39541.html
摘要:資源獲取方式根據下面的索引,大家可以選擇自己需要的資源,然后在松哥公眾號牧碼小子后臺回復對應的口令,就可以獲取到資源的百度云盤下載地址。公眾號二維碼如下另外本文會定期更新,松哥有新資源的時候會及時分享給大家,歡迎各位小伙伴保持關注。 沒有一條路是容易的,特別是轉行計算機這條路。 松哥接觸過很多轉行做開發的小伙伴,我了解到很多轉行人的不容易,記得松哥大二時剛剛決定轉行計算機,完全不知道這...
摘要:一測試工具壓力測試工具是針對的性能測試工具,可以只安裝工具。顯示版本號并退出。用戶名和密碼由一個隔開,并以編碼形式發送。參考并發數問題思考與工作原理和優化漏洞調大的并發連接數調的等。 一、測試工具: Apache 壓力測試工具ab ab是針對apache的性能測試工具,可以只安裝ab工具。 ubuntu安裝ab apt-get install apache2-utils centos安...
摘要:一測試工具壓力測試工具是針對的性能測試工具,可以只安裝工具。顯示版本號并退出。用戶名和密碼由一個隔開,并以編碼形式發送。參考并發數問題思考與工作原理和優化漏洞調大的并發連接數調的等。 一、測試工具: Apache 壓力測試工具ab ab是針對apache的性能測試工具,可以只安裝ab工具。 ubuntu安裝ab apt-get install apache2-utils centos安...
摘要:負載均衡就是用來幫助我們將眾多的客戶端請求合理的分配到各個服務器,以達到服務端資源的充分利用和更少的請求時間。如下面的配置復制代碼這樣可以完美繞過瀏覽器的同源策略訪問的屬于同源訪問,而對服務端轉發的請求不會觸發瀏覽器的同源策略。 性能優化是一門大學問,本文僅對個人一些積累知識的闡述,歡迎下面補充。 拋出一個問題,從輸入url地址欄到所有內容顯示到界面上做了哪些事? 1.瀏覽器向 DN...
閱讀 2582·2021-09-30 09:48
閱讀 2573·2019-08-30 14:10
閱讀 2713·2019-08-29 11:22
閱讀 1843·2019-08-26 13:51
閱讀 2281·2019-08-26 12:02
閱讀 2421·2019-08-23 16:06
閱讀 3560·2019-08-23 14:06
閱讀 1097·2019-08-23 13:56