Nginx+FastCGI編譯部署過程詳述
最近,因為工作的需要,我們用Nginx+FastCGI部署了一個高性能的Web服務器。在部署的過程中,我們遇到了很多問題,也參考了一些文章,發現很少有文章將整個編譯部署的過程講清楚的。鑒于此,根據我們項目組成功部署Nginx+FastCGI的經驗,我寫下了這篇文章,可供相關項目的開發人員參考。
首先,對于為什么要用Nginx+FastCGI部署高性能Web服務器,我就不贅述了,網上有很多的文章。
下面詳細介紹編譯部署的過程。
1. 軟件準備
(1) Linux機器
所有的程序都是部署在Linux操作系統上面的,因此建議要有一臺專門的機器來安裝Linux。我們使用的Linux是CentOS 7,大家可根據項目組的實際情況來選擇Linux的版本。
(2) Nginx源碼包
到Nginx的官網(http://nginx.org/en/download.html)上去下載***的源碼包,我們使用的是nginx-1.11.9.tar.gz。
(3) spawn_fastcgi源碼包
到網站https://github.com/lighttpd/spawn-fcgi/releases 上去下載源碼包spawn-fcgi-1.6.4.tar.gz。
(4) FastCGI源碼包
在百度上搜索并下載源碼包fcgi-2.4.1-SNAP-0910052249.tar.gz,也可到該網站上去下載:
http://www.filewatcher.com/d/Gentoo/distfiles/Other/fcgi-2.4.1-SNAP-0910052249.tar.gz.614929.html。
2. 編譯安裝
1)編譯安裝Nginx
***步,執行tar zxvf nginx-1.11.9.tar.gz 命令解壓文件到當前目錄下(具體的安裝包名根據你下載的Nginx包進行確定)。
第二步,進入解壓后的nginx-1.11.9目錄執行./configure –prefix=/usr/local/nginx命令。
第三步,執行make命令。
第四步,執行make install命令。
2)編譯安裝spawn_fastcgi
***步,執行tar zxvf spawn-fcgi-1.6.4.tar.gz 命令解壓文件到當前目錄下。
第二步,進入spawn-fcgi-1.6.4目錄執行./configure命令。
第三步,執行make命令。
第四部,將文件spawn-fcgi拷貝到/usr/local/nginx/sbin目錄下(拷貝之前如果沒有這個目錄,請手動創建)。
3)編譯安裝FastCGI
***步,執行tar jxvf fcgi-2.4.1-SNAP-0910052249.tar.gz 命令解壓文件到當前目錄下。
第二步,進入fcgi-2.4.1-SNAP-0910052249目錄執行./configure命令。
第三步,執行make命令。
第四步,執行make install命令。
3. 測試程序編寫及編譯
我們編寫了如下的測試程序test.c,代碼如下:
- #include <stdio.h>
- #include <fcgi_stdio.h>
- #include <stdlib.h>
- int main()
- {
- int count = 0;
- while (FCGI_Accept() >= 0)
- {
- printf("Content-type: text/html\r\n"
- "\r\n"
- ""
- "FastCGI Hello!"
- "Request number %d running on host%s "
- "Process ID: %d\n", ++count, getenv("SERVER_NAME"), getpid());
- }
- return 0;
- }
使用“gcc -g -o test test.c -lfcgi”命令編譯生成可執行文件test,然后將test拷貝到/usr/local/nginx/sbin目錄下。
4. Nginx配置
在/usr/local/nginx/conf/nginx.conf配置文件中的http節點的server子節點下添加如下配置:
- location ~ /test.cgi$ {
- fastcgi_pass 127.0.0.1:8088;
- fastcgi_index index.cgi;
- fastcgi_param SCRIPT_FILENAME fcgi$fastcgi_script_name;
- include fastcgi_params;
- }
5. 服務端啟動
(1) 啟動Nginx服務器
執行/usr/local/nginx/sbin/nginx命令啟動Nginx。
說明:
1)可用ps -ef | grep nginx命令查看Nginx啟動是否成功,正常情況下為兩個進程(一個主進程一個輔進程),示例如下:
- # ps -ef | grep nginx
- root 2886 1 0 May15 ? 00:00:00 nginx: master process ./nginx
- nobody 3406 2886 0 May15 ? 00:00:00 nginx: worker process
2)可用“kill -HUP 主進程id ”命令(如:kill -HUP 1)重新加載配置文件。
3)可用“kill -QUIT 主進程id” 命令(如:kill -QUIT 1)關閉Nginx。
(2) 啟動spawn-fcgi管理進程
執行“/usr/local/nginx/sbin/spawn-fcgi -a 127.0.0.1 -p 8088 -f /usr/local/nginx/sbin/test”命令啟動進程。
說明:
1)可用“netstat -an|grep 8088”命令檢查8088端口是否啟動監聽。
2)可用“ps -ef|grep test”命令檢查test進程是否啟動成功。
6. 使用Web前端訪問test
在瀏覽器中輸入URL地址“http://127.0.0.1/test.cgi”即可訪問到test的輸出。
【本文是51CTO專欄作者周兆熊的原創文章,作者微信公眾號:周氏邏輯(logiczhou)】