php php-fpm安裝 nginx配置php


centos 6.2 linux下安裝php5.6.6源碼

PHP在 5.3.3 之后已經把php-fpm並入到php的核心代碼中了。 所以php-fpm不需要單獨的下載安裝。
要想php支持php-fpm,只需要在編譯php源碼的時候帶上 --enable-fpm 就可以了

一:yum安裝php的依賴庫

yum install -y make cmake gcc gcc-c++ autoconf automake libpng-devel libjpeg-devel zlib libxml2-devel ncurses-devel bison libtool-ltdl-devel libiconv libmcrypt mhash mcrypt pcre-devel openssl-devel freetype-devel libcurl-devel

二:下載 php5.6 源碼

wget http://cn2.php.net/distributions/php-5.6.6.tar.gz

tar -zxvf php-5.6.6.tar.gz
cd ./php-5.6.6/

三:php配置安裝

# 配置php的編譯參數
./configure --prefix=/usr/local/php --with-mysql --with-mysqli --with-pdo_mysql --with-iconv-dir --with-zlib --with-libxml-dir --enable-xml --with-curl --enable-fpm --enable-mbstring --with-gd --with-openssl --with-mhash --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-freetype-dir=/usr/lib64

# 開始編譯安裝
make
make install

然后就安裝到了 /usr/local/php 目錄下

四:配置php.ini和php-fpm

php.ini配置

首先我們需要配置的是php.ini這個文件

安裝目錄有2個文件:php.ini-development和php.ini-production

php.ini-production 線上版本使用

php.ini-development 開發版本使用

我們選擇development進行配置

# cp php.ini-development /usr/local/php/lib/php.ini

php-fpm配置

首先啟動php-fpm:

/usr/local/php/sbin/php-fpm

報錯了
ERROR: failed to open configuration file '/usr/local/php/etc/php-fpm.conf': No such file or directory (2)
ERROR: failed to load configuration file '/usr/local/php/etc/php-fpm.conf'
ERROR: FPM initialization failed

錯誤信息說是找不到php-fpm.conf

到php的配置目錄
cd /usr/local/php/etc
有一個php-fpm.conf.default的文件,cp復制
cp php-fpm.conf.default php-fpm.conf

編輯 php-fpm.conf
找到以下配置項, 配置如下

pid = run/php-fpm.pid
user = www
group = www

 

再次運行
/usr/local/php/sbin/php-fpm
報錯了:
ERROR: [pool www] cannot get uid for user 'www'
ERROR: FPM initialization failed

說www用戶不存在,那么建立www用戶和用戶組

groupadd www
useradd -g www www

再次啟動

/usr/local/php/sbin/php-fpm

沒有任何報錯,說明運行成功了

驗證是否成功

ps aux|grep php-fpm

出現了 php-fpm進程:
root 15448 0.0 0.2 210972 4856 ? Ss 16:10 0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www 15449 0.0 0.2 213056 4768 ? S 16:10 0:00 php-fpm: pool www
www 15450 0.0 0.2 213056 4768 ? S 16:10 0:00 php-fpm: pool www
root 15492 0.0 0.0 112648 964 pts/0 R+ 16:11 0:00 grep --color=auto php-fpm

五:加入開機啟動

開機啟動的配置文件是:/etc/rc.local
# vi /etc/rc.local

/usr/local/php/sbin/php-fpm  # 添加進來

六:php-fpm的一些命令

我們在新安裝擴展后,是需要重新php-fpm的,已使擴展生效。
最簡單粗暴的重新php-fpm的方式是:
先找到php-fpm的進程號,kill 掉,再用/usr/local/php/sbin/php-fpm 這樣啟動。
其實還有更多溫和的方法,就是使用信號。
INT, TERM 立刻終止
QUIT 平滑終止
USR1 重新打開日志文件
USR2 平滑重載所有worker進程並重新載入配置和二進制模塊

示例:

php-fpm 關閉:
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`

php-fpm 重啟:
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

七:nginx配置解析php

nginx的配置安裝見前面文章:http://www.cnblogs.com/starlion/p/8875982.html

1、進入nginx目錄
cd /usr/local/nginx

2、編輯配置文件
vi ./conf/nginx.conf

在 server 下找到

location / {
    root html;
    index index.html index.htm index.php; # 加上 index.php
}

去掉前面注釋 #

location ~ \.php$ {
    root /usr/local/nginx/html; # 絕對路徑配置到html下
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; #驗證時候解析php出錯,/scripts需要換成$document_root, 下面有解釋
include fastcgi_params;
}

 

3、然后平滑重啟nginx
./sbin/nginx -s reload
沒有報錯,說明重啟成功

八:驗證php是否配置成功

在 /usr/local/nginx/html 目錄下編輯 vi index.php

<?php
echo phpinfo();
?>

 

在瀏覽器上輸入 http://ip:80/index.php 然后出現了錯誤
File not found

查看nginx的日志,配置日志在 ./logs 目錄下
首先查看access.log 日志,出現了如下錯誤信息
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: ***.107.***.138, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "1**.24.**.115"

在看 error.log 日志信息出現了下面信息
[error] 16403#0: *42 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: ***.107.***.138, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "1**.24.**.115"

根據上面的 FastCGI sent in stderr: "Primary script unknown"
這是在配置nginx解析php腳本時候出現了錯誤

fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

修改成如下方式($document_root):

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

$document_root 代表當前請求在root指令中指定的值:

修改之后重啟nginx
./sbin/nginx -s reload
重新刷新瀏覽器,出現如下圖所示,說明配置成功了

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM