推薦:《PHP視頻教程》
nginx本身不能處理PHP,它只是個web服務器,當接收到請求后,如果是php請求,則發(fā)給php解釋器處理,并把結果返回給客戶端。
nginx一般是把請求發(fā)fastcgi管理進程處理,fascgi管理進程選擇cgi子進程處理結果并返回被nginx
本文以php-fpm為例介紹如何使nginx支持PHP
一、編譯安裝php-fpm
什么是PHP-FPM
PHP-FPM是一個PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下載得到.
PHP-FPM其實是PHP源代碼的一個補丁,旨在將FastCGI進程管理整合進PHP包中。必須將它patch到你的PHP源代碼中,在編譯安裝PHP后才可以使用。
新版PHP已經(jīng)集成php-fpm了,不再是第三方的包了,推薦使用。PHP-FPM提供了更好的PHP進程管理方式,可以有效控制內存和進程、可以平滑重載PHP配置,比spawn-fcgi具有更多有點,所以被PHP官方收錄了。在./configure的時候帶 –enable-fpm參數(shù)即可開啟PHP-FPM。
新版php-fpm安裝(推薦安裝方式)
wget http://cn2.php.net/distributions/php-5.4.7.tar.gz
tar zvxf php-5.4.7.tar.gz
cd php-5.4.7
./configure --prefix=/usr/local/php --enable-fastcgi --enable-fpm --with-mcrypt --with-zlib --enable-mbstring --disable-pdo --with-curl --disable-debug --enable-pic --disable-rpath --enable-inline-optimization --with-bz2 --with-xml --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-xslt --enable-memcache --enable-zip --with-pcre-regex --with-mysql
make all install
舊版手動打補丁php-fpm安裝
wget http://cn2.php.net/get/php-5.2.17.tar.gz
wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
tar zvxf php-5.2.17.tar.gz
gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1
cd php-5.2.17
./configure --prefix=/usr/local/php --enable-fastcgi --enable-fpm --with-mcrypt --with-zlib --enable-mbstring --disable-pdo --with-curl --disable-debug --enable-pic --disable-rpath --enable-inline-optimization --with-bz2 --with-xml --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-xslt --enable-memcache --enable-zip --with-pcre-regex --with-mysql
make all install
以上兩種方式都可以安裝php-fpm,安裝后內容放在/usr/local/php目錄下
cd /usr/local/php
cp etc/php-fpm.conf.default etc/php-fpm.conf
修改
vi etc/php-fpm.conf.default etc/php-fpm.conf
user = www-data
group = www-data
二、編譯安裝nginx
然后按照http://www.nginx.cn/install 安裝nginx
三、修改nginx配置文件以支持php-fpm
nginx安裝完成后,修改nginx配置文件為,nginx.conf
其中server段增加如下配置,注意標紅內容配置,否則會出現(xiàn)No input file specified.錯誤
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
四、創(chuàng)建測試php文件
創(chuàng)建php文件
在/usr/local/nginx/html下創(chuàng)建index.php文件,輸入如下內容
<? echo phpinfo(); ?>
五、啟動服務
啟動php-fpm和nginx
/usr/local/php/sbin/php-fpm (手動打補丁的啟動方式/usr/local/php/sbin/php-fpm start)
sudo /usr/local/nginx/nginx
六、瀏覽器訪問
訪問http://你的服務器ip/index.php,皆可以見到php信息了。
七、cp /root/php-5.3.21/php.ini-development /opt/php/lib
放入PHP配置文件
安裝php-fpm時可能遇到的錯誤:
1.phpconfigure時出錯
configure: error: XML configuration could not be found
apt-get install libxml2 libxml2-dev (ubuntu下)
yum -y install libxml2 libxml2-devel(centos下)
2. Please reinstall the BZip2 distribution
wget http://www.bzip.org/1.0.5/bzip2-1.0.5.tar.gz
tar -zxvf bzip2-1.0.5.tar.gz
cd bzip2-1.0.5
make
make install
3.php的配置文件中有一行--with-mysql=/usr。安裝的時候提示:
configure: error: Cannot find MySQL header files under yes.
Note that the MySQL client library is not bundled anymore.
這是由于安裝mysql時沒有安裝mysql頭文件,或者是路徑指定不正確,php找不到mysql的頭文件引起的錯誤提示。
解決方法。
(1.) 查看你的系統(tǒng)有沒有安裝mysql header
find / -name mysql.h
如果有。請指定--with-mysql=/跟你的正常路徑。
如果沒有。請看下一步。
(2.)redhat安裝
rpm -ivh MySQL-devel-4.1.12-1.i386.rpm
(3.)ubuntu安裝
apt-get install libmysqlclient15-dev
(4.)最后一步php的配置選項添加--with-mysql=/usr即可!
4.No input file specified.
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
5.如果php configure時缺庫,可以先安裝庫(ubuntu下)
sudo apt-get install make bison flex gcc patch autoconf subversion locate
sudo apt-get install libxml2-dev libbz2-dev libpcre3-dev libssl-dev zlib1g-dev libmcrypt-dev libmhash-dev libmhash2 libcurl4-openssl-dev libpq-dev libpq5 libsyck0-de
聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com