nginx调⽤php-fpm出错解决⽅法和nginx配置详解
装完了nginx和php-5.5,配置好了nginx调⽤php后,就开始启动php-fpm。
使⽤下⾯的命令
复制代码代码如下:
/usr/local/php/sbin/php-fpm
就可以启动了。
在nginx的⽬录中创建个php的检测脚本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;
可以出现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后,修改配置⽂件
vi /EBS/php/f
需要注意下⾯⼏处配置
<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 重新加载php的php.ini
logrotate 重新启⽤log⽂件
也就是说,在修改了php.ini之后,我们可以使⽤
nginx部署前端项目/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
{
pes;
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 ^/(.*)([^/])$ $host/$1$2/ permanent;
}
location ~ .*\.php?$
{
f
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/f
注: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-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.slots = 8K
<_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.cacher = On
xcache.stat = On
xcache.optimizer = Off
[verager]
5、重启PHP模块
正常load之后,
在phpinfo显出的信息内
Zend这快应该会加上XCache的内容
6、另外两种加速模块:
在我们的测试中,效果都要好于xcache,这3中加速不能同时存在两种,有冲突。
6.1 apc
复制代码代码如下:
wget pecl.php/get/APC-3.
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 bart.eaccelerator/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.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"
eacceleratorpress="1"
eacceleratorpress_level="9"
五、使⽤nginx对应多台facgi服务器
思路:前端⼀台nginx,⽤于做为负载均衡和处理静态页⾯。利⽤nginx的upstream模块来将php请求分发到后段的php-fpm服务器上。
后端多台php-fpm的服务器,只起php-fpm服务来处理php。
这样做减少了php-fpm上的nginx服务,相当于少了⼀层。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论