CentOS 6.2 LNMP 環境搭建優化筆記

首先從centos 官方下載DVD鏡像:php

安裝的時候才用文本安裝模式:html

文本安裝模式的進入方法:前端

當出現選擇菜單時:按ESC,輸入 linux text 回車進入文本安裝模式。python

文本安裝模式下centos爲了彌補某些bug,因此不支持手動分區,默認就能夠了。(如下介紹部分爲轉載)mysql

系統安裝教程:CentOS 6.2安裝(超級詳細圖解教程): http://www.osyunwei.com/archives/1537.htmllinux

1、配置好IP、DNS 、網關,確保使用遠程鏈接工具可以鏈接服務器 
CentOS 設置IP地址、網關、DNS教程:http://www.osyunwei.com/archives/423.html
nginx

 

朋友們對LAMP架構應該比較熟悉了,Linux+Apache+Mysql+Php/perl/python),LNMP架構只是把提供web服務的Apache改用爲Nginx。從而造成,Linux+Nginx+Mysql+Php/perl/python)架構。目前企業級別應用Nginx在創下許多驚人戰績。c++

目前國內以張宴爲表明,掀起了nginx的狂潮,首先簡單介紹下什麼是nginx.web

Nginx(發音同 engine x)是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。  其特色是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好.目前中國大陸使用nginx網站用戶有:新浪、網易、 騰訊,另外知名的微網誌Plurk也使用nginx。sql

爲何Nginx的性能要比Apache高得多?

這得益於Nginx使用了最新的epoll(Linux 2.6內核)和kqueue(freebsd)網絡I/O模型,而Apache則使用的是傳統的select模型。目前Linux下可以承受高併發訪問的Squid、Memcached都採用的是epoll網絡I/O模型。 
處理大量的鏈接的讀寫,Apache所採用的select網絡I/O模型很是低效。

Nginx 是一個很牛的高性能Web和反向代理服務器, 它具備有不少很是優越的特性:

做爲 Web 服務器:相比 Apache,Nginx 使用更少的資源,支持更多的併發鏈接,體現更高的效率,這點使 Nginx 尤爲受到虛擬主機提供商的歡迎。在高鏈接併發的狀況下,Nginx是Apache服務器不錯的替代品: Nginx在美國是作虛擬主機生意的老闆們常常選擇的軟件平臺之一. 可以支持高達 50,000 個併發鏈接數的響應, 感謝Nginx爲咱們選擇了 epoll and kqueue 做爲開發模型.

Nginx做爲負載均衡服務器: Nginx 既能夠在內部直接支持 Rails 和 PHP 程序對外進行服務, 也能夠支持做爲 HTTP代理 服務器對外進行服務. Nginx採用C進行編寫, 不管是系統資源開銷仍是CPU使用效率都比 Perlbal 要好不少. 。Nginx可做爲7層負載均衡服務器來使用。

做爲郵件代理服務器: Nginx 同時也是一個很是優秀的郵件代理服務器(最先開發這個產品的目的之一也是做爲郵件代理服務器), Last.fm 描述了成功而且美妙的使用經驗.

Nginx 是一個安裝很是的簡單 , 配置文件很是簡潔(還可以支持perl語法), Bugs 很是少的服務器: Nginx 啓動特別容易, 而且幾乎能夠作到7*24不間斷運行,即便運行數個月也不須要從新啓動. 你還可以不間斷服務的狀況下進行軟件版本的升級 .

整體來講nginx的有如下八大優勢:

1.高併發鏈接:官方測試能支撐5萬併發鏈接,在實際生產環境中跑到2,~3W併發鏈接。

2.內存消耗少:在3W併發鏈接下,開啓的10個NGINX進程才消耗150M內存(15M*10=150M)

3.配置文件很是簡單:風格跟程序同樣通俗易懂。

4.成本低廉:Nginx做爲開源軟件,能夠無償使用,而購買F5 BIG-IP、NetScaler

等硬件負載均衡交換機則須要十多萬至幾十萬人民幣。

5.支持rewrite重寫規則:可以根據域名、URL的不一樣,將HTTP請求分發到不一樣的後端服務器羣組。

6.內置的健康檢查功能:若是Nginx Proxy後端的後臺web服務器宕機了,不會音響前端訪問。

7.節省帶寬:支持GZIP壓縮,能夠添加瀏覽器本地緩存的Header頭。

8.穩定性高:用於反向代理,宕機的機率微乎其微。

介紹這麼多nginx 的優勢.下面來具體實現下LEMP架構(linux+nginx+mysql+php/perl/python)

可能有朋友對靜態動態解析過程不太清楚,筆者按照本身理解簡單闡述,若有錯誤地方請前輩多加指點。

nginx只是提供一個靜態web服務,動態web服務還須要與PHP等腳本語言結合使用。如圖所示:

客戶端在訪問動態頁面時,由於apache和nginx只能提供靜態解析,這是他們經過內置的cgi接口去尋找php等腳本語言,當須要用到數據部分時PHP會去調用後臺MYSQL數據庫中的數據,以後經過解析生成靜態頁面在返回apache/nginx服務器,再由此交付給客戶端。

若是不清楚CGI和fastCGI筆者做如下簡要說明:

Perl、Python或者PHP原來在Web開發的時候應用得比較多,由於早期的web服務器(固然還包括Apache)內建了CGI(通用網關接口)接口。CGI可以以肯定的方式讓Web服務器在客戶機的瀏覽器和外部應用程序之間交換數據。經過支持外部的、基於CGI的應用程序,Web開發人員可以引進動態要素。使用這種接口開發通過編譯的應用程序相對來講比較複雜,可是,這種解釋性的語言一般包括這種功能,或者是直接包括這種功能(如使用PHP),或者經過標準模塊包括這種功能(如使用Perl和Python)。

FastCGI同CGI同樣是一個WEB服務器與外部程序接口的標準,它是爲解決CGI的性能問題而開發的一種技術。

CGI技術的性能缺陷:每當服務器收到一個對CGI程序請求時,服務器都將建立一個CGI程序的進程,CGI程序處理完請求後,將輸出發給服務器或直接傳回客戶端,而後終止。

fastCGI對CGI技術進行了改良,一個fastCGI進程在WEB服務器啓動時或在客戶端第一次請求時建立,它處理完客戶端請求後並不終止,而是等待處理下一個請求。另外fastCGI程序與CGI程序與服務器的交互方式也不一樣,CGI程序經過環境變量、命令行、標準輸入輸出進行交互,所以CGI程序進程必須與服務器進程在同一臺物理計算機上,而fastCGI程序與服務器進程經過網絡鏈接交互,所以fastCGI程序能夠分佈在不一樣的計算機上,這不但能夠提升性能,同時也提升了系統的擴展能力。

 

下面開始手動編譯LNMP生產環境的過程:

首先,下載nginx:地址:http://nginx.org/en/download.html 最新的穩定版爲,1.2.1

而後,下載mysql,這裏mysql咱們採用mysql原做者,最新開發的mysql分之數據庫,mariaDB,做者對其進行了全面優化,而且徹底兼容mysql。

http://downloads.mariadb.org/mariadb/     其最新穩定版爲:5.5.25

最後,下載PHP程序,地址:http://www.php.net/archive/2012.php#id2012-06-14-1   其最新穩定版爲:5.4.4

 

簡單介紹所用包的關係以及原理(此處介紹爲轉載)

1.mysql-5.5.3-m3.tar.gz       #LEMP架構中擔當數據庫服務器即M

2.Nginx-0.7.65.tar.gz            #提供web服務,提供靜態web服務

3.php5.3.3.tar.bz2        #提供php腳本語言用來解析動態頁面

須要說明如下幾點:

php在編譯安裝時,nginx要想可以調用php提供動態php格式的網頁,必須用FastCGI來實現,但FastCGI只是一個框架,實現FastCGI框架的有PHP-FPM,但對於5.2.x版本的php來講 默認是不支持PHP-FPM的,須要打上php-fpm的補丁,對於5.3.2以前版本的也是須要打補丁的,並且打補丁的過程比較麻煩。好在5.3.3版本的PHP-FPM被直接作進了源代碼包中,在編譯安裝時只需啓用PHP-FPM功能便可,筆者爲了簡要實現功能,選用5.3.3版原本進行演示。

但若是要使用PHP-FPM的話,還須要提供如下幾個功能:

a.須要提供能夠解析xml格式的文檔,須要安裝libxml2 和libxml2-devel這兩個包,好在這兩個包在安裝完開發環境後這兩個包是默認安裝過的。

b.須要安裝libevent而且在1.4.12以後的版本,不幸的是rhel5.4版本中這個包是是在1.4.12以前的,須要重新手動編譯安裝該包。

c. libiconv 用來提供網絡鏈接方式的功能組件,能夠實現更快速的網絡訪問,這個組件系統上是沒有裝的,須要手動編譯安裝。

 

下面開始正式的編譯安裝過程:

用wget 命令,把所須要的源碼包,下載到你習慣放置的目錄:

使用 tar zxvf/jxvf 命令,把源碼包,解壓縮到本地目錄:

使用yum 命令,安裝一些經常使用的軟件依賴關係包文件:

yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

yum -y install ntp vim-enhanced gcc gcc-c++ gcc-g77 flex bison autoconf automake glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel libtool* zlib-devel libxml2-devel libjpeg-devel libpng-devel libtiff-devel fontconfig-devel freetype-devel libXpm-devel gettext-devel curl curl-devel pam-devel e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers gzip

yum install make apr* autoconf automake curl curl-devel gcc gcc-c++ zlib-devel openssl openssl-devel pcre-devel gd  kernel keyutils  patch  perl kernel-headers compat* mpfr cpp glibc libgomp libstdc++-devel ppl cloog-ppl keyutils-libs-devel libcom_err-devel libsepol-devel libselinux-devel krb5-devel zlib-devel libXpm* freetype libjpeg* libpng* php-common php-gd ncurses* libtool* libxml2 libxml2-devel patch

安裝上面的全部包以後,估計你之後編譯軟件,不會再報依賴包不足的問題啦,嘿嘿!

 

編譯nginx:

進入nginx解壓縮好的目錄:

執行:./configure --prefix=/usr/local/nginx --pid-path=/var/nginx/nginx.pid  --lock-path=/var/nginx/nginx.lock --with-http_gzip_static_module --http-client-body-temp-path=/var/nginx/client/ --http-proxy-temp-path=/var/nginx/proxy/ --http-fastcgi-temp-path=/var/nginx/fcgi/ --with-http_stub_status_module --error-log-path=/var/nginx/error.log --http-log-path=/var/nginx/access.log --with-http_ssl_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_perl_module --with-mail --with-mail_ssl_module --user=www --group=www

 

若是沒有報錯,就執行make && make install

期間我報了一個錯誤,仍是因爲依賴包不足形成的, ̄□ ̄||

執行:yum install perl-ExtUtils-Embed 解決。

 

爲nginx運行單首創建一個用戶www:

groupadd www

useradd –g www www -s /sbin/nologin -M # 添加一個不能登陸的且沒有家目錄 名爲nginx的用戶

編譯安裝完成後爲了讓nginx開機啓動,須要建立一個腳本:

vim /etc/init.d/nginxd

輸入如下內容:

#!/bin/sh 
# 
# nginx - this script starts and stops the nginx daemon 
# 
# chkconfig:   - 85 15 
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \ 
#               proxy and IMAP/POP3 proxy server 
# processname: nginx

#下面幾個配置文件的目錄須要注意一下,若是你的安裝目錄與個人不一樣,請手動修改下面的配置。 
# config:      /etc/nginx/nginx.conf 
# config:      /etc/sysconfig/nginx 
# pidfile:     /var/run/nginx.pid


# Source function library. 
. /etc/rc.d/init.d/functions 
# Source networking configuration. 
. /etc/sysconfig/network 
# Check that networking is up. 
[ "$NETWORKING" = "no" ] && exit 0 
nginx="/usr/local/nginx/sbin/nginx" 
prog=$(basename $nginx) 
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" 
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx 
lockfile=/var/lock/subsys/nginx 
make_dirs() { 
   # make required directories 
   user=`www -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` 
   options=`$nginx -V 2>&1 | grep 'configure arguments:'` 
   for opt in $options; do 
       if [ `echo $opt | grep '.*-temp-path'` ]; then 
           value=`echo $opt | cut -d "=" -f 2` 
           if [ ! -d "$value" ]; then 
               # echo "creating" $value 
               mkdir -p $value && chown -R $user $value 
           fi 
       fi 
   done 
} 
start() { 
    [ -x $nginx ] || exit 5 
    [ -f $NGINX_CONF_FILE ] || exit 6 
    make_dirs 
    echo -n $"Starting $prog: " 
    daemon $nginx -c $NGINX_CONF_FILE 
    retval=$? 
    echo 
    [ $retval -eq 0 ] && touch $lockfile 
    return $retval 
} 
stop() { 
    echo -n $"Stopping $prog: " 
    killproc $prog -QUIT 
    retval=$? 
    echo 
    [ $retval -eq 0 ] && rm -f $lockfile 
    return $retval 
} 
restart() { 
    configtest || return $? 
    stop 
    sleep 1 
    start 
} 
reload() { 
    configtest || return $? 
    echo -n $"Reloading $prog: " 
    killproc $nginx -HUP 
    RETVAL=$? 
    echo 
} 
force_reload() { 
    restart 
} 
configtest() { 
  $nginx -t -c $NGINX_CONF_FILE 
} 
rh_status() { 
    status $prog 
} 
rh_status_q() { 
    rh_status >/dev/null 2>&1 
} 
case "$1" in 
    start) 
        rh_status_q && exit 0 
        $1 
        ;; 
    stop) 
        rh_status_q || exit 0 
        $1 
        ;; 
    restart|configtest) 
        $1 
        ;; 
    reload) 
        rh_status_q || exit 7 
        $1 
        ;; 
    force-reload) 
        force_reload 
        ;; 
    status) 
        rh_status 
        ;; 
    condrestart|try-restart) 
        rh_status_q || exit 0 
            ;; 
    *) 
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" 
        exit 2 
esac

 

保存退出 並給/etc/init.d/nginxd 賦予執行權限

chmod +x /etc/init.d/nginxd

chkconfig --add nginxd        ##讓入開機啓動選項中

chkconfig nginxd on          #讓其開機自動啓動

service nginxd  start       #當即啓動nginx 服務

 

如今你就能夠訪問你的主機80端口了,記得添加防火牆iptables規則,或者關閉防火牆。

2、配置防火牆,開啓80端口、3306端口

vi /etc/sysconfig/iptables   #編輯防火牆配置文件 
      -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT(容許80端口經過防火牆) 
      -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT(容許3306端口經過防火牆)

特別提示:不少網友把這兩條規則添加到防火牆配置的最後一行,致使防火牆啓動失敗

正確的應該是添加到默認的22端口這條規則的下面,添加好以後防火牆規則以下所示:

######################################################### 
# Firewall configuration written by system-config-firewall 
# Manual customization of this file is not recommended. 
*filter 
:INPUT ACCEPT [0:0] 
:FORWARD ACCEPT [0:0] 
:OUTPUT ACCEPT [0:0] 
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT 
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT 
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
COMMIT 
#########################################################

/etc/init.d/iptables restart  #最後重啓防火牆使配置生效

 

對了,記得關閉selinux,不然白白浪費系統10%的資源。

3、關閉SELINUX 
       vi /etc/selinux/config  #編輯 
       #SELINUX=enforcing       #註釋掉 
      #SELINUXTYPE=targeted    #註釋掉 
      SELINUX=disabled         #增長 
      :wq #保存退出 
      shutdown -r now   #重啓系統

若是不想重啓系統,使用命令setenforce 0 
注: 
setenforce 1 設置SELinux 成爲enforcing模式 
setenforce 0 設置SELinux 成爲permissive模式 
在lilo或者grub的啓動參數中增長:selinux=0,也能夠關閉selinux 
#--------------------------------------------------------------- 
查看selinux狀態: 
/usr/bin/setstatus -v 
以下: 
SELinux status:                 enabled 
SELinuxfs mount:                /selinux 
Current mode:                   permissive 
Mode from config file:          enforcing 
Policy version:                 21 
Policy from config file:        targeted 
getenforce/setenforce查看和設置SELinux的當前工做模式。

 

下面進行編譯安裝mariaDB:

之前mysql編譯的時候,使用的是./configure命令,不過自從5.2的版本以後,開始引入了cmake的編譯方法:

具體的編譯參數對照表,請訪問如下地址:http://forge.mysql.com/wiki/Autotools_to_CMake_Transition_Guide#Storage_Engine_Options

 

下載cmake(MySQL編譯工具)

http://www.cmake.org/files/v2.8/cmake-2.8.8.tar.gz

安裝cmake 
cd /usr/local/src 
tar zxvf cmake-2.8.8.tar.gz 
cd cmake-2.8.8 
./configure

gmake 
make && make install

 

首先進入mariaDB的解壓縮目錄:

執行命令:

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql.sock -DEXTRA_CHARSETS=all -DWITH_DEBUG=0 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=1 -DWITH_SSL=system -DWITH_READLINE=1 -DWITH_EMBEDDED_SERVER=1 -DWITH_XTRADB_STORAGE_ENGINE=1

而後:make && make install

groupadd mysql  #添加mysql組 
useradd -g mysql mysql -s /sbin/nologin   #建立用戶mysql並加入到mysql組,不容許mysql用戶直接登陸系統。

chown -R mysql:mysql /usr/local/mysql     #設置MySQL數據庫目錄權限

cd /usr/local/mysql

cp ./support-files/my-innodb-heavy-4G.cnf /etc/my.cnf   #拷貝配置文件(注意:若是/etc目錄下面默認有一個my.cnf,直接覆蓋便可)

./scripts/mysql_install_db --user=mysql  #生成mysql系統數據庫

cp ./support-files/mysql.server /usr/local/mysql/mysqld  #把Mysql加入系統啓動

ln -s /usr/local/mysql/mysqld /etc/rc.d/init.d/mysqld

chmod 755 ./mysqld   #增長執行權限

chkconfig --add mysqld 
chkconfig mysqld on  #設置開機啓動

vi /etc/profile   #把mysql服務加入系統環境變量:在最後添加下面這一行 
export PATH=$PATH:/usr/local/mysql/bin

source /etc/profile    #使設置生效。

ldconfig

下面這兩行把myslq的庫文件連接到系統默認的位置,在編譯相似PHP等軟件時能夠不用指定mysql的庫文件地址。 
ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql 
ln -s /usr/local/mysql/include/mysql /usr/include/mysql 
shutdown -r now     #須要重啓系統,等待系統從新啓動以後繼續在終端命令行下面操做 
mysql_secure_installation    #設置Mysql密碼 
根據提示按Y 回車 
而後輸入2次密碼 
繼續按Y 回車,直到設置完成 
或者直接修改密碼/usr/local/mysql/bin/mysqladmin -u root –p (空) password "123456" #修改密碼 
service mysqld restart  #重啓 
到此,mysql安裝完成!

 

PHP(下面開始編譯安裝PHP支持環境)

解壓縮php程序,到你喜歡使用的目錄。

CD進入php解壓縮後的目錄,執行./configure 預編譯命令以下:

./configure --prefix=/usr/local/php --enable-fpm --with-mcrypt --with-zlib --enable-mbstring --with-curl --disable-debug --with-pic --enable-inline-optimization --with-bz2 --enable-xml --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-zip --with-pcre-regex --with-fpm-user=php --with-fpm-group=php --enable-pdo --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql=mysqlnd --with-openssl --with-imap-ssl --with-freetype-dir --with-jpeg-dir --with-png-dir --enable-bcmath --enable-shmop --with-curlwrappers -enable-force-cgi-redirect --with-gd --enable-gd-native-ttf --with-ldap --with-ldap-sasl --enable-ftp --without-iconv --with-libXML-dir --with-XMLrpc --with-curlwrappers --with-xsl --with-gettext --with-gettext --with-pear --enable-calendar --enable-bcmath --enable-exif --enable-magic-quotes --with-gmp --with-gdbm --enable-sigchild --enable-sysvsem --enable-sysvshm --enable-zend-multibyte --enable-wddx --enable-shmop --enable-soap --with-config-file-path=/usr/local/PHP/etc

#須要說明兩點 1.--with-mysql和--with-mysqli的路徑是你mysql的具體所在的目錄

                    2.--enable-fpm 啓動fpm  .其餘都是些基本選項 ,簡單易懂,若是要求php支持的功能很少能夠精簡這些參數,後者後期添加。

出現如下畫面表示編譯成功

 

在預編譯的過程當中,我出現了以下錯誤,附上解決方法:

configure: error: DBA: Could not find necessary header file(s).

解決方法:yum install gdbm-devel db4-devel

 

configure: error: Unable to locate gmp.h

解決方法:yum install gmp-devel

 

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

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

 

configure: error: mcrypt.h not found. Please reinstall libmcrypt

解決方法:

wget http://pkgs.repoforge.org/libmcrypt/libmcrypt-2.5.7-1.2.el6.rf.x86_64.rpm

rpm -ivh ./libmcrypt-2.5.7-1.2.el6.rf.x86_64.rpm

wget http://pkgs.repoforge.org/libmcrypt/libmcrypt-devel-2.5.7-1.2.el6.rf.x86_64.rpm

rpm -ivh ./libmcrypt-devel-2.5.7-1.2.el6.rf.x86_64.rpm

因爲上面這兩個包,yum庫裏面沒有對應的安裝文件,因此咱們只能採用rpm方式,本身下載安裝,下載地址爲:

http://pkgs.repoforge.org/libmcrypt/

之後若是庫裏面加入了支持文件,能夠yum安裝,就執行:yum install libmcrypt libmcrypt-devel

 

configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution

解決方法:yum install libxslt.x86_64 libxslt-devel.x86_64

 

最後整一個: yum updata;

最後有幾個不是別的參數,多是php版本更新的問題,之後編譯安裝的時候,能夠去掉。

configure: WARNING: unrecognized options: --enable-force-cgi-redirect, --with-libXML-dir, --with-XMLrpc, --enable-magic-quotes, --enable-zend-multibyte

預編譯到此完成。下面執行,make && make install 完成咱們的安裝過程。(make clean,make distclean)

cp ./php.ini-production /usr/local/php/etc/php.ini  

#複製php配置文件到安裝目錄

rm -rf /etc/php.ini   #刪除系統自帶配置文件 
ln -s /usr/local/php/etc/php.ini  /etc/php.ini    #添加軟連接 
cp  /usr/local/php/etc/php-fpm.conf.default   /usr/local/php/etc/php-fpm.conf      #拷貝模板文件爲php-fpm配置文件


首先修改下面來配置修改 /usr/local/php/etc/php-fpm.conf

vim /usr/local/php/etc/php-fpm.conf 
user = php    #設置php-fpm運行帳號爲php 
group = php   #設置php-fpm運行組爲php 
pid = run/php-fpm.pid    #取消前面的分號

該配置文件只用修改如下四點

; Note: Used when pm is set to either 'static' or 'dynamic' 
; Note: This value is mandatory. 
pm.max_children = 50

; The number of child processes created on startup. 
; Note: Used only when pm is set to 'dynamic' 
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2 
pm.start_servers = 10

; The desired minimum number of idle server processes. 
; Note: Used only when pm is set to 'dynamic' 
; Note: Mandatory when pm is set to 'dynamic' 
pm.min_spare_servers = 5

; The desired maximum number of idle server processes. 
; Note: Used only when pm is set to 'dynamic' 
; Note: Mandatory when pm is set to 'dynamic' 
pm.max_spare_servers = 35


cp ./sapi/fpm/init.d.php-fpm /usr/local/php/php-fpm     #設置 php-fpm開機啓動,連接php-fpm到啓動目錄

ln -s /usr/local/php/php-fpm /etc/rc.d/init.d/php-fpm


chmod +x /usr/local/php/php-fpm  #添加執行權限

chkconfig --add php-fpm 
chkconfig php-fpm on    #設置開機啓動 
vim /usr/local/php/etc/php.ini    #編輯配置文件 
找到:disable_functions = 
修改成:disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname 
#列出PHP能夠禁用的函數,若是某些程序須要用到這個函數,能夠刪除,取消禁用。 
找到:;date.timezone = 
修改成:date.timezone = Asia/Shanghai   #設置時區 
找到:expose_php = On 
修改成:expose_php = OFF  #禁止顯示php版本的信息。

 

以後配置nginx支持PHP程序:

 

配置fastcgi_params 文件

cd /etc/nginx/

vim fastcgi_params

將裏面內容替換爲

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1; 
fastcgi_param  SERVER_SOFTWARE    nginx; 
fastcgi_param  QUERY_STRING       $query_string; 
fastcgi_param  REQUEST_METHOD     $request_method; 
fastcgi_param  CONTENT_TYPE       $content_type; 
fastcgi_param  CONTENT_LENGTH     $content_length; 
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name; 
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name; 
fastcgi_param  REQUEST_URI        $request_uri; 
fastcgi_param  DOCUMENT_URI       $document_uri; 
fastcgi_param  DOCUMENT_ROOT      $document_root; 
fastcgi_param  SERVER_PROTOCOL    $server_protocol; 
fastcgi_param  REMOTE_ADDR        $remote_addr; 
fastcgi_param  REMOTE_PORT        $remote_port; 
fastcgi_param  SERVER_ADDR        $server_addr; 
fastcgi_param  SERVER_PORT        $server_port; 
fastcgi_param  SERVER_NAME        $server_name; 
# PHP only, required if PHP was built with --enable-force-cgi-redirect 
fastcgi_param  REDIRECT_STATUS    200;

保存退出

配置nginx.conf文件:

vim /usr/local/nginx/conf/nginx.conf      #編輯配置文件 
user   www  www;          #首行user去掉註釋,修改Nginx運行組爲www www;必須與/usr/local/php/etc/php-fpm.conf中的user,group配置相同,不然php運行出錯 
index  index.php  index.html index.htm;    #添加index.php 
  # 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; 
  } 
#取消FastCGI server部分location的註釋,並要注意fastcgi_param行的參數,改成$document_root$fastcgi_script_name,或者使用絕對路徑 
service nginxd restart  #重啓nginx

 

以後編輯/nginx/html/index.php

在其中添加

<?php 
phpinfo(); 
?>

保存退出

以後用web瀏覽器訪問 若是出現phpinfo畫面 表示服務成功,並能鏈接到php。

相關文章
相關標籤/搜索