首頁  >  文章  >  運維  >  nginx呼叫php-fpm出錯怎麼解決

nginx呼叫php-fpm出錯怎麼解決

WBOY
WBOY轉載
2023-05-14 10:25:051026瀏覽

完成了nginx和php-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.000. ", 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


##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
要注意下面幾處設定
127.0.0.1:9000
這個表示php的fastcgi進程監聽的ip地址以及端口
nobody
< ;value name="group">nobody
表示php的fastcgi進程以什麼使用者以及使用者群組來執行,預設該行是註解掉的,需要開啟
0
是否顯示php錯誤訊息
5
最大的子進程數目
運行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之後,我們可以使用###/usr/local/php/sbin/php-fpm reload###這樣,就保持了在php的fastcgi進程持續運行的狀態下,又重新載入了php.ini。 ######複製程式碼 程式碼如下:###

user www www;
worker_processes 10;
error_log messages/error.log notification;
#pid logs/nginx.pid;
#指定可以開啟的最大檔案描述子的值這個最大檔案描述子的值這個過程。
worker_rlimit_nofile 51200;
events
{
   use epoll;
  worker_connections 51200;
}
http
{##   include. #   default_type application/octet-stream;
   字元集gb2312;
   server_names_hash_bucket_size 128;
   #sendfileon;
 nodelay on;
gzip on;
   gzip_min_length 1k;
   gzip_buffers 4 8k;
   gzip_http_version 1.1;
   gzip_types text/pp. #   監聽80;
   server_name 192.168.1.2;
   index index.html index.htm index.php;
   root /ebs/www;
   if (-
request_name name) ##   重寫^/(.*)([^/])$ http://$host/$1$2/ permanent;
   }
   位置~ .*\.php?$
   {
   include fcgi.conf

   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   }
   log_format_index。 '
   '$status $body_bytes_sent "$http_referer" '
   '"$http_user_agent" $http_x_forwarded_for';

   access_log 日誌/access.log 存取權;## 


##新設定​​檔

##複製程式碼如下:

/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_methodod # fastcgi_param script_filename $document_root$fastcgi_script_name;

fastcgi_param script_name $fastcgi_script_name;

fastcgi_param request_uri $request_uri;

fastcgi_參數protocol $server_protocol;

fastcgi_?建構的,則需要-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後再啟動,而不是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]
;將 xcache.admin.user 變更為您首選的登入名稱
xcache.admin.user = "admin"
;將 xcache.admin.pass 更改為您的密碼的 md5 指紋
;使用 md5 -s "your_secret_password" 找出指紋
xcache.admin.pass = "5f4dcc3b5aa765d61d8327deb882cf99"
[xcache]
;更改 xcache.size 來調整操作碼快取的大小
xcache.size = 24m
xcache.shm_scheme = "mmap"
xcache.count = 2
xcache.slots = 8k
xcache . ttl = 0
xcache.gc_interval = 0
;更改xcache.var_size來調整變數快取的大小
xcache.var_size = 8m
xcache.var_count = 1
xcache.var_slots = 8k
xcache.var_ttl = 0
xcache.var_maxttl = 0_maxttl = 0_maxttl = 0_maxttl = 0_maxttl = 0_maxttl = 0_maxttl = 0_maxttl = 0_maxttl = 0_maxttl = 0_maxttl = 0_maxttl = 0_maxttl = 0_maxttl = 0_maxttl = 0_maxttl = 0_max
xcache.var_gc_interval = 300
xcache.test = 關閉
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_dicache.coverager]
xcache.coverager = on
xcache.coveragedump_directory = ""

##5、重啟php模組
正常載入之後,
在phpinfo顯出的資訊內
zend這快應該會加上xcache的內容
nginx呼叫php-fpm出錯怎麼解決

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的上游模組來將php請求分發到後段的php-fpm伺服器上。
頭部多台php-fpm的伺服器,只起php-fpm服務來處理php。
這樣做減少了php-fpm上的nginx服務,相當於少了一層。

以上是nginx呼叫php-fpm出錯怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除