Nginx+FastCGI編譯部署過程詳述
最近,因?yàn)楣ぷ鞯男枰?,我們用Nginx+FastCGI部署了一個(gè)高性能的Web服務(wù)器。在部署的過程中,我們遇到了很多問題,也參考了一些文章,發(fā)現(xiàn)很少有文章將整個(gè)編譯部署的過程講清楚的。鑒于此,根據(jù)我們項(xiàng)目組成功部署Nginx+FastCGI的經(jīng)驗(yàn),我寫下了這篇文章,可供相關(guān)項(xiàng)目的開發(fā)人員參考。
首先,對于為什么要用Nginx+FastCGI部署高性能Web服務(wù)器,我就不贅述了,網(wǎng)上有很多的文章。
下面詳細(xì)介紹編譯部署的過程。
1. 軟件準(zhǔn)備
(1) Linux機(jī)器
所有的程序都是部署在Linux操作系統(tǒng)上面的,因此建議要有一臺(tái)專門的機(jī)器來安裝Linux。我們使用的Linux是CentOS 7,大家可根據(jù)項(xiàng)目組的實(shí)際情況來選擇Linux的版本。
(2) Nginx源碼包
到Nginx的官網(wǎng)(http://nginx.org/en/download.html)上去下載***的源碼包,我們使用的是nginx-1.11.9.tar.gz。
(3) spawn_fastcgi源碼包
到網(wǎng)站https://github.com/lighttpd/spawn-fcgi/releases 上去下載源碼包spawn-fcgi-1.6.4.tar.gz。
(4) FastCGI源碼包
在百度上搜索并下載源碼包fcgi-2.4.1-SNAP-0910052249.tar.gz,也可到該網(wǎng)站上去下載:
http://www.filewatcher.com/d/Gentoo/distfiles/Other/fcgi-2.4.1-SNAP-0910052249.tar.gz.614929.html。
2. 編譯安裝
1)編譯安裝Nginx
***步,執(zhí)行tar zxvf nginx-1.11.9.tar.gz 命令解壓文件到當(dāng)前目錄下(具體的安裝包名根據(jù)你下載的Nginx包進(jìn)行確定)。
第二步,進(jìn)入解壓后的nginx-1.11.9目錄執(zhí)行./configure –prefix=/usr/local/nginx命令。
第三步,執(zhí)行make命令。
第四步,執(zhí)行make install命令。
2)編譯安裝spawn_fastcgi
***步,執(zhí)行tar zxvf spawn-fcgi-1.6.4.tar.gz 命令解壓文件到當(dāng)前目錄下。
第二步,進(jìn)入spawn-fcgi-1.6.4目錄執(zhí)行./configure命令。
第三步,執(zhí)行make命令。
第四部,將文件spawn-fcgi拷貝到/usr/local/nginx/sbin目錄下(拷貝之前如果沒有這個(gè)目錄,請手動(dòng)創(chuàng)建)。
3)編譯安裝FastCGI
***步,執(zhí)行tar jxvf fcgi-2.4.1-SNAP-0910052249.tar.gz 命令解壓文件到當(dāng)前目錄下。
第二步,進(jìn)入fcgi-2.4.1-SNAP-0910052249目錄執(zhí)行./configure命令。
第三步,執(zhí)行make命令。
第四步,執(zhí)行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”命令編譯生成可執(zhí)行文件test,然后將test拷貝到/usr/local/nginx/sbin目錄下。
4. Nginx配置
在/usr/local/nginx/conf/nginx.conf配置文件中的http節(jié)點(diǎn)的server子節(jié)點(diǎn)下添加如下配置:
- 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. 服務(wù)端啟動(dòng)
(1) 啟動(dòng)Nginx服務(wù)器
執(zhí)行/usr/local/nginx/sbin/nginx命令啟動(dòng)Nginx。
說明:
1)可用ps -ef | grep nginx命令查看Nginx啟動(dòng)是否成功,正常情況下為兩個(gè)進(jìn)程(一個(gè)主進(jìn)程一個(gè)輔進(jìn)程),示例如下:
- # 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 主進(jìn)程id ”命令(如:kill -HUP 1)重新加載配置文件。
3)可用“kill -QUIT 主進(jìn)程id” 命令(如:kill -QUIT 1)關(guān)閉Nginx。
(2) 啟動(dòng)spawn-fcgi管理進(jìn)程
執(zhí)行“/usr/local/nginx/sbin/spawn-fcgi -a 127.0.0.1 -p 8088 -f /usr/local/nginx/sbin/test”命令啟動(dòng)進(jìn)程。
說明:
1)可用“netstat -an|grep 8088”命令檢查8088端口是否啟動(dòng)監(jiān)聽。
2)可用“ps -ef|grep test”命令檢查test進(jìn)程是否啟動(dòng)成功。
6. 使用Web前端訪問test
在瀏覽器中輸入U(xiǎn)RL地址“http://127.0.0.1/test.cgi”即可訪問到test的輸出。
【本文是51CTO專欄作者周兆熊的原創(chuàng)文章,作者微信公眾號(hào):周氏邏輯(logiczhou)】