centos6.8服務器配置之編譯安裝PHP、配置nginx
阿新 • • 發佈:2017-09-18
功能 配置說明 函數 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 PHP‘s 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_close‘ collect2: 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