Nginx高性能WEB服務(wù)器系列v1_第1頁(yè)
Nginx高性能WEB服務(wù)器系列v1_第2頁(yè)
Nginx高性能WEB服務(wù)器系列v1_第3頁(yè)
Nginx高性能WEB服務(wù)器系列v1_第4頁(yè)
Nginx高性能WEB服務(wù)器系列v1_第5頁(yè)
已閱讀5頁(yè),還剩74頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Nginx高性能WEB服務(wù)器系列目 錄1. Nginx入門(mén)簡(jiǎn)介22. Nginx工作原理及安裝配置33. Nginx常用命令管理及升級(jí)64. Nginx配置文件精講一95. Nginx配置文件精講二146. 實(shí)戰(zhàn)線上Nginx多站點(diǎn)配置187. 企業(yè)實(shí)戰(zhàn)Nginx+Tomcat動(dòng)靜分離架構(gòu)198. 企業(yè)實(shí)戰(zhàn)Nginx+PHP(FastCGI)高性能服務(wù)器269. Nginx與Tomcat/PHP架構(gòu)優(yōu)化3010. Nginx配置優(yōu)化及深入講解3511. Nginx Rewrite規(guī)則詳解一4012. 構(gòu)建Nginx均衡LAMP高性能服務(wù)器4113. Nginx日志分析及腳本編寫(xiě)5014. Ng

2、inx日志切割案例講解5315. Nginx防盜鏈配置案例配置5516. Nginx運(yùn)維日常故障解決方案5817. Nginx構(gòu)建安全站點(diǎn)HTTPS架構(gòu)58Ø 加載SSL支持的Nginx并使用私鑰時(shí)去除口令:6118. Nginx均衡TCP協(xié)議服務(wù)器案例6319. 構(gòu)建企業(yè)級(jí)Nginx+Keepalived集群架構(gòu)6520. 企業(yè)Nginx+Keepalived雙主架構(gòu)案例實(shí)戰(zhàn)721. Nginx入門(mén)簡(jiǎn)介WEB服務(wù)器也稱(chēng)為WWW(WORLD WIDE WEB)服務(wù)器,主要功能是提供網(wǎng)上信息瀏覽服務(wù)。 WWW 是 Internet的多媒體信息查詢(xún)工具,是 Internet 上

3、近年才發(fā)展起來(lái)的服務(wù),也是發(fā)展最快和目前用的最廣泛的服務(wù)。正是因?yàn)橛辛薟WW工具,才使得近年來(lái) Internet 迅速發(fā)展,且用戶(hù)數(shù)量飛速增長(zhǎng)。Nginx ("engine x") 是一個(gè)高性能的 HTTP 和 反向代理 服務(wù)器,也是一個(gè) IMAP/POP3/SMTP 代理服務(wù)器。 Nginx 是由 Igor Sysoev 為俄羅斯訪問(wèn)量第二的 Rambler.ru 站點(diǎn)開(kāi)發(fā)的,第一個(gè)公開(kāi)版本0.1.0發(fā)布于2004年10月4日。其將源代碼以類(lèi)BSD許可證的形式發(fā)布,因它的穩(wěn)定性、豐富的功能集、示例配置文件和低系統(tǒng)資源的消耗而聞名。它已經(jīng)在眾多

4、流量很大的俄羅斯網(wǎng)站上使用了很長(zhǎng)時(shí)間,這些網(wǎng)站包括Yandex、Mail.Ru、VKontakte,以及Rambler。據(jù)Netcraft統(tǒng)計(jì),在2012年8月份,世界上最繁忙的網(wǎng)站中有11.48%使用Nginx作為其服務(wù)器或者代理服務(wù)器。目前互聯(lián)網(wǎng)主流公司360、百度、新浪、騰訊、阿里等,目前中國(guó)互聯(lián)網(wǎng)企業(yè)70%以上公司都在使用nginx作為自己的web服務(wù)器。Nginx特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力確實(shí)在同類(lèi)型的網(wǎng)頁(yè)服務(wù)器中表現(xiàn)較好。Nginx由內(nèi)核和模塊組成,其中,內(nèi)核的設(shè)計(jì)非常微小和簡(jiǎn)潔,完成的工作也非常簡(jiǎn)單,僅僅通過(guò)查找配置文件將客戶(hù)端請(qǐng)求映射到一個(gè)loca

5、tion block(location是Nginx配置中的一個(gè)指令,用于URL匹配),而在這個(gè)location中所配置的每個(gè)指令將會(huì)啟動(dòng)不同的模塊去完成相應(yīng)的工作。Nginx相對(duì)于Apache優(yōu)點(diǎn):1) 高并發(fā)響應(yīng)性能非常好,官方Nginx處理靜態(tài)文件并發(fā)5w/s2) 反向代理性能非常強(qiáng)。(可用于負(fù)載均衡)3) 內(nèi)存和cpu占用率低。(為Apache的1/5-1/10)4) 對(duì)后端服務(wù)有健康檢查功能。5) 支持PHP cgi方式和fastcgi方式。6) 配置代碼簡(jiǎn)潔且容易上手。2. Nginx工作原理及安裝配置Nginx由內(nèi)核和模塊組成,其中,內(nèi)核的設(shè)計(jì)非常微小和簡(jiǎn)潔,完成的工作也非常簡(jiǎn)單,

6、僅僅通過(guò)查找配置文件將客戶(hù)端請(qǐng)求映射到一個(gè)location block(location是Nginx配置中的一個(gè)指令,用于URL匹配),而在這個(gè)location中所配置的每個(gè)指令將會(huì)啟動(dòng)不同的模塊去完成相應(yīng)的工作。Nginx的模塊從結(jié)構(gòu)上分為核心模塊、基礎(chǔ)模塊和第三方模塊:核心模塊:HTTP模塊、EVENT模塊和MAIL模塊基礎(chǔ)模塊:HTTP Access模塊、HTTP FastCGI模塊、HTTP Proxy模塊和HTTP Rewrite模塊,第三方模塊:HTTP Upstream Request Hash模塊、Notice模塊和HTTP Access Key模塊。Nginx的高并發(fā)得益于其

7、采用了epoll模型,與傳統(tǒng)的服務(wù)器程序架構(gòu)不同,epoll是linux內(nèi)核2.6以后才出現(xiàn)的。Nginx采用epoll模型,異步非阻塞,而Apache采用的是select模型:Select特點(diǎn):select 選擇句柄的時(shí)候,是遍歷所有句柄,也就是說(shuō)句柄有事件響應(yīng)時(shí),select需要遍歷所有句柄才能獲取到哪些句柄有事件通知,因此效率是非常低。epoll的特點(diǎn):epoll對(duì)于句柄事件的選擇不是遍歷的,是事件響應(yīng)的,就是句柄上事件來(lái)就馬上選擇出來(lái),不需要遍歷整個(gè)句柄鏈表,因此效率非常高。接下來(lái)正式安裝Nginx,首先需要安裝pcre庫(kù)。#安裝pcre支持rewrite庫(kù),也可以安裝源碼,注*安裝源

8、碼時(shí),指定pcre路徑為解壓源碼的路徑,而不是編譯后的路徑,否則會(huì)報(bào)錯(cuò)(make1: * /usr/local/pcre/Makefile Error 127 錯(cuò)誤)yum install pcre-devel pcre -y#下載Nginx源碼包c(diǎn)d /usr/src wget -c /download/nginx-1.6.2.tar.gz #解壓Nginx源碼包tar -xzf nginx-1.6.2.tar.gz#進(jìn)入解壓目錄,然后sed修改Nginx版本信息為WScd nginx-1.6.2 ; sed -

9、i -e 's/1.6.2/g' -e 's/nginx/WS/g' -e 's/"NGINX"/"WS"/g' src/core/nginx.h#預(yù)編譯Nginxuseradd www ;./configure -user=www -group=www -prefix=/usr/local/nginx -with-http_stub_status_module -with-http_ssl_module#.configure預(yù)編譯成功后,執(zhí)行make命令進(jìn)行編譯make#make執(zhí)行成功后,執(zhí)行make

10、install 正式安裝make install#自此Nginx安裝完畢/usr/local/nginx/sbin/nginx -t 檢查nginx配置文件是否正確,返回OK即正確。rootlocalhost # /usr/local/nginx/sbin/nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successfulrootlocalho

11、st #然后啟動(dòng)nginx,/usr/local/nginx/sbin/nginx 回車(chē)即可。查看進(jìn)程是否已啟動(dòng):rootlocalhost # ps -ef |grep nginxnobody 5381 30285 0 May16 ? 00:04:31 nginx: worker process root 30285 1 0 2014 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginxroot 32260 32220 0 12:34 pts/0 00:00:00 grep nginxrootlocalhost #3. Ng

12、inx常用命令管理及升級(jí)查看nginx進(jìn)程 ps -ef|grep nginx說(shuō)明:nginx的進(jìn)程由主進(jìn)程和工作進(jìn)程組成。啟動(dòng)nginxnginx啟動(dòng)結(jié)果顯示nginx的主線程和工作線程,工作線程的數(shù)量跟nginx.conf中的配置參數(shù)worker_processes有關(guān)。平滑啟動(dòng)nginx kill -HUP cat /var/run/nginx.pid 或者nginx -s reload其中進(jìn)程文件路徑在配置文件nginx.conf中可以找到。平滑啟動(dòng)的意思是在不停止nginx的情況下,重啟nginx,重新加載配置文件,啟動(dòng)新的工作線程,完美停止舊的工作線程。完美停止nginx kill

13、 -QUIT cat /var/run/nginx.pid快速停止nginx kill -TERM cat /var/run/nginx.pid或者kill -INT cat /var/run/nginx.pid完美停止工作進(jìn)程(主要用于平滑升級(jí)) kill -WINCH cat /var/run/nginx.pid強(qiáng)制停止nginx pkill -9 nginx檢查對(duì)nginx.conf文件的修改是否正確 nginx -t -c /etc/nginx/nginx.conf 或者 nginx -t停止nginx的命令nginx -s stop或者pkill nginx查看nginx的版本信息n

14、ginx -v查看完整的nginx的配置信息 nginx -VNginx升級(jí)方法:下載所需版本的Nginxwget /download/nginx-1.4.2.tar.gz 獲取舊版本nginx的configure選項(xiàng)/usr/local/nginx/sbin/nginx -V 編譯新版本的nginxtar -xvf nginx-1.4.2.tar.gz cd nginx-1.4.2 ./configure -prefix=/usr/local/nginx -user=www -group=www -with-http_stub_status_module

15、 -with-http_ssl_module make 備份舊版本的nginx可執(zhí)行文件,復(fù)制新版本的nginx這行文件mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old cp objs/nginx /usr/local/nginx/sbin/測(cè)試新版本nginx是否正常/usr/local/nginx/sbin/nginx -t平滑重啟升級(jí)nginxkill USR2 cat /usr/local/nginx/log/nginx.pid 舊版本Nginx的pid變?yōu)閛ldbin,這是舊版本和新版本的nginx同時(shí)運(yùn)行,

16、過(guò)一段時(shí)間等就nginx處理完用戶(hù)請(qǐng)求后,執(zhí)行下面操作從容關(guān)閉舊版本的Nginx進(jìn)程kill -WINCH cat /usr/local/nginx/log/nginx.oldbin 決定是否升級(jí)到新版的nginxkill HUP cat /usr/local/nginx/log/nginx.oldbin #nginx在不重載配置文件啟動(dòng)工作進(jìn)程 kill QUIT cat /usr/local/nginx/log/nginx.oldbin #關(guān)閉舊版nginx 驗(yàn)證nginx是否升級(jí)成功/usr/local/nginx/sbin/nginx V #顯示下圖則升級(jí)成功4. Nginx配置文件精

17、講一#定義Nginx運(yùn)行的用戶(hù)和用戶(hù)組user www www;#啟動(dòng)進(jìn)程,通常設(shè)置成和cpu的數(shù)量相等worker_processes 8;worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;#為每個(gè)進(jìn)程分配cpu,上例中將8個(gè)進(jìn)程分配到8個(gè)cpu,當(dāng)然可以寫(xiě)多個(gè),或者將一個(gè)進(jìn)程分配到多個(gè)cpu。worker_rlimit_nofile 102400;#這個(gè)指令是指當(dāng)一個(gè)nginx進(jìn)程打開(kāi)的最多文件描述符數(shù)目,理論值應(yīng)該是最多打#開(kāi)文件數(shù)(ulimit -n)與

18、nginx進(jìn)程數(shù)相除,但是nginx分配請(qǐng)求并不是那么均勻#,所以最好與ulimit -n的值保持一致。#全局錯(cuò)誤日志及PID文件error_log /usr/local/nginx/logs/error.log; #錯(cuò)誤日志定義等級(jí), debug | info | notice | warn | error | crit pid /usr/local/nginx/nginx.pid;#一個(gè)nginx進(jìn)程打開(kāi)的最多文件描述符數(shù)目,理論值應(yīng)該是最多打開(kāi)文件數(shù)(系統(tǒng)的值ulimit -n)與nginx進(jìn)程數(shù)相除,但是nginx分配請(qǐng)求并不均勻.#所以建議與ulimit -n的值保持一致。worke

19、r_rlimit_nofile 65535;#工作模式及連接數(shù)上限events use epoll; #epoll是多路復(fù)用IO(I/O Multiplexing)中的一種方式,但是僅用于linux2.6以上內(nèi)核,可以大大提高nginx的性能 worker_connections 102400;#單個(gè)后臺(tái)worker process進(jìn)程的最大并發(fā)鏈接數(shù) (最大連接數(shù)=連接數(shù)*進(jìn)程數(shù)) multi_accept on; #盡可能多的接受請(qǐng)求#設(shè)定http服務(wù)器,利用它的反向代理功能提供負(fù)載均衡支持http #設(shè)定mime類(lèi)型,類(lèi)型由mime.type文件定義 include mime.types

20、; default_type application/octet-stream; #設(shè)定日志格式 access_log /usr/local/nginx/log/nginx/access.log; sendfile on; #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.#autoindex on; #開(kāi)啟目錄列表訪問(wèn),合適下載服務(wù)器,默認(rèn)關(guān)閉。tcp_nopush on; #防止網(wǎng)絡(luò)阻

21、塞keepalive_timeout 60;#keepalive超時(shí)時(shí)間,客戶(hù)端到服務(wù)器端的連接持續(xù)有效時(shí)間,當(dāng)出現(xiàn)對(duì)服務(wù)器的后,繼請(qǐng)求時(shí),keepalive-timeout功能可避免建立或重新建立連接。 tcp_nodelay on; #提高數(shù)據(jù)的實(shí)時(shí)響應(yīng)性 #開(kāi)啟gzip壓縮 gzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.1;gzip_comp_level 2; #壓縮級(jí)別大小,最大為9,值越小,壓縮后比例越小,CPU處理更快。#值越大,消耗CPU比較高。gzip_types text/plain app

22、lication/x-javascript text/css application/xml;gzip_vary on;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í))

23、proxy_buffer_size 4k; #設(shè)置代理服務(wù)器(nginx)保存用戶(hù)頭信息的緩沖區(qū)大小 proxy_buffers 4 32k; #proxy_buffers緩沖區(qū),網(wǎng)頁(yè)平均在32k以下的話(huà),這樣設(shè)置 proxy_busy_buffers_size 64k; #高負(fù)荷下緩沖大?。╬roxy_buffers*2) #設(shè)定請(qǐng)求緩沖 large_client_header_buffers 4 4k;client_header_buffer_size 4k;#客戶(hù)端請(qǐng)求頭部的緩沖區(qū)大小,這個(gè)可以根據(jù)你的系統(tǒng)分頁(yè)大小來(lái)設(shè)置,一般一個(gè)請(qǐng)求的頭部大小不會(huì)超過(guò)1k#不過(guò)由于一般系統(tǒng)分頁(yè)都要大于1

24、k,所以這里設(shè)置為分頁(yè)大小。分頁(yè)大小可以用命令getconf PAGESIZE取得。open_file_cache max=102400 inactive=20s;#這個(gè)將為打開(kāi)文件指定緩存,默認(rèn)是沒(méi)有啟用的,max指定緩存數(shù)量,建議和打開(kāi)文件數(shù)一致,inactive是指經(jīng)過(guò)多長(zhǎng)時(shí)間文件沒(méi)被請(qǐng)求后刪除緩存。open_file_cache_valid 30s;#這個(gè)是指多長(zhǎng)時(shí)間檢查一次緩存的有效信息。open_file_cache_min_uses 1;#open_file_cache指令中的inactive參數(shù)時(shí)間內(nèi)文件的最少使用次數(shù),如果超過(guò)這個(gè)數(shù)字,文件描述符一直是在緩存中打開(kāi)的,如上例,

25、如果有一個(gè)文件在inactive #包含其它配置文件,如自定義的虛擬主機(jī) include vhosts.conf;5. Nginx配置文件精講二#這里為后端服務(wù)器wugk應(yīng)用集群配置,根據(jù)后端實(shí)際情況修改即可,tdt_wugk為負(fù)載均衡名稱(chēng),可以任意指定#但必須跟vhosts.conf虛擬主機(jī)的pass段一致,否則不能轉(zhuǎn)發(fā)后端的請(qǐng)求。weight配置權(quán)重,在fail_timeout內(nèi)檢查max_fails次數(shù),失敗則剔除均衡。upstream tdt_wugk server :8080 weight=1 max_fails=2 fail_timeout=30s;server

26、:8081 weight=1 max_fails=2 fail_timeout=30s; #虛擬主機(jī)配置server #偵聽(tīng)80端口 listen 80; #定義使用訪問(wèn) server_name ; #設(shè)定本虛擬主機(jī)的訪問(wèn)日志 access_log logs/access.log main;root /data/webapps/wugk; #定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置 index index.php index.html index.htm; #定義首頁(yè)索引文件的名稱(chēng) #默認(rèn)請(qǐng)求 location / root /data/www/wugk; #定義服務(wù)器的默認(rèn)網(wǎng)站根目錄

27、位置 index index.php index.html index.htm; #定義首頁(yè)索引文件的名稱(chēng) #以下是一些反向代理的配置. proxy_next_upstream http_502 http_504 error timeout invalid_header; #如果后端的服務(wù)器返回502、504、執(zhí)行超時(shí)等錯(cuò)誤,自動(dòng)將請(qǐng)求轉(zhuǎn)發(fā)到upstream負(fù)載均衡池中的另一臺(tái)服務(wù)器,實(shí)現(xiàn)故障轉(zhuǎn)移。 proxy_redirect off; #后端的Web服務(wù)器可以通過(guò)X-Forwarded-For獲取用戶(hù)真實(shí)IP proxy_set_header Host $host; proxy_set_h

28、eader X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http:/tdt_wugk; #請(qǐng)求轉(zhuǎn)向后端定義的均衡模塊 # 定義錯(cuò)誤提示頁(yè)面error_page 500 502 503 504 /50x.html; location = /50x.html root html; #配置Nginx動(dòng)靜分離,定義的靜態(tài)頁(yè)面直接從Nginx發(fā)布目錄讀取。location .*.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|j

29、s|css)$root /data/www/wugk;#expires定義用戶(hù)瀏覽器緩存的時(shí)間為3天,如果靜態(tài)頁(yè)面不常更新,可以設(shè)置更長(zhǎng),這樣可以節(jié)省帶寬和緩解服務(wù)器的壓力。expires 3d; #PHP腳本請(qǐng)求全部轉(zhuǎn)發(fā)到 FastCGI處理. 使用FastCGI默認(rèn)配置. location .php$ root /root; fastcgi_pass :9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/www/wugk$fastcgi_script_name; include fastcg

30、i_params; #設(shè)定查看Nginx狀態(tài)的地址 location /NginxStatus stub_status on; 6. 實(shí)戰(zhàn)線上Nginx多站點(diǎn)配置在真實(shí)的服務(wù)器環(huán)境,為了充分利用服務(wù)器資源,一臺(tái)nginx web服務(wù)器同時(shí)會(huì)配置N個(gè)虛擬域名主機(jī),即多個(gè)域名對(duì)于同樣一個(gè)80端口。然后服務(wù)器IP數(shù)量很多,也可以配置基于多個(gè)IP對(duì)應(yīng)同一個(gè)端口。vi修改nginx.conf server段配置內(nèi)容如下:#virtual hosts config 2014/5/18server listen 80; server_name ; #access_log logs/host.access.l

31、og main; location / root html/a; index index.html index.htm; server listen 80; server_name ; #access_log logs/host.access.log main; location / root html/b; index index.html index.htm; 創(chuàng)建兩個(gè)不同的目錄mkdir p /usr/local/nginx/html/a,b,然后分別在兩個(gè)目錄創(chuàng)建兩個(gè)不同的index.html網(wǎng)站頁(yè)面即可。通過(guò)客戶(hù)端配置hosts指向兩個(gè)域名,然后在IE瀏覽器訪問(wèn)測(cè)試效果。7. 企業(yè)實(shí)

32、戰(zhàn)Nginx+Tomcat動(dòng)靜分離架構(gòu)Nginx動(dòng)靜分離簡(jiǎn)單來(lái)說(shuō)就是把動(dòng)態(tài)跟靜態(tài)請(qǐng)求分開(kāi),不能理解成只是單純的把動(dòng)態(tài)頁(yè)面和靜態(tài)頁(yè)面物理分離。嚴(yán)格意義上說(shuō)應(yīng)該是動(dòng)態(tài)請(qǐng)求跟靜態(tài)請(qǐng)求分開(kāi),可以理解成使用Nginx處理靜態(tài)頁(yè)面,Tomcat、Resin出來(lái)動(dòng)態(tài)頁(yè)面。動(dòng)靜分離從目前實(shí)現(xiàn)角度來(lái)講大致分為兩種,一種是純粹的把靜態(tài)文件獨(dú)立成單獨(dú)的域名,放在獨(dú)立的服務(wù)器上,也是目前主流推崇的方案;另外一種方法就是動(dòng)態(tài)跟靜態(tài)文件混合在一起發(fā)布,通過(guò)nginx來(lái)分開(kāi)。這樣也是本次課程要講解的,具體怎么來(lái)實(shí)現(xiàn)呢,如下圖,通過(guò)location指定不同的后綴名實(shí)現(xiàn)不同的請(qǐng)求轉(zhuǎn)發(fā)。通過(guò)expires參數(shù)設(shè)置,可以使瀏覽器緩

33、存過(guò)期時(shí)間,減少與服務(wù)器之前的請(qǐng)求和流量。具體Expires定義:是給一個(gè)資源設(shè)定一個(gè)過(guò)期時(shí)間,也就是說(shuō)無(wú)需去服務(wù)端驗(yàn)證,直接通過(guò)瀏覽器自身確認(rèn)是否過(guò)期即可,所以不會(huì)產(chǎn)生額外的流量。此種方法非常適合不經(jīng)常變動(dòng)的資源。(如果經(jīng)常更新的文件,不建議使用Expires來(lái)緩存),我這里設(shè)置3d,表示在這3天之內(nèi)訪問(wèn)這個(gè)URL,發(fā)送一個(gè)請(qǐng)求,比對(duì)服務(wù)器該文件最后更新時(shí)間沒(méi)有變化,則不會(huì)從服務(wù)器抓取,返回狀態(tài)碼304,如果有修改,則直接從服務(wù)器重新下載,返回狀態(tài)碼200。線上Nginx動(dòng)靜分離完整配置(實(shí)際環(huán)境中可以使用,如下為nginx.conf文件內(nèi)容)user www www;worker_proc

34、esses 8;worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;pid /usr/local/nginx/nginx.pid;worker_rlimit_nofile 102400;eventsuse epoll;worker_connections 102400;http include mime.types; default_type application/octet-stream; fastcgi_intercept_errors on; charse

35、t utf-8; server_names_hash_bucket_size 128; client_header_buffer_size 4k; large_client_header_buffers 4 32k; client_max_body_size 300m; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; client_body_buffer_size 512k; proxy_connect_timeout 5; proxy_read_timeout 60; proxy_send_timeout 5

36、; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; 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;log_format mai

37、n '$remote_addr - $remote_user $time_local "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $request_time'upstream jvm_web1 server :8080 weight=1 max_fails=2 fail_timeout=30s; server :8081 weight=1 ma

38、x_fails=2 fail_timeout=30s;upstream jvm_web2 server :8082 weight=1 max_fails=2 fail_timeout=30s; server :8083 weight=1 max_fails=2 fail_timeout=30s;include vhosts.conf;如下為vhosts.conf內(nèi)容:server listen 80; server_name ; index index.jsp index.html index.htm; root /data/webapps/wugk1; l

39、ocation / proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http:/jvm_web1; location .*.(php|jsp|cgi|shtml)?$ proxy_set_header Host $host; p

40、roxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http:/jvm_web1; location .*.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ root /data/webapps/wugk1;expires 30d; access_log /data/logs/jvm_web1/access.log main;error_log /data/logs/jvm_we

41、b1/error.log crit; server listen 80; server_name ; index index.jsp index.html index.htm; root /data/webapps/wugk2; location / proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $pr

42、oxy_add_x_forwarded_for; proxy_pass http:/jvm_web2; location .*.(php|jsp|cgi|shtml)?$ proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http:/jvm_web2; location .*.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|cs

43、s)$ root /data/webapps/wugk2;expires 30d; access_log /data/logs/jvm_web2/access.log main;error_log /data/logs/jvm_web2/error.log crit; 然后在創(chuàng)建如下目錄:mkdir -p /data/logs/jvm_web1,jvm_web2 /data/webapps/wugk1,wugk2配置后端Tomcat服務(wù)器,這里省略哦,分別啟動(dòng)4個(gè)tomcat或者2個(gè)tomcat對(duì)應(yīng)不同的均衡模塊ip和端口即可。最后檢查Nginx配置是否正確即可,然后測(cè)試動(dòng)靜分離是否成功,之需

44、要?jiǎng)h除后端tomcat服務(wù)器上的某個(gè)靜態(tài)文件,查看是否能訪問(wèn),如果可以訪問(wèn)說(shuō)明靜態(tài)資源nginx直接返回了,不走后端tomcat服務(wù)器。8. 企業(yè)實(shí)戰(zhàn)Nginx+PHP(FastCGI)高性能服務(wù)器LNAMP(Linux+Nginx+Apache+Mysql+PHP架構(gòu))CGI全稱(chēng)是“公共網(wǎng)關(guān)接口”(Common Gateway Interface),HTTP服務(wù)器與你的或其它機(jī)器上的程序進(jìn)行“交談”的一種工具,其程序須運(yùn)行在網(wǎng)絡(luò)服務(wù)器上。CGI可以用任何一種語(yǔ)言編寫(xiě),只要這種語(yǔ)言具有標(biāo)準(zhǔn)輸入、輸出和環(huán)境變量。如php,perl,tcl等。FAST-CGI:WEB服務(wù)器與處理程序之間通信的一種

45、協(xié)議(app server 和web server 之間的通信協(xié)議),是CGI的改進(jìn)方案。CGI程序反復(fù)加載是CGI性能低下的主要原因,如果CGI程序保持在內(nèi)存中并接受FastCGI進(jìn)程管理器調(diào)度,則可以提供良好的性能、伸縮性、Fail-Over特性等。FASTCGI是常駐型的CGI,它可以一直運(yùn)行,在請(qǐng)求到達(dá)時(shí),不會(huì)花費(fèi)時(shí)間去fork一個(gè)進(jìn)程來(lái)處理。FastCGI是語(yǔ)言無(wú)關(guān)的、可伸縮架構(gòu)的CGI開(kāi)放擴(kuò)展,將CGI解釋器進(jìn)程保持在內(nèi)存中,以此獲得較高的性能。fastcgi是一個(gè)協(xié)議,php-fpm實(shí)現(xiàn)了這個(gè)協(xié)議,php-fpm的fastcgi協(xié)議需要有進(jìn)程池,php-fpm實(shí)現(xiàn)的fastcgi

46、進(jìn)程叫php-cgi,所以php-fpm其實(shí)是他自身的fastcgi或php-cgi進(jìn)程管理器。Nginx+FastCGI安裝配置:1) 下載安裝并編譯PHPwget yum -y install gd curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel mysql mysql-devel2) 進(jìn)入php目錄進(jìn)行編譯安裝:cd php-5.3.10./configure -prefix=/usr/local/php5 -enable-fpm

47、 -enable-debug -with-gd -with-jpeg-dir -with-png-dir -with-freetype-dir -enable-mbstring -with-curl -with-mysql=/usr/bin/mysql -with-mysqli=/usr/bin/mysql_configmake && make installcp php.ini-development /usr/local/php5/lib/php.inicp /usr/local/php5/etc/php-fpm.conf.default/usr/local/php5/et

48、c/php-fpm.conf/usr/local/php5/sbin/php-fpm cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm3) Nginx配置文件設(shè)置:server include port.conf; server_name ; location / index index.html index.php; root /usr/local/nginx/html; location .php$ root html; fastcgi_pass :9000; fastcgi_index index.php; fastcgi_p

49、aram SCRIPT_FILENAME html$fastcgi_script_name; include fastcgi_params; 4) 測(cè)試Nginx+PHP整合結(jié)果9. Nginx與Tomcat/PHP架構(gòu)優(yōu)化PHP性能優(yōu)化一般我們是在/usr/local/php5/etc/php-fpm.conf這個(gè)文件里面進(jìn)行相應(yīng)的配置。1) 如果設(shè)置成static,php-fpm進(jìn)程數(shù)自始至終都是pm.max_children指定的數(shù)量,不再增加或減少。2) 如果設(shè)置成dynamic,則php-fpm進(jìn)程數(shù)是動(dòng)態(tài)的,最開(kāi)始是pm.start_servers指定的數(shù)量,如果請(qǐng)求較多,則會(huì)自動(dòng)

50、增加,保證空閑的進(jìn)程數(shù)不小于pm.min_spare_servers,如果進(jìn)程數(shù)較多,也會(huì)進(jìn)行相應(yīng)清理,保證多余的進(jìn)程數(shù)不多于pm.max_spare_servers。這兩種不同的進(jìn)程管理方式,可以根據(jù)服務(wù)器的實(shí)際需求來(lái)進(jìn)行調(diào)整。這里先說(shuō)一下涉及到這個(gè)的幾個(gè)參數(shù),他們分別是pm、pm.max_children、pm.start_servers、pm.min_spare_servers和pm.max_spare_servers。Pm 表示使用那種方式,有兩個(gè)值可以選擇,就是static(靜態(tài))或者dynamic(動(dòng)態(tài))。在更老一些的版本中,dynamic被稱(chēng)作apache-like。這個(gè)要注意看

51、配置文件的說(shuō)明。下面4個(gè)參數(shù)的含義:pm.max_children:靜態(tài)方式下開(kāi)啟的php-fpm進(jìn)程數(shù)量。pm.start_servers:動(dòng)態(tài)方式下的起始php-fpm進(jìn)程數(shù)量。pm.min_spare_servers:動(dòng)態(tài)方式下的最小php-fpm進(jìn)程數(shù)量。pm.max_spare_servers:動(dòng)態(tài)方式下的最大php-fpm進(jìn)程數(shù)量。如果dm設(shè)置為static,那么其實(shí)只有pm.max_children這個(gè)參數(shù)生效。系統(tǒng)會(huì)開(kāi)啟設(shè)置數(shù)量的php-fpm進(jìn)程。如果dm設(shè)置為dynamic,那么pm.max_children參數(shù)失效,后面3個(gè)參數(shù)生效。系統(tǒng)會(huì)在php-fpm運(yùn)行開(kāi)始的時(shí)候啟

52、動(dòng)pm.start_servers個(gè)php-fpm進(jìn)程,然后根據(jù)系統(tǒng)的需求動(dòng)態(tài)在pm.min_spare_servers和pm.max_spare_servers之間調(diào)整php-fpm進(jìn)程數(shù)。其他優(yōu)化方法:1. Compile PHPs modules as less as possible, the simple the best (fast); 盡量少安裝PHP模塊,最簡(jiǎn)單是最好(快)的2. Increas PHP FastCGI child number to 100 and even more. Sometime, 200 is OK! ( On 4GB memory server); 2G把你的PHP FastCGI子進(jìn)程數(shù)調(diào)到100或以上,在4G內(nèi)存的服務(wù)器上200就可以(建議壓力測(cè)試來(lái)得出自己服務(wù)器合理的值)3. Using SOCKET PHP FastCGI, and put into /dev/

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論