这两天需要在Ubuntu14.04上搭建nginx和php的环境,配置的过程中在fastcgi的问题上花了很多时间,网上的资料大多年久失修,于是决定将整个过程记录下来,分享给大家。
准备:apt-get update
1. 安装nginx并启动apt-get install nginxsudo /etc/init.d/nginx start
2. 安装php及相关sudo apt-get install php5-cli php5-cgi php5-fpm php5-mcrypt php5-mysql
3. FastCGI在运行php站点之前需要先了解下FastCGI,FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口,它采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,当HTTP服务器遇到动态请求时,会将请求转发给FastCGI进程,FastCGI进程执行动态脚本后再将结果返回给HTTP服务器,HTTP服务器最后将结果返回给浏览器,这在很大程度上提高了请求的响应速度。
实现FastCGI有几种方式,PHP-CGI、PHP-FPM、Spawn-FCGIPHP-CGI是PHP自带的FastCGI管理器,启动PHP-CGI可以使用如下命令:php-cgi -b 127.0.0.1:9000PHP-CGI有两个问题,一是变更php.ini后需要重启php-cgi才能生效,二是php-cgi进程崩溃或者被杀死后php就不能运行了。
PHP-FPM是从PHP 5.3.3之后新加入的CGI管理器,在更改PHP配置之后不需要重启,且由于加入了守护进程,所以即使被杀死之后也能快速重启。
Spawn-FCGI是一个通用的FastCGI管理器,而不仅仅只针对PHP一种脚本语言。但它在效率、CPU占用等方面都不如PHP-FPM。
4. PHP-FPM既然PHP-FPM的方式最好,那么我们现在就来配置一下。由于PHP-FPM是一个独立的进程,所以需要与Nginx进行通信。目前有两种通信方式,tcp和socket。两种方式的区别和配置方式可以参见这两篇文章:nginx 和 php-fpm 通信使用unix socket还是TCP,及其配置Php-fpm TcpSocket vs UnixSocket
在这里简要说一下配置方式,两种方式都主要修改nginx的配置文件(/etc/nginx/sites-available/default)和fpm的配置文件(/etc/php5/fpm/pool.d/www.conf)。
TCP配置方式需要将nginx配置文件中相应的反向代理的fastcgi_pass参数改为127.0.0.1:9000,将fpm配置文件中的listen参数修改为127.0.0.1:9000。
Socket配置方式需要将nginx配置文件中相应的反向代理的fastcgi_pass参数改为unix:/dev/shm/fpm-cgi.sock,将fpm配置文件中的listen参数修改为/dev/shm/fpm-cgi.sock,如果考虑到高并发可以将listen.backlog参数改为-1,内存积压无限大。另外,还可以提高内核级别的并发连接数,修改/etc/sysctl.conf:sudo echo 'net.core.somaxconn = 2048' >> /etc/sysctl.confsudo sysctl -p
两种配置方式修改完之后都需要重启php-fpm和nginx。sudo service php5-fpm restartsudo /etc/init.d/nginx reload
5. 运行php站点以上配置完成之后,我们就可以写一个简单的html' target='_blank'>php页面来测试一下。创建一个网站目录:sudo mkdir /var/www/
在nginx配置文件中修改root目录为 root /var/www;添加一个测试页面:sudo vi /var/www/test.php
加入以下代码:<?php phpinfo();?>
此时在浏览器输入地址http://localhost/test.php,就可以看到php的信息了。
常用命令:1. 检查nginx启动出错sudo nginx -c /etc/nginx/nginx.conf -t
如果大家觉得对自己有帮助的话,还希望能帮顶一下,谢谢:)
个人博客:http://blog.csdn.net/zhaoxy2850
本文地址:http://blog.csdn.net/zhaoxy_thu/article/details/41851389
转载请注明出处,谢谢!
PHP编程 郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。