linux後台伺服器開發環境部署配置和驗證(nginx+apache+php-fpm+FASTCGI)
最後更新:2016-06-23
來源:互聯網
上載者:User
linux後台伺服器開發環境部署配置
引言
背景
隨著公司互連網業務的不斷增多,開發環境變得越來越複雜,為了便於統一伺服器端的開發部署環境,特製定本配置文檔。
使用軟體
CentOS 6.3(Linux version 2.6.32-279.el6.x86_64)
gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4)
本次配置
Nginx 1.5.8
Apache 2.4.7
php 5.3.26
目的
構造WEB前端技術架構,web前端的部署結構技術完全完成。
完整描述 nginx + apache + FASTCGI(C/C++) 和nginx + php-fpm +FASTCGI(PHP)兩種FASTCGI架構。
nginx 安裝
軟體準備
http://nginx.org/en/download.html
官網下載版本,nginx-1.5.8.tar.gz
http://www.pcre.org/
官網下載 pcre-8.34.tar.gz
http://zlib.net/
官網下載 zlib-1.2.5.tar.gz
http://www.openssl.org/source/
官網下載 openssl-1.0.1d.tar.gz
工作目錄準備
建立工作目錄 nginx_make,把上面下載的檔案都放到該目錄下。
解壓所有的 .tar.gz 檔案,對應出現個目錄。
安裝 pcre
cd pcre-8.34
./configure --prefix=/usr/local/pcre-8.34
make
make install
安裝zlib
如果本地已經安裝了 zlib ,可以不安裝了。
安裝步驟類似上面的,但是強烈建議編譯安裝的時候指定目錄和安裝版本。
安裝openssl
如果本地已經安裝 openssl,可以不安裝了。
安裝步驟類似上面的,但是強烈建議編譯安裝的時候指定目錄和安裝版本
安裝nginx
cd nginx-1.5.8
./configure --user=root --group=root --prefix=/usr/local/nginx-1.5.8 --pid-path=/usr/local/nginx-1.5.8/nginx.pid --error-log-path=/data/logs/nginx/err/nginx --http-log-path=/data/logs/nginx/acc/nginx --with-http_gzip_static_module --with-poll_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --with-pcre=../pcre-8.34 --with-cc-opt=-O2
make
make install
apache 安裝
軟體準備
http://httpd.apache.org/
官網下載版本,httpd-2.4.7.tar.gz
http://apr.apache.org/
官網下載 apr-1.5.0.tar.gz
http://apr.apache.org/
官網下載 apr-util-1.5.3.tar.gz
http://www.pcre.org/
官網下載 pcre-8.34.tar.gz
工作目錄準備
建立工作目錄 apache_make,把上面下載的檔案都放到該目錄下。
解壓所有的 .tar.gz 檔案,對應出現個目錄。
安裝 apr
cd apr-1.5.0
./configure --prefix=/usr/local/apr-1.5.0
make
make install
安裝 apr-util
cd apr-1.5.0
./configure --prefix=/usr/local/apr-util-1.5.3/ --with-apr=/usr/local/apr-1.5.3/bin/apr-1-config
安裝 pcre
cd pcre-8.34
./configure --prefix=/usr/local/pcre-8.34/ --with-apr=/usr/local/apr-1.5.3/bin/apr-1-config
參考上面已經安裝好的 pcre 。
安裝apache
cd httpd-2.4.7
./configure --prefix=/usr/local/apache2.4.7/ --with-pcre=/usr/local/pcre-8.34/ --with-apr=/usr/local/apr-1.5.0/ --with-apr-util=/usr/local/apr-util-1.5.3/
make
make install
php 安裝
軟體準備
http://www.php.net/releases/
官網下載版本,php-5.3.26.tar.gz
工作目錄準備
建立工作目錄 php_make,把上面下載的檔案都放到該目錄下。
解壓所有的 .tar.gz 檔案,對應出現個目錄。
構造 libphp5.so
編譯 php,構造 libphp5.so,用於 apache 解析 php。
cd php-5.3.26
make clean;
./configure --prefix=/usr/local/php-5.3.26 -with-apxs2=/usr/local/apache2.4.7/bin/apxs --with-curl --with-curlwrappers
make
make install
安裝 php-fpm
編譯 php,支援 php-fpm和 socket,並啟用curl模組,用於 nginx 以 FASTCGI 模式解析執行 php。
cd php-5.3.26
make clean;
./configure --prefix=/usr/local/php-5.3.26 --enable-fpm --enable-sockets --with-curl --with-curlwrappers
make
make install
安裝 php
cd php-5.3.26
make install
php.ini安裝
cd php-5.3.26
cp php.ini-development /usr/local/php-5.3.26/lib/php.ini
nginx+php-fpm 配置
啟動php-fpm
/usr/local/php-5.3.26/sbin/php-fpm -y /usr/local/php-5.3.26/etc/php-fpm.conf -c /usr/local/php-5.3.26/lib/php.ini
配置 nginx.conf
修改 /usr/local/nginx-1.5.8/conf/nginx.conf。
listen 8090;
charset utf-8;
location ~ \.php$ {
/usr/local/web_umsa/
FASTCGI_pass 127.0.0.1:9000;
FASTCGI_index index.php;
#FASTCGI_param SCRIPT_FILENAME $document_root$FASTCGI_script_name;
include FASTCGI_params;
}
配置FASTCGI_params
修改 /usr/local/nginx-1.5.8/conf/FASTCGI_params。
# PHP only, required if PHP was built with --enable-force-cgi-redirect
FASTCGI_param REDIRECT_STATUS 200;
FASTCGI_param SCRIPT_FILENAME $document_root$FASTCGI_script_name;
測試 phpinfo.php
按下面內容建立 php 測試檔案。
cat /usr/local/web_umsa/phpinfo.php
echo phpinfo();
?>
驗證FASTCGI模式php
tcpdump -ilo -XAvs0 port 9000
抓包,然後瀏覽器執行
http://169.254.10.12:8090/phpinfo.php
瀏覽器輸出PHP 的安裝配置資訊。
能看到抓包,9000 連接埠有資料發送,可以確認,傳輸的協議是 FASTCGI協議。
apache 配置
php5_module模組引導
啟用 /usr/local/apache2.4.7/conf/httpd.conf 裡面的。
LoadModule php5_module modules/libphp5.so
配置 Directory /
修改 /usr/local/apache2.4.7/conf/httpd.conf 裡面的。
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
配置 DocumentRoot
修改 /usr/local/apache2.4.7/conf/httpd.conf 裡面的。
DocumentRoot "/usr/local/web_umsa"
配置
修改 /usr/local/apache2.4.7/conf/httpd.conf 裡面的。
#支援cgi
ScriptAlias /cgi-bin/ "/usr/local/web_umsa/cgi-bin/"
#支援 FASTCGI
ScriptAlias /fcg-bin/ "/usr/local/web_umsa/fcgi-bin/"
配置
修改 /usr/local/apache2.4.7/conf/httpd.conf 裡面的。
AddType application/x-httpd-php .php .phtml .php3 .inc
AddType application/x-httpd-php-source .phps
配置
修改 /usr/local/apache2.4.7/conf/httpd.conf 裡面的。
AddHandler cgi-script .cgi .ums
Options FollowSymLinks
AllowOverride All
Order deny,allow
Allow from all
Options +ExecCGI
啟動 apache
/usr/local/apache2.4.7/bin/apachectl start
驗證 apache
http://169.254.10.12/phpinfo.php
http://169.254.10.12/
兩個訪問都能出來,證明安裝成功。
apache-FASTCGI(C/C++) 配置
mod_fcgid載入
檔案下載
官網 http://httpd.apache.org/mod_fcgid/ 下載
得到檔案 mod_fcgid-2.3.9.tar.gz
編譯安裝
把 mod_fcgid-2.3.9.tar.gz 檔案解壓到 apache 原代碼目錄 httpd-2.4.7,得到目錄
mod_fcgid-2.3.9,完整結構應該是 httpd-2.4.7/mod_fcgid-2.3.9。
執行apache 命令../bin/apachectl -k restart,把httpd 服務起來。
設定環境變數 APXS,設定後可查看效果
# echo $APXS
/usr/local/apache2.4.7/bin/apxs
其中的 /usr/local/apache2.4.7/bin/apxs 是剛才 apache 的安裝目錄。
執行目錄下面的
./configure.apxs;make;make install
查看安裝結果
# grep "mod_fcgid.so" /usr/local/apache2.4.7/conf/httpd.conf
LoadModule fcgid_module modules/mod_fcgid.so
能查看到已經啟用了 mod_fcgid 模組。
配置FASTCGI支援
配置
修改 /usr/local/apache2.4.7/conf/httpd.conf 裡面的。
SetHandler fcgid-script
AddHandler fcgid-script .fcgi .ums
Options FollowSymLinks
AllowOverride All
Order deny,allow
Allow from all
Options +ExecCGI
重啟 apache,../bin/apachectl -k restart。
測試FASTCGI(C/C++)
下載FASTCGI庫
官網http://www.FASTCGI.com/的http://www.FASTCGI.com/drupal/node/5位置(Current: download | docs | browse)下載 C/C++的開發包。最新版本是 2.4.1,得到檔案fcgi-2.4.1-SNAP-0910052249.tar.gz。
編譯庫
解壓檔案,並進入目錄。執行傳統命令
./configure;make
看到
ranlib .libs/libfcgi.a
表示庫已經生產,其他的編譯錯誤不理會(是C++ 的錯誤,版本太老了)。
執行命令ls libfcgi/.libs/ -al,可以查詢到 libfcgi.a和 libfcgi.so.0.0.0
動態庫和靜態庫都有了。
構造例子
進入目錄 exapmle,執行命令(編譯cgi並部署到指定目錄)
# gcc echo.c -o echo.ums ../libfcgi/.libs/libfcgi.a
#cp echo.ums /usr/local/web_umsa/fcgi-bin/
查看效果
http://169.254.10.12/fcgi-bin/echo.ums
可以看到頁面輸出:
Request number 8, Process ID: 28256
不斷重新整理頁面,進程編號不變,序號不斷增加。同時,伺服器端查看發現
# ps aux|grep echo.ums
該進程一直存在,進程編號和頁面一致。
開發環境驗證(僅限於內部驗證)
需要配置 nginx 轉寄,支援 .ums 解析。
#TCP長串連,nginx 作為 proxy
upstream tcp_keepalive {
server 127.0.0.1:8080;
keepalive 256;
}
#以php-fpm 實現的 fastcgi 部署方式
location ~ \.php$ {
root /data/php_project;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
#記得修改 fastcgi_params,增加配置
# PHP only, required if PHP was built with --enable-force-cgi-redirect
#fastcgi_param REDIRECT_STATUS 200;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
#以為 .fcgi,.ums 結尾的請求使用http協議轉寄給 tcpend
location ~* \.(fcgi|ums)$ {
#root root
# 向後端伺服器發起請求時添加指定的header頭資訊
#proxy_set_header Host $http_host;
# 向後端伺服器發送真實 IP
#proxy_set_header X-Real-IP $remote_addr;
# 讓後端如php能直接通過變數擷取真實IP
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tcpend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-By $server_addr:$server_port;
proxy_set_header X-Forwarded-For $remote_addr;
#proxy_set_header Connection "";
proxy_connect_timeout 5s;
proxy_read_timeout 10s;
proxy_send_timeout 5s;
}