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"html

| grep -v "grep"ios


| awk -F ' ' '{print $2}nginx


26010
從新加載配置文件
$sudo kill -HUP 26010
經過系統的信號控制 Nginx
能夠使用信號系統來控制主進程。默認,nginx 將其主進程的 pid 寫入到 /usr/local/nginx/logs/nginx.pid 文件中。經過傳遞參數給 ./configure 或使用 pid 指令,來改變該文件的位置。
主進程能夠處理如下的信號:web

命令 說明 備註
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.gzapache

./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;ide

int main()
{工具

/* Initialization Code */
int count = 0;oop


/* 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

相關文章
相關標籤/搜索