1. 程式人生 > >centos6.8服務器配置之編譯安裝PHP、配置nginx

centos6.8服務器配置之編譯安裝PHP、配置nginx

功能 配置說明 函數 true option pcre c語言 php.ini get

php version 5.6.31、nginx version: nginx/1.10.2

1、下載:

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

2、安裝組件

yum install -y gcc gcc-c++ make zlib zlib-devel pcre pcre-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel openssl openssl-devel openldap openldap-devel  openldap-clients openldap-servers php-mcrypt  libmcrypt  libmcrypt-devel

3、解決64位系統的問題,編譯時會報錯:configure: error: Cannot find ldap libraries in /usr/lib

cp -frp /usr/lib64/libldap* /usr/lib/

4、安裝liviconv

1.15版

wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
./configure --prefix=/usr/local
make
make install

1.13版

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
tar 
-zxvf libiconv-1.13.1.tar.gz cd libiconv-1.13.1 ./configure --prefix=/usr/local make make install

兩個版本任選其一即可

find / -name libiconv.so.2
ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2
ldconfig

5、編譯

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql --with-mysqli --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-libxml-dir=/usr --with-pdo-mysql --with-openssl --with-curl --with-ldap --with-ldap-sasl --with-xmlrpc --with-mcrypt --with-gd --with-zlib --with-mhash --disable-rpath --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-fpm --enable-mbstring --enable-gd-native-ttf --enable-pcntl --enable-sockets --enable-zip --enable-soap --without-pear --disable-phar --enable-pdo 

編譯配置說明:

# 指定 php 安裝目錄
--prefix=/usr/local/php

# 指定php.ini位置
--with-config-file-path=/usr/local/php/etc 

# mysql安裝目錄,對mysql的支持
--with-mysql

#mysqli擴展技術不僅可以調用MySQL的存儲過程、處理MySQL事務,而且還可以使訪問數據庫工作變得更加穩定。
--with-mysqli=/usr/local/mysql/bin/mysql_config  

#整合 apache,apxs功能是使用mod_so中的LoadModule指令,加載指定模塊到 apache,要求 apache 要打開SO模塊
--with-apxs2=/usr/local/apache/bin/apxs 

# 選項指令 --with-iconv-dir 用於 PHP 編譯時指定 iconv 在系統裏的路徑,否則會掃描默認路徑。
--with-iconv-dir=/usr/local 
--without-iconv   關閉iconv函數,字符集間的轉換
--with-freetype-dir   打開對freetype字體庫的支持 
--with-jpeg-dir   打開對jpeg圖片的支持 
--with-png-dir   打開對png圖片的支持 
--with-zlib-dir   打開zlib庫的支持,用於http壓縮傳輸
--with-libxml-dir   打開libxml2庫的支持
--with-curl    打開curl瀏覽工具的支持 
--with-curlwrappers    運用curl工具打開url流 
--with-mcrypt                    mcrypt算法擴展
--with-mhash                     mhash算法擴展
--with-gd    打開gd庫的支持 
--with-openssl      openssl的支持,加密傳輸https時用到的
--with-xmlrpc    打開xml-rpc的c語言 
--with-bz2    打開對bz2文件的支持        
--with-ttf     打開freetype1.*的支持,可以不加了 
--with-xsl     打開XSLT 文件支持,擴展了libXML2庫 ,需要libxslt軟件 
--with-gettext     打開gnu 的gettext 支持,編碼庫用到 
--with-pear    打開pear命令的支持,PHP擴展用的 
--with-mime-magic=/usr/share/file/magic.mime      魔術頭文件位置

--disable-rpath    關閉額外的運行庫文件 
--disable-debug    關閉調試模式 

--enable-bcmath    打開圖片大小調整,用到zabbix監控的時候用到了這個模塊
--enable-shmop --enable-sysvsem  這樣就使得你的PHP系統可以處理相關的IPC函數了。
--enable-inline-optimization  優化線程

--enable-mbregex
--enable-fpm 打上PHP-fpm 補丁後才有這個參數,CGI方式安裝的啟動程序
--enable-mbstring    多字節,字符串的支持 
--enable-gd-native-ttf   支持TrueType字符串函數庫
--enable-pcntl   freeTDS需要用到的,可能是鏈接mssql 才用到
--enable-sockets     打開 sockets 支持
--enable-zip   打開對zip的支持 
--enable-ftp   打開ftp的支持 
--enable-calendar    打開日歷擴展功能
--enable-exif    圖片的元數據支持 
--enable-magic-quotes    魔術引用的支持 

#以下是CGI方式安裝才用的參數
--enable-fastCGI            支持fastcgi方式啟動PHP
--enable-force-CGI-redirect        重定向方式啟動PHP
--with-ncurses         支持ncurses 屏幕繪制以及基於文本終端的圖形互動功能的動態庫
--with-gmp  應該是支持一種規範
--enable-dbase                     建立DBA 作為共享模塊
--with-pcre-dir=/usr/local/bin/pcre-config      perl的正則庫案安裝位置
--disable-dmalloc
--with-gdbm                     dba的gdbm支持
--enable-sigchild
--enable-sysvshm
--enable-zend-multibyte         支持zend的多字節
--enable-wddx
--enable-soap

常見問題:

1、configure: error: Cannot find ldap libraries in /usr/lib

解決方法:cp -frp /usr/lib64/libldap* /usr/lib/

可能的原因是安裝了64位的系統,在lib64下面有這個文件,可能在lib這文件夾裏面沒有,所以強制復制一次。

2、configure: error: Cannot find ldap.h,發現依賴於openldap包,通過yum解決問題:
解決方法:yum install -y openldap install openldap-devel

3、WARNING: unrecognized options: --enable-discard-path, --enable-safe-mode, --with-curlwrappers, --enable-fastcgi, --enable-force-cgi-redirect
解決辦法:說明參數被廢棄了

4、PEAR package PHP_Archive not installed: generated phar will require PHPs phar extension be enabled.
php 的編譯時需要依賴pear package ,目前的問題錯誤"PEAR package PHP_Archive not installed",已經明顯報出這個問題。 
因此編譯使用參數 --without-pear   將pear 屏蔽掉編譯安裝後,再進行安裝;同時因為phar 屬於pear的一個庫 ,所以不將phar關閉掉,同時還會報這個錯誤, 
同時需要使用 --disable-phar   編譯參數. 

./configure --without-pear  --disable-phar
make
make install
成功編譯安裝完成後,再安裝pear

wget  http://pear.php.net/go-pear.phar 
/usr/local/bin/php go-pear.phar


5、Bug #72663: Create an Unexpected Object and Don‘t Invoke __wakeup() in Deserialization [ext/standard/tests/strings/bug72663_3.phpt] (warn: XFAIL section but test passes)
直接make install

5、ext/xmlrpc/libxmlrpc/.libs/encodings.o: In function `convert:
/usr/local/php/ext/xmlrpc/libxmlrpc/encodings.c:73: undefined reference to `libiconv_open/usr/local/php/ext/xmlrpc/libxmlrpc/encodings.c:81: undefined reference to `libiconv/usr/local/php/ext/xmlrpc/libxmlrpc/encodings.c:101: undefined reference to `libiconv_closecollect2: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1


/usr/local/php/sapi/cli/php: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory
make[1]: *** [install-pear-installer] Error 127          #很明顯meke  install的時候找不到libiconv.so.2的庫文件了
make: *** [install-pear] Error 2                            #貌似這個錯誤在Centos6.x上面每次編譯都會報錯!



解決的方法如下:


1.在/etc/ld.so.conf中加一行/usr/local/lib,


2.然後運行/sbin/ldconfig

這樣就ok了它就能找到庫文件了

Bug #52202 (CURLOPT_PRIVATE gets clobbered) [ext/curl/tests/bug52202.phpt]

6、

make ZEND_EXTRA_LIBS=-liconv
make test
make install

7、給php創建專有的用戶和組www-data

groupadd www-data
useradd -g www-data www-data -s /sbin/nologin

8、配置php-fpm(php自帶)

#修改php-fpm的默認配置,並使php-fpm以www-data用戶的身份運行:
cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf

vim php-fpm.conf
#找到並修改為以下行:
pid = run/php-fpm.pid
user = www-data
group = www-data
#找到並修改以下行
listen = 127.0.0.1:9000

9、啟動php-fpm

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

10、添加php-fpm為系統服務

檢測/usr/local/php/var/run/php-fpm.pid是否存在:

若不存在:去除/usr/local/php/etc/php-fpm.conf裏的“;pid = run/php-fpm.pid”前面的分號,並重啟php-fpm就會自動生成php-fpm.pid

如何重啟php-fpm(當然重啟系統也是可以的):

#查看php-fpm當前的進程
ps -ef | grep php-fpm
#結束php-fpm所有進程即可
kill -9 進程id
#啟動php-fpm
/usr/local/php/sbin/php-fpm

新建php-fpm文件

vim /etc/init.d/php-fpm

添加內容如下

#! /bin/sh
# Comments to support chkconfig on CentOS
# chkconfig: 2345 65 37
#
set -e
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="php-fpm daemon"
NAME=php-fpm
DAEMON=/usr/local/php/sbin/$NAME
 
CONFIGFILE=/usr/local/php/etc/php-fpm.conf
PIDFILE=/usr/local/php/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
 
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
 
d_start() {
  $DAEMON -y $CONFIGFILE || echo -n " already running"
}
 
d_stop() {
  kill -QUIT `cat $PIDFILE` || echo -n " not running"
}
 
d_reload() {
  kill -HUP `cat $PIDFILE` || echo -n " can‘t reload"
}
 
case "$1" in
  start)
        echo -n "Starting $DESC is success"
        d_start
        echo "."
        ;;
  stop)
        echo -n "Stopping $DESC is success"
        d_stop
        echo "."
        ;;
  reload)
        echo -n "Reloading $DESC configuration..."
        d_reload
        echo "reloaded."
  ;;
  restart)
        echo -n "Restarting $DESC is success"
        d_stop
        sleep 1
        d_start
        echo "."
        ;;
  *)
         echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
         exit 3
        ;;
esac

修改其權限並開機啟動

#修改權限
chmod 755 /etc/init.d/php-fpm
#開機啟動
chkconfig php-fpm on
#查看開機啟動的服務
chkconfig --list

11、啟動

#啟動服務
service php-fpm start
#停止服務
service php-fpm stop
#重啟服務
service php-fpm reload

12、安裝nginx

yum install nginx -y

13、nginx配置

server {
    listen       80;
    server_name  www.baidu.com;
    root   /www/web/pc;

       index  index.php;
    location / {
     
    #       root /www/web/pc;
      # index  index.php;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~ /\.ht {
        deny  all;
    }
}

14、啟動nginx

#檢查語法
/usr/sbin/nginx -t
#啟動
/usr/sbin/nginx
#重啟
/usr/sbin/nginx -s reload

15、web目錄權限配置

#查看php-fpm、nginx的用戶
ps aux|grep nginx
ps aux|grep php-fpm
#php-fpm的用戶不能是web目錄的擁有者,最小權限原則
web rwx r-- r-x root vuser 
cache rwx rwx rwx root root

centos6.8服務器配置之編譯安裝PHP、配置nginx