Nginx+Squid+php-fpm整合與配置
很久沒自己寫技術類的東西了,跟大家分享一下今天整合Nginx、Squid和php-fpm的心得。
整體架構大致如下:
Client -> Squid(反向代理) -> Nginx(反向代理) -> php-fpm(Server)
首現呢,版本如下:
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)
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緩存對用戶透明咯~用戶發現不到哦)。
大概就這樣啦~謝謝。