Nginx+Squid+php-fpm整合與配置

來自Kearney,轉載請註明出處。http://my.oschina.net/kear/blog/80505 php

好久沒本身寫技術類的東西了,跟你們分享一下今天整合Nginx、Squid和php-fpm的心得。 html

總體架構大體以下: 前端

Client -> Squid(反向代理) -> Nginx(反向代理) -> php-fpm(Server) nginx

首現呢,版本以下: shell

Linux: x86_64 CentOS release 6.2(Final) 瀏覽器

Squid cache: 3.1.10 緩存

Nginx: Tengine/1.4.0(nginx/1.2.3) 架構

php-fpm: PHP 5.4.6(fpm-fcgi) php-fpm

Zend Engine: v2.4.0 網站

在總體架構上,傳統有兩種模式,一種呢,是


Client -> Squid(反向代理) -> Nginx(反向代理) -> php-fpm(Server)


另外一種呢,是


Client -> Nginx(反向代理) -> Squid(反向代理) ->php-fpm(Server)


 

兩種方法各有利弊,具體差異能夠在網上查詢。簡單打個比方,靜態圖片站適合用第一種,BBS網站適合用第二種。

還有Hybrid,即混合模式,大概的樣子是 


Client -> Nginx(反向代理) -> Squid(反向代理) -> Nginx(中間層) ->Server


這裏只介紹Squid在最前端的方式的配置方法,請諒解,什麼其餘問題留言商討。


PHP-FPM

安裝好php,找到php自帶的php-fpm,我們先讓php-fpm服務跑起來,讓最終工做的服務先運行起來。


find / -name php-fpm



好比結果爲:/home/work/local/php-5.4.6/sbin/php-fpm

而後進入該 php-5.4.6 文件夾裏,進入/home/work/local/php-5.4.6/etc/php-fpm.conf

搜索listen,改成listen = 127.0.0.1:9000 #127.0.0.1爲該服務的ip地址,9000爲服務端口,保存。

而後運行/home/work/local/php-5.4.6/sbin/php-fpm,php-fpm服務就運行起來了。


Squid配置以下:

既然squid要作反向代理的入口,即做爲Nginx的上游,那麼在squid.conf中就要加上一句話:


#其中80是Squid監聽端口,Http默認80端口,爲了讓Squid服務對用戶透明,就指定爲80端口
http_port 80 vhost vport
#10.207.16.257爲Nginx服務的IP地址,後面的8080是Nginx服務的端口
cache_peer 10.207.16.251 parent 8080 0 no-digest no-query originserver


其餘Squid配置則爲默認,不須要太大改動,修改完後使用Squid -k parse進行conf配置文件檢驗,沒有問題則運行 squid,(squid路徑/squid)端口爲上面指定的80端口,到此爲止,squid配置完成。

而後運行squid,


squid -z
squid


新版3.x, 必定要先運行suqid -z,初始化緩存目錄,具體如何設置緩存目錄和大小,這裏就不詳細解說啦~


而後輸入squid運行,若是以前沒有-z,那麼服務啓動後是有問題的(看成不能用吧)。



Nginx配置以下:

進入Nginx的配置文件nginx.conf,找到以下位置:

server {

          listen       8080;

          server_name  localhost;

          index index.php index.html index.htm; 

          root /home/kaikai/html; 

          location / { 

              root   /home/kaikai/html;

              index index.php index.html index.htm;

          }  

加紅位置爲着重注意的地方,root爲nginx默認讀取的路徑,index之類的爲nginx默認解析的文件。


在Nginx得到*.php文件後,須要把該文件拋給php解釋器去執行,固然這裏的php解釋器爲php-fpm(一種fast cgi,相比spwan-cgi能好一些吧)。

那麼,這時候就要配置Nginx遇到*.php該怎麼辦的部分了,以下:


location ~ \.php$ {

              root           /home/kaikai/html;

              fastcgi_pass   127.0.0.1:9000;

              fastcgi_index  index.php;               

              fastcgi_param  SCRIPT_FILENAME /home/kaikai/html$fastcgi_script_name; 

              #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

              include fastcgi_params;

              if ($request_uri ~ "^(.*)(\?.*)$") {

                  set $path_info $1;

              }

              fastcgi_param PATH_INFO $path_info;set $path_info $request_uri;

}

一樣,紅色位置爲重要部分,其餘地方可複製粘貼便可。其中,fastcgi_pass 爲php-fpm服務運行的地址和端口,

fastcgi_index 爲php-fpm默認解析的文件。

/home/kaikai/html爲nginx下默認訪問文件夾(即工程文件)。

這樣呢,基本的整合就完成了。打開瀏覽器,輸入http://localhost 就能直接訪問Nginx了~(前面的Squid緩存對用戶透明咯~用戶發現不到哦)。

大概就這樣啦~謝謝。

Tips:若是出現如下信息,

2012/11/09 11:39:53| WARNING: Could not determine this machines public hostname. Please configure one or set 'visible_hostname'.  WARNING: Could not determine this machines public hostname. Please configure one or set 'visible_hostname'2012/11/09 11:40:08| WARNING: Could not determine this machines public hostname. Please configure one or set 'visible_hostname'. 在squid.conf里加上visible_hostname squid.server.commm  這句話就好了。

相關文章
相關標籤/搜索