nginx+fastcgi+c/c++搭建高性能Web框架
1.Nginx
1.1.安裝
Nginx 的中文維基 http://wiki.codemongers.com/NginxChs 下載 Nginx 0.6.26(開發版)(請下載最新版本)
tar zxvf nginx-0.6.26.tar.gz
./configure,注意了類似checking for *** ... not found項,可能是依賴包沒有,則需要安裝依賴包
缺少PCRE,sudo apt-get install pcre安裝。或者去:http://www.pcre.org/
如果缺少OpenSSL,sudo apt-get install libssl-dev,或者去:http://www.openssl.org
如果缺少zlib,可以apt-get install zlib1g,或者http://www.zlib.net/
配置請參考:http://wiki.codemongers.com/NginxChsInstall 可以選擇安裝模塊
make & make install
默認安裝在/usr/local/nginx下
1.2.管理
執行選項
-c </path/to/config> 為 Nginx 指定一個配置文件,來代替缺省的。
-t 不運行,而僅僅測試配置文件。nginx 將檢查配置文件的語法的正確性,并嘗試打開配置文件中所引用到的文件。
-v 顯示 nginx 的版本。
-V 顯示 nginx 的版本,編譯器版本和配置參數。
檢查配置文件
$ sudo nginx -t
2008/03/12 19:15:11 info 12384#0: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
2008/03/12 19:15:11 info 12384#0: the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully
啟動
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
查看nginx主進程號
$ ps -ef | grep "nginx: master process"
| grep -v "grep"
| awk -F ' ' '{print $2}
26010
重新加載配置文件
$sudo kill -HUP 26010
通過系統的信號控制 Nginx
可以使用信號系統來控制主進程。默認,nginx 將其主進程的 pid 寫入到 /usr/local/nginx/logs/nginx.pid 文件中。通過傳遞參數給 ./configure 或使用 pid 指令,來改變該文件的位置。
主進程可以處理以下的信號:
命令 說明 備注
TERM, INT 快速關閉
QUIT 從容關閉
HUP 重載配置 用新的配置開始新的工作進程 從容關閉舊的工作進程
USR1 重新打開日志文件
USR2 平滑升級可執行程序
WINCH 從容關閉工作進程
默認目錄
主目錄:/usr/local/nginx/
配置目錄:/usr/local/nginx/conf/
root目錄:/usr/local/nginx/html/
可執行文件路徑:/usr/local/nginx/sbin/
2.FastCGI
2.1.安裝lighttpd的spawn-fastcgi
下載http://www.lighttpd.net/download/lighttpd-1.4.19.tar.gz
./configure
make
cp ./src/spawn-fcgi /usr/local/nginx/sbin/
2.2.安裝fastcgi庫
下載http://www.fastcgi.com/dist/fcgi.tar.gz
./configure
make
make install
2.3.Hello world
#include <iostream>
#include <fcgi_stdio.h>
using namespace std;
int main()
{
/* Initialization Code */
int count = 0;
/* Start of response loop */
while (FCGI_Accept() >= 0)
{
//* body of response loop /*/
printf("Content-type: text/html/r/n"
"/r/n"
""
"FastCGI Hello/! (C, fcgi_stdio library)"
"Request number %d running on host %s "
"Process ID: %d/n",
/++count,
getenv("SERVER_NAME"), getpid());
}
?
/* End of response loop */
return 0;
}
編譯后為FastCGISameple
2.4.啟動Spawn-cgi
/usr/local/nginx/sbin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 25 -u www -f /usr/local/nginx/fcgi/FactCGISample
2.5.修改Nginx配置文件
vi /usr/local/nginx/conf/nginx.conf
location ~ /.cgi$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
別忘了,重新加載配置文件
$sudo kill -HUP 26010
打開瀏覽器,輸入http://localhost/1.cgi ,就顯示
FastCGI Hello! (C, fcgi_stdio library)Request number 1 running on host localhost Process
?
ID: 25473
3.webbench壓力測試工具
下載:http://home.tiscali.cz:8080/~cz210552/distfiles/webbench-1.5.tar.gz
安裝:
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install
使用:
webbench -c 500 -t 30 http://127.0.0.1/test.jpg
?
500是并發連接數,30是時間單位是秒
?
用ab測試的結果,在我的虛擬機上,看起來性能很不錯
(Apache Bench是Apache自帶的工具包)
?
ab -n 10000 -c 100 http://127.0.0.1/1.cgi
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests
Server Software: nginx/0.7.38
Server Hostname: 127.0.0.1
Server Port: 80
Document Path: /1.cgi
Document Length: 143 bytes
Concurrency Level: 100
Time taken for tests: 3.982 seconds
Complete requests: 10000
Failed requests: 8399
(Connect: 0, Receive: 0, Length: 8399, Exceptions: 0)
Write errors: 0
Total transferred: 2658399 bytes
HTML transferred: 1438399 bytes
Requests per second: 2511.06 [#/sec] (mean)
Time per request: 39.824 [ms] (mean)
Time per request: 0.398 [ms] (mean, across all concurrent requests)
Transfer rate: 651.89 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 4.6 0 51
Processing: 22 39 6.8 36 93
Waiting: 4 39 6.8 36 93
Total: 24 39 8.2 36 97
Percentage of the requests served within a certain time (ms)
50% 36
66% 39
75% 41
80% 42
90% 48
95% 54
98% 70
99% 84
100% 97 (longest request)
4.Nginx模塊
模塊列表
http://wiki.codemongers.com/NginxModules
FastCGI模塊源碼:nginx/src/http/modules/ngx_http_fastcgi_module.c
轉載于:https://blog.51cto.com/flandycheng/858946
總結
以上是生活随笔為你收集整理的nginx+fastcgi+c/c++搭建高性能Web框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: URAL 1055 Combinatio
- 下一篇: yum国内网络源的架设