来自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,找到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要作反向代理的入口,即做为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
而后输入squid运行,若是以前没有-z,那么服务启动后是有问题的(看成不能用吧)。
进入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 这句话就好了。