新聞中心
本文操作環(huán)境:linux5.9.8系統(tǒng)、php5.5版、Dell G3電腦。

創(chuàng)新互聯(lián)建站專注于貴港網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供貴港營銷型網(wǎng)站建設(shè),貴港網(wǎng)站制作、貴港網(wǎng)頁設(shè)計(jì)、貴港網(wǎng)站官網(wǎng)定制、微信小程序定制開發(fā)服務(wù),打造貴港網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供貴港網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
如何解決php fpm出錯(cuò)問題?
nginx調(diào)用php-fpm出錯(cuò)解決方法和nginx配置詳解
這篇文章介紹了nginx調(diào)用php-fpm出錯(cuò)的解決方法,最后給出了nginx配置方法,需要的朋友可以參考下
裝完了nginx和php-5.5,配置好了nginx調(diào)用php后,就開始啟動(dòng)php-fpm。
使用下面的命令
代碼如下:
/usr/local/php/sbin/php-fpm
就可以啟動(dòng)了。
在nginx的目錄中創(chuàng)建個(gè)php的檢測腳本index.php
結(jié)果在打開http://localhost/index.php
悲劇的發(fā)現(xiàn)居然無法打開 。查看日志文件,看了下報(bào)錯(cuò)原因
代碼如下:
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"
查看下端口 ??吹絧hp-fpm的9000端口已經(jīng)打開了,說明php-fpm是沒什么問題的,問題出在了nginx上了。可能是我的配置文件有問題。
找到nginx加載php配置的那塊。另外參考了下網(wǎng)上nginx的配置文件。
在第69行有一個(gè)調(diào)用腳本路徑
代碼如下:
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
我把路徑改下,改成下面的就可以了。
代碼如下:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; http://localhost/index.php
可以出現(xiàn)php的版本信息了。
大家還可以參考下面的配置方法
php-fpm不用再依賴其它的fastcgi啟動(dòng)器,比如lighttpd的spawn-fcgi。
php-fpm的使用非常方便,配置都是在php-fpm.ini的文件內(nèi)
而啟動(dòng),重啟都可以從php/sbin/php-fpm中進(jìn)行
更方便的是修改php.ini后可以直接使用php-fpm reload進(jìn)行加載 無需殺掉進(jìn)程就可以完成php.ini的修改加載
結(jié)果顯示使用php-fpm可以使php有不小的性能提升
php-fpm控制的進(jìn)程.cpu回收的速度比較慢.內(nèi)存分配的很均勻
而spawn-cgi控制的進(jìn)程CPU下降的很快.而內(nèi)存分配的比較不均勻.
有很多進(jìn)程似乎未分配到,而另外一些卻占用很高.
可能是由于進(jìn)程任務(wù)分配的不均勻?qū)е碌?而這也導(dǎo)致了總體響應(yīng)速度的下降
而php-fpm合理的分配.導(dǎo)致總體響應(yīng)的提到以及任務(wù)的平均
使用php-fpm需要在php源碼上打補(bǔ)丁,然后重新編譯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
補(bǔ)丁打好以后,編譯php的時(shí)候增加了下面幾個(gè)參數(shù):
–enable-fpm 激活fastcgi模式的fpm支持
–with-fpm-conf php-fpm的配置文件(默認(rèn)是PREFIX/etc/php-fpm.conf)
–with-fpm-log php-fpm的日志文件(默認(rèn)是PREFIX/logs/php-fpm.log)
–with-fpm-pid php-fpm的pid文件(默認(rèn)是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
需要注意下面幾處配置
127.0.0.1:9000
這個(gè)表示php的fastcgi進(jìn)程監(jiān)聽的ip地址以及端口
nobody nobody
表示php的fastcgi進(jìn)程以什么用戶以及用戶組來運(yùn)行,默認(rèn)該行是注釋掉的,需要打開
0
是否顯示php錯(cuò)誤信息
5
最大的子進(jìn)程數(shù)目
運(yùn)行php-fpm:
php-fpm用一個(gè)程序來控制fastcgi進(jìn)程,這個(gè)文件在$PREFIX/sbin/php-fpm
/usr/local/php/sbin/php-fpm
該程序有如下參數(shù):
start 啟動(dòng)php的fastcgi進(jìn)程
stop 強(qiáng)制終止php的fastcgi進(jìn)程
quit 平滑終止php的fastcgi進(jìn)程
restart 重啟php的fastcgi進(jìn)程
reload 重新加載php的php.ini
logrotate 重新啟用log文件
也就是說,在修改了php.ini之后,我們可以使用
/usr/local/php/sbin/php-fpm reload
這樣,就保持了在php的fastcgi進(jìn)程持續(xù)運(yùn)行的狀態(tài)下,又重新加載了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自帶了一個(gè)配置文件,/usr/local/nginx/conf/fastcgi_params,該配置文件缺少粗體字體的部分,會(huì)造成訪問php文件時(shí)報(bào)404錯(cuò)誤。
復(fù)制代碼代碼如下:
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、計(jì)算密碼的md5值
echo -n "password"|md5sum 5f4dcc3b5aa765d61d8327deb882cf99
3、配置XCache
;注:zend_extension,用來加載zend的擴(kuò)展,是絕對路徑, extension是相對路徑,相對于extension_dir的相對路徑,非zend擴(kuò)展
如果你更改路徑以后,一定要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顯出的信息內(nèi)
Zend這快應(yīng)該會(huì)加上XCache的內(nèi)容
6、另外兩種加速模塊:
在我們的測試中,效果都要好于xcache,這3中加速不能同時(shí)存在兩種,有沖突。
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對應(yīng)多臺(tái)facgi服務(wù)器
思路:前端一臺(tái)nginx,用于做為負(fù)載均衡和處理靜態(tài)頁面。利用nginx的upstream模塊來將php請求分發(fā)到后段的php-fpm服務(wù)器上。
后端多臺(tái)php-fpm的服務(wù)器,只起php-fpm服務(wù)來處理php。
這樣做減少了php-fpm上的nginx服務(wù),相當(dāng)于少了一層。
分享標(biāo)題:如何解決phpfpm出錯(cuò)問題
文章路徑:http://m.fisionsoft.com.cn/article/dhgocce.html


咨詢
建站咨詢
