LAMP編譯實現

一、簡述LAMP:
二、HTTP2.4編譯安裝
三、源碼安裝MySQL5.6
四、源碼安裝php-5.6
五、配置http訪問PHP
六、配置php訪問mysql

實驗環境爲:
    php-fpm和msyql編譯爲同一臺主機(CentOS6.9)
    httpd單獨一臺主機(CentOS6.9)
一、簡述LAMP:
client http(請求index.php或者index.html)
    --->apache(httpd web服務器響應,如果是靜態文件,則直接響應,如果是動態請求則轉向下一步)
        --->php 接受請求(php解釋器通過fastcgi響應,如果需要查詢數據則轉向一下)
            --->透過mysql客戶端查詢數據庫(mysql驅動)  
                --->mysql服務器響應數據庫查詢(返回查詢結果)
LAMP:其中apache、http、php都可以分別安裝到不同機器上
http與php結合的方式:
    module
    fcgi
    php-fpm
httpd依賴於反向代理模塊以及專用於fastcgi反向代理模塊
    httpd-2.2默認沒有附帶專用fastcgi反向代理模塊,所以需要獨立安裝;
    httpd-2.4已自帶fastcgi反向模塊,此模塊爲mod_proxy_fcgi.so,它其實是作爲mod_proxy.so模塊的擴充       
    httpd-2.4以前的版本中,要麼把PHP作爲Apache的模塊運行,要麼添加一個第三方模塊支持PHP-FPM實現。
由於php有相關依賴性因此建議:
    安裝次序爲httpd或mysql,再裝php。
實驗環境:CenOS6.9 kernel-2.6
    
二、HTTP2.4編譯安裝
源碼編譯步驟:
    配置(configure),通常依賴gcc編譯器,binutils,glibc。配置軟件特性,檢查編譯環境,生成 Makefile文件
    編譯(make)
    安裝(make install)
--prefix配置安裝路徑,如果不配置該選項,安裝後可執行文件默認放在/usr/local/bin,
    庫文件默認放在/usr/local/lib,配置文件默認放在/usr/local/etc,其它的資源文件放在/usr /local/share

    如果配置--prefix,如: ./configure --prefix=/usr/local/test
    用了—prefix選項的另一個好處是卸載軟件或移植軟件。
    當某個安裝的軟件不再需要時,只須簡單的刪除該安裝目錄,就可以把軟件卸載得乾乾淨淨;
    移植軟件只需拷貝整個目錄到另外一個機器即可(相同的操作系統)。
    卸載程序,也可以在原來的make目錄下用一次make uninstall,但前提是make文件指定過uninstall。
1.依賴關係解決
依賴到的:apr、apr-util、pcre-devel、openssl-devel
http://archive.apache.org/dist/apr/  下載apr-1.5.0.tar.gz  apr-util-1.5.1.tar.gz  
httpd-2.4 依賴於1.4+及以上版本的apr
yum install pcre-devel openssl-devel gcc //這兩個依賴手動安裝
編譯步驟:
tar xvf apr-1.5.0.tar.gz
cd apr-1.5.0
./config --prefix=/usr/local/apr
make && make install

tar xvf apr-util-1.5.1.tar.gz
cd apr-util-1.5.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install
//編譯出問題。make clean清理重新編譯

2.編譯http2.4
tar xvf httpd-2.4.29.tar.gz
cd httpd-2.4.29

./configure --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --prefix=/usr/local/http24 --sysconfdir=/etc/http24/ --enable-so --enable-ssl --enable-rewrite --enable-zlib --enable-cgi --with-pcre --with-mpm=prefork --enable-modules=most --enable-mpms-shared=all

    --sysconfdir=/etc/httpd24  指定配置文件路徑
    --enable-so  啓動模塊動態裝卸載
    --enable-ssl 編譯ssl模塊
    --enable-cgi 支持cgi機制(能夠讓靜態web服務器能夠解析動態請求的一個協議)
    --enable-rewrite  支持url重寫     --Author : Leshami
    --with-zlib  支持數據包壓縮       --Blog   : http://blog.csdn.net/leshami
    --with-pcre  支持正則表達式
    --with-apr=/usr/local/apr  指明依賴的apr所在目錄
    --with-apr-util=/usr/local/apr-util/  指明依賴的apr-util所在的目錄
    --enable-modules=most      啓用的模塊
    --enable-mpms-shared=all   以共享方式編譯的模塊
    --with-mpm=prefork         指明httpd的工作方式爲prefork
make && make install

執行make的是否發現錯誤:

exports.c:1250: note: previous definition of 'ap_hack_apr_xml_insert_uri' was here
exports.c:1675: error: redefinition of 'ap_hack_apu_version'
exports.c:1259: note: previous definition of 'ap_hack_apu_version' was here
exports.c:1676: error: redefinition of 'ap_hack_apu_version_string'
exports.c:1260: note: previous definition of 'ap_hack_apu_version_string' was here
........

[root@localhost httpd-2.4.29]# cat /tmp/http.bianyi |grep -v note  //http.bianyi是所有編譯提示"previos definition"的
[root@localhost httpd-2.4.29]# a=$(cat /tmp/http.bianyi |grep -v note  |sort -nr -k2 |cut -d':' -f2 )
[root@localhost httpd-2.4.29]# for i in $a; do sed -i "${i}d" ./server/exports.c ;done  //sed替換變量的時候用"${}"

[root@localhost httpd-2.4.29]# cat ./server/exports.c  |grep ap_hack_apu_version_string
const void *ap_hack_apu_version_string = (const void *)apu_version_string;
const void *ap_hack_apu_version_string = (const void *)apu_version_string;
//發現重複定義了,註釋或者刪除其中一個。
make clean && make install

3.後續步驟:
vim /etc/man.config  //配置man手冊
MANPATH /usr/local/httpd24/man

[root@localhost httpd-2.4.29]# echo "export PATH=$PATH:/usr/local/http24/bin" > /etc/profile.d/httpd24.sh //命令手冊
[root@localhost httpd-2.4.29]# source /etc/profile

[root@localhost http24]# cd /usr/local/http24/
注:啓動文件pid文件位置要配置成與/usr/local/apache/bin/apachectl -V看到的pid位置一致
[root@localhost http24]# ./bin/apachectl -V

Server version: Apache/2.4.29 (Unix)
Server built:   Feb  4 2018 03:14:13
Server's Module Magic Number: 20120211:68
Server loaded:  APR 1.5.0, APR-UTIL 1.5.1
Compiled using: APR 1.5.0, APR-UTIL 1.5.1
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/usr/local/http24"
 -D SUEXEC_BIN="/usr/local/http24/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/etc/http24//mime.types"
 -D SERVER_CONFIG_FILE="/etc/http24//httpd.conf"

[root@localhost http24]# ./bin/apachectl -V |grep -i pid
 -D DEFAULT_PIDLOG="logs/httpd.pid"

啓動腳本:/etc/init.d/httpd24

[root@localhost init.d]# cat /etc/init.d/httpd |grep -v "^#"
. /etc/rc.d/init.d/functions
if [ -f /etc/http24 ]; then
        . /etc/http24
fi
HTTPD_LANG=${HTTPD_LANG-"C"}
INITLOG_ARGS=""
apachectl=/usr/local/http24/bin/apachectl
httpd=${HTTPD-/usr/local/http24/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/usr/local/http24/logs/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}
RETVAL=0
STOP_TIMEOUT=${STOP_TIMEOUT-10}
start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
stop() {
        status -p ${pidfile} $httpd > /dev/null
        if [[ $? = 0 ]]; then
                echo -n $"Stopping $prog: "
                killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd
        else
                echo -n $"Stopping $prog: "
                success
        fi
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading $prog: "
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
        RETVAL=6
        echo $"not reloading due to configuration syntax error"
        failure $"not reloading $httpd due to configuration syntax error"
    else
        # Force LSB behaviour from killproc
        LSB=1 killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
        if [ $RETVAL -eq 7 ]; then
            failure $"httpd shutdown"
        fi
    fi
    echo
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status -p ${pidfile} $httpd
        RETVAL=$?
        ;;
  restart)
        stop
        start
        ;;
  condrestart|try-restart)
        if status -p ${pidfile} $httpd >&/dev/null; then
                stop
                start
        fi
        ;;
  force-reload|reload)
        reload
        ;;
  graceful|help|configtest|fullstatus)
        $apachectl $@
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}"
        RETVAL=2
esac
exit $RETVAL

[root@localhost init.d]# cat /etc/init.d/httpd |grep -v "^#"
[root@localhost init.d]# chkconfig --add httpd
[root@localhost init.d]# service httpd status

4.測試訪問
vim /etc/http24/httpd.conf //尾部追加幾行

<Location /server-status>
    SetHandler server-status
    Allow from 192.168.2.0
</Location>

[root@localhost http24]# cat ./htdocs/index.html << EOF

> <html>
>   <body> <h1> It works </h1> </body>
> </html>
> EOF

三、源碼安裝MySQL5.6
https://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html //參數說明
1.依賴關係
有關MySQL編譯參數

  CMAKE_BUILD_TYPE            編譯的版本類型:RelWithDebInfo和Debug,不同之處是RelWithDebInfo會進行優化。
  CMAKE_INSTALL_PREFIX        指定make install安裝的目標路徑。
  SYSCONFDIR                  指定配置文件的默認路徑。
  MYSQL_DATADIR               指定data目錄的默認路徑。
  WITH_DEBUG                  指定是否有debugging信息,一般用於源碼調試時,打開WITH_DEBUG,生產環境關閉。
  ENABLED_PROFILING           指定是否可以使用show profile顯示操作執行的詳細信息。
  DEFAULT_CHARSET             指定默認字符集,可以在啓動的配置文件中指定。
  DEFAULT_COLLATION           指定默認字符比較、排序的規則。
  WITH_EXTRA_CHARSETS         指定其他可能使用的字符集。
  WITH_SSL                    指定SSL的類型,從5.6.6開始默認bundled類型,此外也可以指定SSL庫的路徑地址。
  WITH_ZLIB                   指定zlib的類型,用於壓縮功能。
  ENABLED_LOCAL_INFILE        指定是否允許使用load data infile功能。
  WITH_EMBEDDED_SERVER        指定是否編譯libmysqld嵌入式庫。
  INSTALL_LAYOUT              指定安裝的佈局類型。
  WITH_storage_STORAGE_ENGINE 指定編譯支持的存儲引擎,默認支持MyISAM,MERGE,MEMORY,CSV存儲引擎。

詳細參數可參考 http://dev.mysql.com/doc/refman/5.5/en/source-configuration-options.html    
yum install gcc gcc+c++  cmake bison m4 ncurses-devel perl per-devel bison-devel autoconf -y  //MySQL5.5之後要用cmake編譯
==========================================//源碼安裝和下載方式(可選)
# wget http://www.cmake.org/files/v2.8/cmake-2.8.11.1.tar.gz
# wget http://ftp.gnu.org/gnu/bison/bison-2.7.tar.gz
# wget http://ftp.gnu.org/gnu/m4/m4-1.4.16.tar.gz
========================================================
源碼包下載方法:https://www.mysql.com/->DOWNLOADS->Archives->MySQL Community Server->Operating System:[Source Code]->OS Version:[Generic Linux]
https://downloads.mysql.com/archives/get/file/mysql-5.6.12.tar.gz

2.編譯安裝
[root@www mysql-5.6.12]# groupadd mysql
[root@www mysql-5.6.12]# useradd -g mysql mysql
[root@www mysql-5.6.12]# mkdir /usr/local/mysql
[root@www mysql-5.6.12]# chown mysql:mysql /data /usr/local/mysql

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock  \
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=utf8,gbk  \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/data/ -DSYSCONFDIR=/etc/mysql/ \
-DWITH_SSL=bundled -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DENABLE_DOWNLOADS=1

預編譯出錯,刪除下面文件,重新編譯安裝。
#rm -f CMakeCache.txt    
make clean 清空make
make報錯:

初始化操作:
cd /usr/local/mysql
chmod +x scripts/mysql_install_db
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /usr/init.d/mysqld
chkconfig mysqld on
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
[root@localhost mysql]# mysql -uroot
mysql> SET PASSWORD = PASSWORD('mysql5635');

四、源碼安裝php-5.6
注意:實驗環境是php和mysql一臺機器,http獨立一臺
1.依賴處理
[root@localhost yum.repos.d]# yum install libmcrypt libmcrypt-devel mhash mhash-devel libevent libevent-devel libxml2 libxml2-devel bzip2-devel libcurl-devel openssl-devel -y
mcrypt擴展庫可以實現加密解密功能,就是既能將明文加密,也可以密文還原。
mhash是基於離散數學原理的不可逆向的php加密方式擴展庫,其在默認情況下不開啓。
mhash的可以用於創建校驗數值,消息摘要,消息認證碼,以及無需原文的關鍵信息保存(如密碼)等。
libevent是一個異步事件通知庫文件,其API提供了在某文件描述上發生某事件時或其超時時執行回調函數的機制
    它主要用來替換事件驅動的網絡服務器上的event loop機制。
    目前來說, libevent支持/dev/poll、kqueue、select、poll、epoll及Solaris的event ports。
bzip2 是一個基於Burrows-Wheeler 變換的無損壓縮軟件能夠高效的完成文件數據的壓縮
libcurl主要功能就是用不同的協議連接和溝通不同的服務器,也就是相當封裝了的sockPHP,允許你用不同的協議連接和溝通不同的服務器
圖形相關的rpm包 //對應的錯誤提示:JIS-mapped Japanese font support in GD
    # yum install libjpeg-devel libpng-devel freetype-devel

2.編譯安裝    

./configure \ 
--prefix=/usr/local/php \
--with-config-file-path=/etc/php \
--enable-inline-optimization \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-opcache \
--enable-fpm \
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql \
--with-gettext \
--enable-mbstring \
--with-iconv \
--with-mcrypt \
--with-mhash \
--with-openssl \
--enable-bcmath \
--enable-soap \
--with-libxml-dir \
--enable-pcntl \
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-sockets \
--with-curl \
--with-zlib \
--enable-zip \
--with-bz2 \
--with-gd \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir

報錯信息:checking for known struct flock definition... configure: error: Don't know how to define struct flock on this system, set --enable-opcache=no
[root@wolf php-5.6.33]# echo "/usr/local/mysql/lib" >> /etc/ld.so.conf.d/local.conf    //mysql的庫文件路徑

注意:

--with-mysql=/usr/local/mysql //mysql的安裝目錄
--with-mysqli=/usr/local/mysql/bin/mysql_config \  //mysqli擴展技術不僅可以調用MySQL的存儲過程、處理MySQL事務,而且還可以使訪問數據庫工作變得更加穩定。
--with-pdo-mysql=/usr/local/mysql \
--with-apxs2=/usr/local/apache/bin/apxs //整合 apache,apxs功能是使用mod_so中的LoadModule指令,加載指定模塊到 apache,要求 apache 要打開SO模塊
--prefix=/usr/local/php //# 指定 php 安裝目錄
--with-config-file-path=/usr/local/php/etc //# 指定php.ini位置
# 選項指令 --with-iconv-dir 用於 PHP 編譯時指定 iconv 在系統裏的路徑,否則會掃描默認路徑。
--with-iconv-dir=/usr/local 
--with-freetype-dir   打開對freetype字體庫的支持 
--with-jpeg-dir   打開對jpeg圖片的支持 
--with-png-dir   打開對png圖片的支持 
--with-zlib-dir   打開zlib庫的支持,用於http壓縮傳輸
--with-libxml-dir   打開libxml2庫的支持
--disable-rpath    關閉額外的運行庫文件 
--enable-bcmath    打開圖片大小調整,用到zabbix監控的時候用到了這個模塊
--enable-shmop --enable-sysvsem  這樣就使得你的PHP系統可以處理相關的IPC函數了。
--enable-inline-optimization  優化線程
--with-curl    打開curl瀏覽工具的支持 
--with-curlwrappers    運用curl工具打開url流 
--enable-mbregex
--enable-fpm 打上PHP-fpm 補丁後纔有這個參數,CGI方式安裝的啓動程序
--enable-mbstring    多字節,字符串的支持 
--with-mcrypt                    mcrypt算法擴展
--with-mhash                     mhash算法擴展
--with-gd    打開gd庫的支持 
--enable-gd-native-ttf   支持TrueType字符串函數庫
--with-openssl      openssl的支持,加密傳輸https時用到的
--enable-pcntl   freeTDS需要用到的,可能是鏈接mssql 纔用到
--enable-sockets     打開 sockets 支持
--with-xmlrpc    打開xml-rpc的c語言 
--enable-zip   打開對zip的支持 
--enable-ftp   打開ftp的支持 
--with-bz2    打開對bz2文件的支持        
--without-iconv   關閉iconv函數,字符集間的轉換 
--with-ttf     打開freetype1.*的支持,可以不加了 
--with-xsl     打開XSLT 文件支持,擴展了libXML2庫 ,需要libxslt軟件 
--with-gettext     打開gnu 的gettext 支持,編碼庫用到 
--with-pear    打開pear命令的支持,PHP擴展用的 
--enable-calendar    打開日曆擴展功能
--enable-exif    圖片的元數據支持 
--enable-magic-quotes    魔術引用的支持 
--disable-debug    關閉調試模式 
--with-mime-magic=/usr/share/file/magic.mime      魔術頭文件位置
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的正則庫案安裝位置
--enable-zend-multibyte         支持zend的多字節

make && make install

3.後續處理
[root@wolf php]# echo "export PATH=$PATH:/usr/local/php/bin:/usr/loca/php/sin" > /etc/profile.d/php.sh
[root@wolf php]# source /etc/profile
[root@wolf php-5.6.33]# cp php.ini-production /usr/local/php/etc/php.ini
[root@wolf php-5.6.33]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
[root@wolf php-5.6.33]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@wolf php-5.6.33]# chmod +x /etc/init.d/php-fpm
[root@wolf php-5.6.33]# chkconfig --add php-fpm
[root@wolf php-5.6.33]# vim /etc/man.config //添加MANPATH /usr/local/php/php
[root@wolf php]# chkconfig mysqld on
[root@wolf php]# chkconfig php-fpm on
[root@wolf php]# service php-fpm start
[root@wolf php]# php-fpm -t  //測試語法

4.修改php-fpm監聽地址爲非127.0.0.1
修改 /usr/local/php/etc/php-fpm.conf
listen = 192.168.2.110:9000

五、配置http訪問PHP
原理:
1)、動態模塊方式:
  prefork模式使用libphp5模塊
   worker和event模式則使用libphp5-zts模塊

2)、CGI方式:
CGI(Common Gateway Interface 簡稱通用網關接口)。
CGI是外部應用程序(CGI程序)與Web服務器之間的接口標準,是在CGI程序和Web服務器之間傳遞信息的過程。
CGI規範允許Web服務器執行外部程序,並將它們的輸出發送給Web瀏覽器,
    CGI將Web的一組簡單的靜態超媒體文檔變成一個完整的新的交互式媒體。
其工作流程如下:
a、瀏覽器通過HTML表單或超鏈接請求指向一個CGI應用程序的URL。
b、服務器收發到請求。
c、服務器執行指定CGI應用程序(開啓進程)
d、CGI應用程序執行所需要的操作,通常是基於瀏覽者輸入的內容。
e、CGI應用程序把結果格式化爲網絡服務器和瀏覽器能夠理解的文檔(通常是HTML網頁)。
f、網絡服務器把結果返回到瀏覽器中(銷燬進程)

3)、FastCGI方式:
    FastCGI像是一個常駐(long-live)型的CGI,它可以一直執行着,只要激活後,不會每次都要花費時間去fork一次。
    (這是CGI最爲人詬病的fork-and-execute 模式)。
    它還支持分佈式的運算, 即 FastCGI 程序可以在網站服務器以外的主機上執行並且接受來自其它網站服務器來的請求。

a、Web Server啓動時載入FastCGI進程管理器(IIS ISAPI或Apache Module)
b、FastCGI進程管理器自身初始化,啓動多個CGI解釋器進程(可見多個php-cgi)並等待來自Web Server的連接。
c、當客戶端請求到達Web Server時,FastCGI進程管理器選擇並連接到一個CGI解釋器。
    Web server將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi。
e、FastCGI子進程完成處理後將標準輸出和錯誤信息從同一連接返回Web Server。
    當FastCGI子進程關閉連接時,請求便告處理完成。
   FastCGI子進程接着等待並處理來自FastCGI進程管理器(運行在Web Server中)的下一個連接。
   在CGI模式中,php-cgi在此便退出了。

4)、CGI與FastCGI兩者差異主要在於:
    CGI在處理任何一個請求需要開啓進程,銷燬進程,開銷較大
    FastCGI會在初始化的時候啓動多個cgi進程,監聽來自網絡的請求;
    當處理完畢任務後則由FastCGI進程管理器回收管理,省去反覆創建回收的開銷。
    
1.單臺機器上設置
# vim  /etc/httpd24/httpd.conf     ###注意此處,我這裏是單獨編譯安裝的httpd2.4版本,所以路徑有所不同

    LoadModule proxy_module  modeles/mod_proxy.so
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
    AddType  application/x-httpd-php  .php   
    AddType  application/x-httpd-php-source  .phps
    ProxyRequests Off     ###關閉正向代理,開啓下行的反向代理
    ProxyPassMatch ^/(.*\.php)$  fcgi://127.0.0.1:9000/usr/local/http24/htdocs/$1

# service httpd24 restart
    Stopping httpd24:             [  OK  ]
    Starting httpd24:             [  OK  ]

[root@localhost htdocs]# echo "
<html>
<h1> Test php page </h1>
<?php
phpinfo()
?>
</html>" >> /usr/local/http24/htdocs/test.php

2.分離式設置
# vim  /etc/httpd24/httpd.conf    
    LoadModule proxy_module  modeles/mod_proxy.so
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

    AddType  application/x-httpd-php  .php   
    AddType  application/x-httpd-php-source  .phps

    ProxyRequests Off     
    ProxyPassMatch ^/(.*\.php)$  fcgi://192.168.2.110:9000/usr/local/http24/htdocs/$1
Aapache 在配置反向代理時,應指定PHP服務器的IP地址及相應端口號,前後端路徑可以不一致,後端應指定絕對路徑
    如前端爲/var/www/html,後端爲/website/www,則fcgi://127.0.0.1:9000/website/www/$1

# service httpd24 restart
    Stopping httpd24:             [  OK  ]
    Starting httpd24:             [  OK  ]
    
php-fpm所在機器上創建測試頁:
[root@wolf htdocs]#
[root@wolf htdocs]# echo "
<html>
<h1> Test php page </h1>
<?php
phpinfo()
?>
</html>" >> /htdocs/index.php

3.假如不能看到info界面
iptables -F
setenforce 0
檢查php-fpm.conf 地址和端口是否正確等

六、配置php訪問mysql
PHP與MySQL的連接有三種API接口分別是:
    PHP的MySQL擴展
    PHP的mysqli擴展
    PHP數據對象(PDO)
這裏直接少mysql擴展的用法,其他用法請自行參考博客:https://www.jianshu.com/p/0a79847c8151
1.PHP與Mysql擴展(本擴展自 PHP 5.5.0 起已廢棄,並在將來會被移除),PHP原生的方式去連接數據庫,是面向過程的
在php-fpm機器上
[root@wolf htdocs]# cat mysql.php
[root@wolf htdocs]# cat mysql.php

<?php
$mysql_conf = array(
    'host'    => '127.0.0.1:3306',
    'db'      => 'mysql',
    'db_user' => 'wolf',
    'db_pwd'  => 'wolf',
    );
$mysql_conn = @mysql_connect($mysql_conf['host'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);
if (!$mysql_conn) {
    die("could not connect to the database:\n" . mysql_error());//診斷連接錯誤
}
mysql_query("set names 'utf8'");//編碼轉化
$select_db = mysql_select_db($mysql_conf['db']);
if (!$select_db) {
    die("could not connect to the db:\n" .  mysql_error());
}
else
    echo "Succeed";
mysql_close($mysql_conn);
?>

不要忘了:vim /usr/local/mysql/my.cnf 在mysqld下添加skip_name_resolve=on


參考博客:
http://php.net/manual/zh/
http://blog.csdn.net/leshami/article/details/51944920
https://www.cnblogs.com/joshua317/articles/5989781.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章