一、阿里云Linux整合Nginx和PHP
1、nginx和php
nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给
php解释器
处理,并把结果返回给客户端。
nginx一般是把请求发fastcgi管理进程
处理,fascgi管理进程选择cgi子进程
处理结果并返回,本文以php-fpm
为例介绍如何使nginx支持PHP
PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download 下载得到.
PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
新版PHP已经集成php-fpm了,不再是第三方的包了,推荐使用。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进
程、可以平滑重载PHP配置,比spawn-fcgi
具有更多优点,所以被PHP官方收录了。在./configure的时候带–enable-fpm
参数即
可开启PHP-FPM,其它参数都是配置php的,具体选项含义可以查看这里。
2、拷贝配置文件
cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
cd php源码目录
cp php.ini-development /usr/local/php/etc/php.ini
3、开启php解析
修改nginx配置文件以支持php-fpm vi /usr/local/nginx/conf/ngnix.conf
,在server段里注释打开以下代码
4、开启php-fpm
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php-fpm.conf
[25-Aug-2017 01:12:36] WARNING: Nothing matches the include pattern '/usr/local/php/etc/php-fpm.d/*.conf' from /usr/local/php/etc/php-fpm.conf at line 125.
[25-Aug-2017 01:12:36] ERROR: No pool defined. at least one pool section must be specified in config file
[25-Aug-2017 01:12:36] ERROR: failed to post process the configuration
[25-Aug-2017 01:12:36] ERROR: FPM initialization failed
报错找不到配置文件,然后我们进入目录拷贝配置文件
cd usr/local/php/etc/php-fpm.d
cp www.conf.default www.conf
重新开启报错
[25-Aug-2017 01:36:36] ERROR: [pool www] cannot get gid for group 'nobody'
[25-Aug-2017 01:36:36] ERROR: FPM initialization failed
添加用户组 groupadd nobody,再次开启成功 查看监听端口状态 netstat -atunlp
5、修改nginx配置
打开/usr/local/nginx/conf/nginx.conf
$document_root这个参数是有root参数来设定的,所有我们要修改下把/scripts修改为$document_root既指向站点根目录
重启nginx
注意 :如果您没有修改/scripts这个地方是访问不了的如果您没有修改/scripts这个地方是访问不了的
6、浏览器访问
在/home/www/default
目录创建phpinfo.php文件
<?php
phpinfo();
?>
打开浏览器查看php是否能解析网页
如果看到这里,恭喜你!说明nginx和php已经整合成功了!
注意修改 php.ini后要记得重启 php-fpm
7、php-fpm重启
执行 kill -USR2 cat /usr/local/php/var/run/php-fpm.pid
报错
cat: /usr/local/php/var/run/php-fpm.pid: No such file or directory
php-fpm.pid文件需要到到php-fpm.conf配置文件里面打开,顺便把php-fpm.log也打开
[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
; Default Value: none
pid = run/php-fpm.pid
; Error log file
; If it's set to "syslog", log is sent to syslogd instead of being written
; into a local file.
; Note: the default prefix is /usr/local/php/var
; Default Value: log/php-fpm.log
error_log = log/php-fpm.log
查看php-fpm进程
root@william:~# ps aux | grep 'php-fpm'
root 25332 0.0 0.7 162524 7756 ? Ss Aug25 0:01 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nobody 25333 0.0 1.3 162588 13372 ? S Aug25 0:00 php-fpm: pool www
nobody 25334 0.0 1.1 162588 11596 ? S Aug25 0:00 php-fpm: pool www
root 26770 0.0 0.0 14224 932 pts/2 S+ 10:07 0:00 grep --color=auto php-fpm
简单的重启方式 kill -USR2 25333
便会生成php-fpm.pid文件,下次就可以使用以下命令重启,关闭php-fpm了:
kill -INT `cat /usr/local/php/var/run/php-fpm.pid` #关闭
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid` #重启
cat /usr/local/php/var/run/php-fpm.pid
输出的就是进程ID
php-fpm常用命令
kill -INT PID
INT, TERM:立刻终止
QUIT:平滑终止
USR1:重新打开日志文件
USR2:平滑重载所有worker进程并重新载入配置和二进制模块
查看php-fpm进程数:
ps aux | grep -c php-fpm
7、添加一个软连接:ln -s /usr/local/php/etc/php.ini /etc/php.ini
本文作者: William
本文链接: http://www.williamwqq.site/2017/08/24/integrate-nginx-php/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议 。转载请注明出处!