PS:近來有幾個剛使用nginx的新童鞋老問我,nginx+fastcgi不夠穩定,偶爾出現502錯誤,怎麼解決?本人使用nginx也有3年多了,也認爲php-fpm模 塊不夠穩定,在訪問量不大的時候沒事,訪問量增大時易出現502,固然這個還跟nginx的一些緩存設置和超時設置有關,設置不合理就易出現。php- fpm動態生成大型頁面也沒有優點,有時候會使php-cgi進程變成殭屍進程。聽說php 5.4版本已自帶php-fpm模塊,穩定性是否有改進?太新還沒用過,不評論。其實本人比較喜歡nginx跑靜態和作負載反向代理,動態php仍是交給apache處理比較穩定,jsp就交給tomcat、resin或jboss。nginx跑靜態的能力是無與倫比的,是目前web服務器裏最強的。nginx和apache、tomcat、resin的動靜分離配置其實很簡單,就幾句配置,穩定性也很是好。php
一、nginx和apache的動靜分離配置:css
把下面配置放到nginx配置文件相應的server { }裏面,若是使用其餘端口號,改一下就行:
html
#全部php的動態頁面均交由apache處理
location ~ .(php)?$ {
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://127.0.0.1:88;
}
#全部靜態文件由nginx直接讀取不通過apache
location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
{ expires 15d; }
location ~ .*.(js|css)?$
{ expires 1h; }
若是以前設置了FastCGI的,把下面的配置註釋掉:
nginx
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ .php$ {
# root /var/www/html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# include fastcgi.conf;
#}
重啓nginx就生效,如圖所示,標頭顯示nginx,phpinfo裏面顯示是apache,說明動靜分離生效。
web
二、nginx和tomcat、resin的動靜分離配置:apache
同上,把下面配置放到nginx配置文件相應的server { }裏面:
緩存
#全部jsp的頁面均交由tomcat或resin處理
location ~ .(jsp|jspx|do)?$ {
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://127.0.0.1:8080;
}
#全部靜態文件由nginx直接讀取不通過resin
location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
{ expires 15d; }
location ~ .*.(js|css)?$
{ expires 1h; }
更多的nginx配置和模塊詳解請參考官方wiki:http://wiki.nginx.org/Maintomcat