lnmp安裝php
為Nginx中的php是以fastcgi的方式結合nginx的。可以理解為nginx代理了php的fastcgi,
而apache是把php作為自己的模塊來調用的。同樣的,阿銘建議你使用 5.4版本。PHP 官
方下載地址: http://www.php.net/downloads.php。如下為安裝過程:
(1)下載PHP源碼包
#cd /usr/local/src
#wget http://au1.php.net/distributions/php-5.4.44.tar.bz2
(2)解壓源碼包,創建賬號
#tar jxf php-5.4.44.tar.bz2
該賬號用來運行php-fpm服務,在LNMP 環境中,php 是以一個服務來提供服務的。
提前安裝一些依賴包,盡少避免編譯錯誤
yum install -y libjpeg-devel libxml2-devel openssl openssl-devel bzip2 bzip2-devel libpng libpng-devel freetype freetype-devel epel-release libmcrypt libcurl-devel
yum install -y libmcrypt-devel
(3)配置編譯選項
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm \
--with-fpm-user=php-fpm \
--with-fpm-group=php-fpm \
--with-mysql=/usr/local/mysql \
--with-mysql-sock=/tmp/mysql.sock \
--with-libxml-dir \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-iconv-dir \
--with-mcrypt \
--enable-soap \
--enable-gd-native-ttf \
--enable-ftp \
--enable-mbstring \
--enable-exif \
--enable-zend-multibyte \
--disable-ipv6 \
--with-pear \
--with-curl \
--with-openssl
錯誤信息:
configure: error: Please reinstall the libcurl distribution -
easy.h should be in <curl-dir>/include/curl/
解決辦法:
#yum install -y libcurl-devel
(4)編譯PHP
#make
在這一步,你通常會遇到一些錯誤,沒有關系,遇到錯誤是好事,這樣可以增加你處理
問題的經驗。我同樣也遇到了錯誤:
/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [sapi/fpm/php-fpm] 錯誤 1
我是這樣解決的:
#yum install -y libtool-ltdl-devel
(5)安裝PHP
#make install
以上每一個步驟,如果沒有完全執行正確,那麽下一步是無法進行的,是否還記得判
斷執行是否正確的方法? 使用 echo $? 看結果是否為 “0” , 如果不是,就是沒有執行正確。
(6)修改配置文件
#cp php.ini-production /usr/local/php/etc/php.ini
#vim /usr/local/php/etc/php-fpm.conf
把如下內容寫入該文件:
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
[www]
listen = /tmp/php-fcgi.sock
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
listen.owner = nobody
listen.group = nobody
#slowlog = /tmp/www_slow.log
#request_slowlog_timeout = 5
#php_admin_value[open_basedir]=/data/www/:/tmp/
說明:
global部分是全局配置,指定 pid文件路徑以及error_log路徑。
[www]是一個pool,我們其實還可以再寫第二個pool,第二個pool和第一個不一樣的
地方,首先pool的name,比如叫做[www2]。然後 listen肯定就不能一樣了,比如可以 listen
= /tmp/php-fcgi2.sock。而 user,group也可以和[www]中定義的不一樣。listen.owner這個是
定義/tmp/php-fcgi.sock 這個文件的所有者是誰,在php5.4版本之後監聽的socket文件權限
默認編程了rw-------,如果不定義 listen.owner那麽 nginx調用這個socket的時候就沒有權限
了,故在這裏我們定義 listen.owner為 nginx的子進程監聽用戶。
pm = dynamic 表示以動態的形式啟動,在 php5.3版本以後它可以支持動態和靜態了,
如果是靜態,即pm=static 時,下面的配置只有pm.max_children管用。
pm.max_children 表示啟動幾個 php-fpm的子進程。如果是 dynamic,下面的配置會生效,
pm.max_children 表示最大可以啟動幾個子進程。
pm.start_servers表示一開始啟動幾個子進程。
pm.min_spare_servers表示當 php-fpm空閑時最少要有幾個子進程,即如果空閑進程小
於此值,則創建新的子進程。 pm.max_spare_server表示當 php-fpm空閑時最多有幾個子進程,
即如果空閑進程大於此值,則會進行清理。
pm.max_requests表示一個子進程最多可以接受多少個請求,比如設置為 500那麽一個
子進程受理500個請求後自動銷毀。
rlimit_files表示每個子進程打開的多少個文件句柄。
保存配置文件後,檢驗配置是否正確的方法為:
#/usr/local/php/sbin/php-fpm -t
如果出現諸如 “test is successful” 字樣,說明配置沒有問題,否則就要根據提示檢查配
置文件是否有問題。
(7)啟動php-fpm
首先要拷貝一個啟動腳本到/etc/init.d/下
#cp /usr/local/src/php-5.3.27/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
給它更改權限為755
#chmod 755 /etc/init.d/php-fpm
#service php-fpm start
如果想讓它開機啟動,執行:
#chkconfig php-fpm on
檢測是否啟動:
#ps aux |grep php-fpm
看看是不是有很多個進程(大概 20多個)。
lnmp安裝php