博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx+fastcgi+c/c++搭建高性能Web框架
阅读量:6903 次
发布时间:2019-06-27

本文共 4626 字,大约阅读时间需要 15 分钟。

创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://flandycheng.blog.51cto.com/855176/858946
 
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://www.cnblogs.com/huapox/archive/2012/12/01/3251587.html

你可能感兴趣的文章
制作3D旋转视频展示区
查看>>
Spring.Net初认识——竹子整理
查看>>
win7 下 vmware 虚拟机开后 w字母键失效不能用 解决方案:
查看>>
[网络流24题-8]汽车加油行驶问题
查看>>
Vim使用技巧(2) -- 插入模式技巧 【持续更新】
查看>>
Spring MVC+Fastjson之时间类型序列化
查看>>
【ospf-路由过滤】
查看>>
进阶: 案例八: Drag and Drop(动态)
查看>>
Remove Duplicates from Sorted List II
查看>>
Python中else的用法
查看>>
蓝桥杯 迷宫
查看>>
多行截断
查看>>
完成个人中心 导航标签
查看>>
使用位生成子集
查看>>
需求分析--12章 过程建模
查看>>
C#运用实例.读取csv里面的词条,对每一个词条抓取百度百科相关资料,然后存取到数据库...
查看>>
css3选择器
查看>>
nginx虚拟主机配置
查看>>
PYthon基础
查看>>
delphi 把一个表的内容转到另一个表暂存时出错的解决方法。
查看>>