Nginx+PHP-FPM的组合是目前生产环境中最主流的php网站的选择。
PHP-FPM是一个PHP FastCGI进程管理器。对于熟悉Java的人来说,可以把php-fpm想象成php程序的容器,就像Tomcat是servlet的容器一样。网上对这种(前端静态web服务器+后端php-fpm)的组合技术有如下的描述:
- FastCGI是一个可伸缩的,高速地在web server和脚本语言间交互的接口。
- FastCGI的主要优点是把动态语言和web server分离开来。这种技术允许把web server和动态语言运行在不同的主机上,以大规模扩展和改进安全性而不损失生产效率。
- php-fpm可以和任何支持远端FastCGI的web server工作。
这种架构下,对前端负责静态内容的Web服务器的要求就变成越轻量越好。自从nginx出现以后,很快在生产环境下取代功能丰富的Apache服务器而成为流行的Web服务器。其中的主要原因应该是Apache的多数功能都用不上,反而在性能上成了累赘。
其他的php应用方式:
- Apache+CGI方式:最古老的方式,基本上没有什么人在用了。
- Apache+mod_php:php模块方式,仍然是目前常见的方式,也是很多应用的默认安装方式。推荐开发环境使用该方式,简单可靠。
- Lighttp+Spawn-fcgi:原理和类似Nginx+php-fpm类似,很多网站管理员也比较喜欢这个组合。
以下整理一下CentOS下Nginx+PHP-FPM的安装过程。
一、使用Yum方式安装nginx服务
如果有特殊需求的话,推荐使用源代码编译安装的方式
由于ngix不包含在默认的软件仓库里,需要接入nginx的rpm库。
#rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
#yum install nginx
二、Yum方式安装PHP, MySQL数据库以及常用php模块
#yum -y install mysql mysql-server php-mysql php-mcrypt php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc mysql-connector-odbc mysql-devel libdbi-dbd-mysql
三、安装php-fpm服务器
#yum -y install php-fpm
修改php-fpm的启动用户及组
#vi /etc/php-fpm.d/www.conf`
第39及41行,修改用户和组为nginx。(原来为apache)
修改服务器端口为Unix Socket。
listen = /var/run/php-fpm/php-fpm.sock
四、启动php-fpm服务
#service php-fpm start
设置php-fpm服务自动启动
#chkconfig php-fpm on
五、在nginx下配置一个php网站:
编辑文件:vi /etc/nginx/conf.d/mywebsite.conf
server {
listen 80;
server_name www.mywebsite.com;
#可以自定义log输出位置
#access_log /var/log/nginx/log/host.access.log main;
location / {
# 网站代码目录
root /www/mywebiste;
index index.html index.htm index.php index.py;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
# 这种方式是将php请求转发至apache服务器
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
# php网站代码目录
root /www/mywebsite;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
六、启动nginx服务器
#service nginx start
设置自动启动
#chkconfig nginx on
七、 测试php网站
在/www/mywebsite/目录下创建test.php
<?php
phpinfo();
?>
在浏览器里查看是否正确执行。