微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决php fpm出错问题

PHP fpm出错的解决办法:1、在Nginx的目录中创建个PHP的检测脚本index.PHP;2、找到Nginx加载PHP配置的部分;3、修改路径即可。

本文操作环境:linux5.9.8系统、PHP5.5版、Dell G3电脑。

如何解决PHP fpm出错问题?

Nginx调用PHP-fpm出错解决方法Nginx配置详解

这篇文章介绍了Nginx调用PHP-fpm出错的解决方法,最后给出了Nginx配置方法,需要的朋友可以参考下

装完了NginxPHP-5.5,配置好了Nginx调用PHP后,就开始启动PHP-fpm。

使用下面的命令

代码如下:

/usr/local/PHP/sbin/PHP-fpm

就可以启动了。

Nginx的目录中创建个PHP的检测脚本index.PHP

结果在打开http://localhost/index.PHP

悲剧的发现居然无法打开 。查看日志文件,看了下报错原因

代码如下:

2013/07/01 22:34:26 [error] 3214#0: *64 FastCGI sent in stderr: Primary script unkNown while reading response header from upstream, client: 192.168.168.19, server: localhost, request: GET /index.PHP HTTP/1.1, upstream: fastcgi://127.0.0.1:9000, host: 192.168.168.140

查看下端口 。看到PHP-fpm的9000端口已经打开了,说明PHP-fpm是没什么问题的,问题出在了Nginx上了。可能是我的配置文件有问题。

找到Nginx加载PHP配置的那块。另外参考了下网上Nginx配置文件

在第69行有一个调用脚本路径

代码如下:

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

我把路径改下,改成下面的就可以了。

代码如下:

 fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
http://localhost/index.PHP

可以出现PHP的版本信息了。

大家还可以参考下面的配置方法

PHP-fpm不用再依赖其它的fastcgi启动器,比如lighttpd的spawn-fcgi。

PHP-fpm的使用非常方便,配置都是在PHP-fpm.ini的文件

而启动,重启都可以从PHP/sbin/PHP-fpm中进行

更方便的是修改PHP.ini后可以直接使用PHP-fpm reload进行加载 无需杀掉进程就可以完成PHP.ini的修改加载

结果显示使用PHP-fpm可以使PHP有不小的性能提升

PHP-fpm控制的进程.cpu回收的速度比较慢.内存分配的很均匀

而spawn-cgi控制的进程cpu下降的很快.而内存分配的比较不均匀.

有很多进程似乎未分配到,而另外一些却占用很高.

可能是由于进程任务分配的不均匀导致的.而这也导致了总体响应速度的下降

PHP-fpm合理的分配.导致总体响应的提到以及任务的平均

使用PHP-fpm需要在PHP源码上打补丁,然后重新编译PHP

一.下载PHP-fpm

wget http://cn.PHP.net/get/PHP-5.2.8.tar.gz/from/www.PHP.net/mirror
wget http://PHP-fpm.anight.org/downloads/head/PHP-5.2.8-fpm-0.5.10.diff.gz

PHP-5.2.9在同一级目录

gzip -cd PHP-5.2.8-fpm-0.5.10.diff.gz | patch -d PHP-5.2.9 -p1

补丁打好以后,编译PHP的时候增加了下面几个参数:

–enable-fpm 激活fastcgi模式的fpm支持

–with-fpm-conf PHP-fpm的配置文件认是PREFIX/etc/PHP-fpm.conf)

–with-fpm-log PHP-fpm的日志文件认是PREFIX/logs/PHP-fpm.log)

–with-fpm-pid PHP-fpm的pid文件认是PREFIX/logs/PHP-fpm.pid)
./configure --prefix=/EBS/PHP \
--with-config-file-path=/EBS/PHP/etc \
--enable-fastcgi \
--enable-fpm \
--OTHERS

注:--enable-fastcgi \ 需要在--enable-fpm \的前面,否则,fpm不能编译上。

二.编译好PHP后,修改配置文件

vi /EBS/PHP/etc/PHP-fpm.conf

需要注意下面几处配置

<value name=listen_address>127.0.0.1:9000</value>

这个表示PHP的fastcgi进程监听的ip地址以及端口

<value name=user>nobody</value>
<value name=group>nobody</value>

表示PHP的fastcgi进程以什么用户以及用户组来运行,认该行是注释掉的,需要打开

<value name=display_errors>0</value>

是否显示PHP错误信息

<value name=max_children>5</value>

最大的子进程数目

运行PHP-fpm:

PHP-fpm用一个程序来控制fastcgi进程,这个文件在$PREFIX/sbin/PHP-fpm

/usr/local/PHP/sbin/PHP-fpm

该程序有如下参数:

start 启动PHP的fastcgi进程

stop 强制终止PHP的fastcgi进程

quit 平滑终止PHP的fastcgi进程

restart 重启PHP的fastcgi进程

reload 重新加载PHPPHP.ini

logrotate 重新启用log文件

也就是说,在修改PHP.ini之后,我们可以使用

/usr/local/PHP/sbin/PHP-fpm reload

这样,就保持了在PHP的fastcgi进程持续运行的状态下,又重新加载了PHP.ini。

代码如下:

user www www;
worker_processes 10;
error_log logs/error.log notice;
pid logs/Nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
   use epoll;
   worker_connections 51200;
}
http
{
   include mime.types;
   default_type application/octet-stream;
   charset gb2312;
   server_names_hash_bucket_size 128;
   #sendfile on;
   #tcp_nopush on;
   keepalive_timeout 60;
   tcp_nodelay on;
   gzip on;
   gzip_min_length 1k;
   gzip_buffers 4 8k;
   gzip_http_version 1.1;
   gzip_types text/plain application/x-javascript text/css text/html application/xml;
   {
   listen 80;
   server_name 192.168.1.2;
   index index.html index.htm index.PHP;
   root /EBS/www;
   if (-d $request_filename)
   {
   rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
   }
   location ~ .*\.PHP?$
   {
   include fcgi.conf
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.PHP;
   }
   log_format access '$remote_addr - $remote_user [$time_local] $request '
   '$status $body_bytes_sent $http_referer '
   '$http_user_agent $http_x_forwarded_for';
   access_log logs/access.log access;
   }
}

新建配置文件

代码如下:

/usr/local/Nginx/conf/fcgi.conf

注:Nginx自带一个配置文件,/usr/local/Nginx/conf/fastcgi_params,该配置文件缺少粗体字体的部分,会造成访问PHP文件时报404错误

复制代码代码如下:

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE Nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
#fastcgi_param REDIRECT_STATUS 200;

四 配置XCache

1、安装xcache模块

wgethttp://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz
tar -xvzf xcache-1.2.2.tar.gz
cd xcache-1.2.2
/usr/local/PHP/bin/PHPize
./configure --with-PHP-config=/usr/local/PHP/bin/PHP-config --enable-xcache --enable-xcache-optimizer
make
make install

2、计算密码的md5值

echo -n password|md5sum
5f4dcc3b5aa765d61d8327deb882cf99

3、配置XCache

;注:zend_extension,用来加载zend的扩展,是绝对路径, extension是相对路径,相对于extension_dir的相对路径,非zend扩展

如果你更改路径以后,一定要apachectl stop后再start,而不要restart。

vi /usr/local/PHP/etc/PHP.ini

添加

代码如下:

[xcache-common]
zend_extension = /usr/local/PHP/lib/PHP/extensions/no-debug-non-zts-20060613/xcache.so
[xcache.admin]
; Change xcache.admin.user to your preferred login name
xcache.admin.user = admin
; Change xcache.admin.pass to the MD5 fingerprint of your password
; Use md5 -s your_secret_password to find the fingerprint
xcache.admin.pass = 5f4dcc3b5aa765d61d8327deb882cf99
[xcache]
; Change xcache.size to tune the size of the opcode cache
xcache.size = 24M
xcache.shm_scheme = mmap
xcache.count = 2
xcache.slots = 8K
xcache.ttl = 0
xcache.gc_interval = 0
; Change xcache.var_size to adjust the size of variable cache
xcache.var_size = 8M
xcache.var_count = 1
xcache.var_slots = 8K
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
xcache.test = Off
xcache.readonly_protection = On
xcache.mmap_path = /tmp/xcache
xcache.coredump_directory = 
xcache.cacher = On
xcache.stat = On
xcache.optimizer = Off
[xcache.coverager]
xcache.coverager = On
xcache.coveragedump_directory = 

5、重启PHP模块

正常load之后,

PHPinfo显出的信息内

Zend这快应该会加上XCache的内容

6、另外两种加速模块:

在我们的测试中,效果都要好于xcache,这3中加速不能同时存在两种,有冲突。

6.1 apc

代码如下:

wget http://pecl.PHP.net/get/APC-3.0.19.tgz
cd APC-3.0.19
/usr/local/PHP/bin/PHPize
./configure --enable-apc --enable-apc-mmap --with-apxs=/EBS/apache/bin/apxs --with-PHP-config=/EBS/PHP/bin/PHP-config
make
make install
6.2 eaccelerator
wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.zip
cd eaccelerator-0.9.5.3
/usr/local/PHP/bin/PHPize
./configure --enable-eaccelerator=shared --with-PHP-config=/EBS/PHP/bin/PHP-config
make
make install
vi PHP.ini
zend_extension=/usr/local/PHP/lib/PHP/extensions/no-debug-non-zts-20060613/eaccelerator.so
eaccelerator.shm_size=16
eaccelerator.cache_dir=/tmp/eaccelerator
eaccelerator.enable=1
eaccelerator.optimizer=1
eaccelerator.check_mtime=1
eaccelerator.debug=0
eaccelerator.filter=
eaccelerator.shm_max=0
eaccelerator.shm_ttl=0
eaccelerator.shm_prune_period=0
eaccelerator.shm_only=0
eaccelerator.compress=1
eaccelerator.compress_level=9

五、使用Nginx对应多台facgi服务器

思路:前端一台Nginx,用于做为负载均衡和处理静态页面。利用Nginx的upstream模块来将PHP请求分发到后段的PHP-fpm服务器上。

后端多台PHP-fpm的服务器,只起PHP-fpm服务来处理PHP

这样做减少了PHP-fpm上的Nginx服务,相当于少了一层。

推荐学习:《PHP教程

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐