通常來說httpd用來處理靜態的網頁請求,動態的資源請求以前是通過CGI的方式進行處理的,但是CGI的方式的處理過程是這樣:有動態資源請求,服務器會fork一個CGI進程進行資源處理,處理完成后這個進程會退出,當再有新的動態資源請求,又會fork一個進程,這樣的效率是很低的。后來就有了通過加載php模塊的方式,即:httpd服務器啟動之后會自動加載php動態資源處理模塊,采用進程間通信方式進行處理動態資源,當有動態資源請求的時候會通過這個php模塊進行處理,這樣就不需要再頻繁啟動CGI進程了,但是每次修改php配置文件都需要重啟httpd進程來重讀配置。以此就衍生了fast-cgi的處理方式。
fast-cgi和cgi的區別在于:
-
當有動態資源請求的時候cgi要fork一個cgi進程來處理,然后退出cgi進程,效率低下;
-
fast-cgi通過php-fpm進程管理器進行php進程的管理,這個進程是常駐類型的,當有動態資源請求的時候會通過php代理模塊自動轉發到后臺的php進程進行處理,這樣就大大提高了效率;
-
fast-cgi的httpd和php可以部署在同一臺主機,也可以分開部署,更靈活的應對不同的業務場景;
下面詳細介紹通過fast-cgi的方式在三臺不同的主機之間通過lamp部署phpwind:
三臺主機ip配置:
httpd主機:192.168.11.152
php主機:192.168.11.154
mariadb主機:192.168.11.155
在實驗之前先關閉selinux和防火墻,以方便實驗的進行。
-
三臺主機需要安裝各自的組件:
-
httpd主機:安裝httpd;
yum install -y httpd
-
php主機:安裝php-fpm組件和php-mysql組件等;
yum install php-fpm
-
mariadb主機:安裝mariadb-server提供數據庫服務;
yum install mariadb-server
注意:
php-fpm是php的進程管理器,負責設置啟動多少個php進程,最大空閑進程等信息。在php5.3,php-fpm默認是不提供的,而是作為第三方補丁包的方式,如果需要還要進行編譯安裝。所以此處采用php5.4,而centos7之后默認提供php5.4的安裝包,所以此處主機都以centos7為例進行介紹。
-
-
配置php主機的php-fpm配置文件,位于/etc/php-fpm.d/www.conf,有以下幾項需要修改:
listen = 192.168.11.154:9000 #修改服務監聽在本地哪個地址的哪個端口上,如果為空則表示本機所有地址# listen.allowed_clients = 192.168.11.152 #允許那臺主機作為客戶端連接到本php服務器# php_value[session.save_path] = /var/lib/php/session #此處為php的session會話路徑,默認此路徑不存在,需要手動創建# user = apache #默認進程運行用戶# group = apache #默認進程運行組#
手動創建php session路徑,并設置路徑屬主屬組為apache:
mkdir -pv /var/lib/php/session chown apache:apache /var/lib/php/session
啟動php-fpm服務:
systemctl start php-fpm
-
在ttpd主機的/etc/httpd/conf.d路徑下創建virtualhosts.conf的配置文件,配置文件如下:
注意:
首先需要確保httpd已經加載了:proxy_fcgi_module (shared)模塊,通過httpd -M命令查看;
proxyrequests off表示關閉正向代理;
ProxyPassMatch ^/(.*.php)$ fcgi://192.168.11.154:9000/data/mysite/www/html/$1表示當有后綴名為php的動態資源請求的時候轉發到ip位192.168.11.154的主機進行處理;
-
在httpd服務器把phpwind壓縮包拷貝到配置文件指定的documentroot路徑,即/data/mysite/www/html路徑下:
注意:
此處把phpwind路徑中的upload做了一個軟連接到此處,方便管理。如果要允許通過軟連接的方式訪問站點,則配置文件需要加上options followsymlinks選項;
-
在php主機建立同樣的documentroot路徑,然后把phpwind也拷貝到此路徑下并做軟連接。原因是因為phpwind既有靜態資源也有動態資源,靜態資源通過httpd服務器提供,動態資源通過php主機提供,所以兩臺主機都需要提供此路徑和phpwind文件。
-
此時瀏覽器通過192.168.11.152/phpwind應該就可以訪問到phpwind了,然后按照phpwind的設置向導進行數據庫的配置:
-
在mariadb服務器創建數據庫和用戶:
mysql -uroot -p #root用戶登錄數據庫# create database phpwind; #創建phpwind數據庫# grant all on phpwind.* to 'phpwind'@'192.168.11.%' identified by '1234567a'; #授權phpwind用戶只能從192.168.11.*網段登錄數據庫并對phpwind數據庫具有所有權限#
注意:
mariadb數據庫默認會做ip地址到主機名的反向解析,所以需要在配置文件中關閉此功能:
在/etc/my.cnf.d/server.cnf的[mysqld]下添加skip_name_resolve=ON即可;
-
按照創建的數據庫信息填寫即可:
至此,通過fast-cgi部署phpwind成功。
-
接下來通過openssl為站點部署https和dns,此處把mariadb服務器也作為dns服務器和CA服務器:
-
部署dns服務器:
yum install bind #通過安裝bind部署dns#
-
修改/etc/named.conf配置文件:
listen-on port 53 { 127.0.0.1; 192.168.11.155; }; #修改本地監聽地址# allow-query { any; }; #允許所有主機做查詢# dnssec-enable no; #禁止dnssec# dnssec-validation no; #禁止dnssec#
-
修改/etc/named.rfc1912.zones,配置zone文件:
zone "phpwind.wzh" IN { type master; file "phpwind.wzh.zone"; } #添加phpwind.wzh站點的zone配置#
-
在/var/named/下創建phpwind.wzh.zone文件,配置如下:
-
-
配置CA服務器:
-
生成CA私鑰文件和自簽名證書:
(umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048) openssl req -new -x509 –key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
-
生成index.txt和serial文件:
touch /etc/pki/CA/index.txt echo 01 > /etc/pki/CA/serial
-
httpd安裝mod_ssl模塊:
yum install -y mod_ssl
-
生成本地私鑰文件和證書申請文件,然后發給CA服務器做證書簽發:
(umask 066; openssl genrsa -out /etc/pki/tls/private/test.key 2048) openssl req -new -key /etc/pki/tls/private/test.key -days 365 -out etc/pki/tls/test.csr openssl ca -in /tmp/test.csr –out /etc/pki/CA/certs/test.crt -days 365
注意:
httpd服務器的證書申請文件的默認國家,省,公司名稱三項必須和CA一致 。
CommonName必須和網站名一致。
-
修改/etc/httpd/conf.d/virtaulhosts.conf文件為:
-
瀏覽器導入CA自簽名證書,然后通過https://www.phpwind.wzh/phpwind/index.php訪問站點,如果正常,則實驗成功:
-
-
原創文章,作者:王子豪,如若轉載,請注明出處:http://www.www58058.com/77434