本文主要介绍使用 Nginx + FastCGI 技术,搭建一个简单的 Web Server 的方法。关于 Nignx 的相关知识,请点击此处。关于 FastCGI 的相关知识,请点击此处。

1. 概述

Nginx 不能像 Apache 那样直接执行外部的可执行程序,但是 Nginx 可以作为代理服务器,将Web请求转发给后端(服务器中的)应用程序,这是 Nginx 的主要作用之一。

在本文中,我们使用 Nginx 接收Web客户端的请求,然后 Nginx 将该Web请求转发给后端的FastCGI进程, Nginx + FastCGI 模式的架构图如下:

2. 编写FastCGI应用程序

本文使用FastCGI软件开发套件“fcgi”编写FastCGI应用程序。

2.1 安装fcgi

使用 yum 命令安装 fcgi :

yum install fcgi-devel

2.2 编写FastCGI应用程序代码

FastCGI应用程序代码(fastcgi_demo.cpp)如下:

#include "fcgi_stdio.h"
#include <stdlib.h>int main(void)
{int count = 0;while (FCGI_Accept() >= 0){printf("Content-type: text/html\r\n""\r\n""<title>Hello World</title>""<h1>Hello World from FastCGI!</h1>""Request number is: %d\n",++count);}return 0;
}

上面的FastCGI程序会将接收到的请求的次数打印出来,因为FastCGI程序是“常驻”的,所以其打印出来的请求次数会一直增加。

2.3 编译生成FastCGI应用程序

运行如下命令编译生成FastCGI应用程序:

g++ -o fastcgi_demo fastcgi_demo.cpp -lfcgi

3. FastCGI进程管理器

由于FastCGI进程是由FastCGI进程管理器管理的(而不是 Nginx ),所以我们需要一个FastCGI进程管理器,来管理我们编写FastCGI应用程序(本文中为 fastcgi_demo )。

本文使用 spawn-fcgi 作为FastCGI进程管理器。

spawn-fcgi 是一个通用的FastCGI进程管理器,简单小巧,原先是属于 lighttpd 的一部分,后来由于使用比较广泛,所以就迁移出来作为独立项目了。 spawn-fcgi 使用 pre-fork 模式,主要功能是打开监听端口、绑定地址,然后 fork-and-exec 执行我们编写的FastCGI应用程序,之后 spawn-fcgi 进程退出(即 spawn-fcgi 非常驻进程)。在这个过程中,FastCGI应用程序首先进行初始化,然后进入死循环,监听(来自 Nginx 的)socket的连接请求。

3.1 安装FastCGI进程管理器

使用 yum 命令安装 spawn-fcgi ,如下:

yum install spawn-fcgi

3.2 启动FastCGI应用程序

通过FastCGI进程管理器 spawn-fcgi 启动本文前面编写FastCGI程序,命令如下:

spawn-fcgi -a 192.168.213.128 -p 8081 -f /opt/liitdar/mydemos/simples/fastcgi_demo

查看FastCGI程序是否已经开始监听8081端口了,命令如下:

[root@node1 /opt/liitdar/mydemos/simples]# netstat -anpot |grep 8081
tcp        0      0 192.168.213.128:8081    0.0.0.0:*               LISTEN      3766/fastcgi_demo    off (0.00/0/0)
[root@node1 /opt/liitdar/mydemos/simples]# 

从上述查询结果能够看到,FastCGI程序 fastcgi_demo 已经在监听8081端口了。

查看FastCGI进程管理器 spawn-fcgi 的运行状态:

[root@node1 /opt/liitdar/mydemos/simples]# ps -ef|grep spawn-fcgi
root      3843  2661  0 16:46 pts/0    00:00:00 grep --color=auto spawn-fcgi
[root@node1 /opt/liitdar/mydemos/simples]# 

从上述查询结果能够看到, spawn-fcgi 进程没有在运行了,这说明 spawn-fcgi 完成对FastCGI程序 fastcgi_demo 的拉起操作后就结束自己的运行状态了。

4. Nginx的相关配置

4.1 关联FastCGI程序

为了让 Nginx 使用FastCGI程序, 我们需要在 Nginx 配置文件(/etc/nginx/nginx.conf)中新增如下内容:

说明:

  • 上述新增内容,需要根据实际情况进行配置;
  • 关于 Nginx 配置文件的的其他配置项,点击此处。

4.2 启动Nginx

修改完配置文件后,启动 Nginx ,如下:

[root@node1 /opt/liitdar/mydemos/simples]# nginx

查看 Nginx 的运行状态:

[root@node1 /opt/liitdar/mydemos/simples]# ps -ef|grep nginx
root      3734     1  0 15:09 ?        00:00:00 nginx: master process nginx
nginx     3735  3734  0 15:09 ?        00:00:00 nginx: worker process
root      3851  2661  0 16:57 pts/0    00:00:00 grep --color=auto nginx
[root@node1 /opt/liitdar/mydemos/simples]#

5. 测试

在Web浏览器中,打开Nginx配置的FastCGI应用程序链接,测试 Nginx + FastCGI 模式是否搭建成功,如下:

上图显示我们的 Nginx + FastCGI 模式已搭建成功了,其中数字“12”对应着12次的Web浏览器请求,如果再点击一次刷新,则该数字会变为13。

在这个例子中, Nginx 通过 http://192.168.213.128/fastcgi_demo.cgi 收到来自Web浏览器的请求时,会匹配到配置文件中的“location /fastcgi_demo.cgi”块,所以会将该Web请求传到后端的FastCGI应用程序 fastcgi_demo 进行处理。

Nginx + FastCGI架构部署指导相关推荐

  1. Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布

    1.介绍     Nginx - 高性能web server,这个不用多说了,大家都知道.     FastCGI程序 - 常驻型CGI程序,它是语言无关的.可伸缩架构的CGI开放扩展,其主要行为是将 ...

  2. 【入门篇】Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布

    http://blog.csdn.net/allenlinrui/article/details/19419721 分类: C/C++2014-02-18 17:58 3875人阅读 评论(0) 收藏 ...

  3. Nginx网站服务与LNMP架构部署(详解)

    Nginx网站服务与LNMP架构部署 1.Nginx服务基础 2.编译安装Ngiax 3.Nginx的运行控制 4.配置文件nginx.conf 5.Nginx虚拟主机 6.LNMP架构部署 1.源码 ...

  4. Nginx架构篇(一)动态网站架构、LNMP、FastCGI、nginx+fastcgi运行原理

    一.动态网站架构 资源文件识别 语言识别 框架识别 index.php 开源的php Window/Linux+nginx+php+mysql index.py 开源的python Window/Li ...

  5. nginx fastcgi python_linux下nginx+python+fastcgi部署总结(django版)

    最近因为项目上的需要开始大量使用nginx,因此也想趁机将以前常用的django+apache的架构换成django+nginx+fastcgi,此文是整个搭建的步骤,主要留作备忘,也希望对大家有所帮 ...

  6. centos7 nginx php5.4,详解CentOS7.0下Nginx+PHP5.4+MySQL5.5+Memcached+Redis的架构部署

    详解Nginx+PHP5.4+MySQL5.5+Memcached+Redis的架构部署需要安装Nginx.PHP.mysql.memcached.redis! 一.硬件: 1.服务器型号:HP DL ...

  7. docker部署nginx+tomcat架构

    使用docker部署nginx+tomcat架构 架构说明: 使用nginx+tomcat实现动态/静态(资源请求)分离和负载均衡. 配置docker镜像仓库:/etc/docker/daemon.j ...

  8. 实战:Nginx + FastCGI 程序(C/C++) 搭建高性能web server

    1.介绍 Nginx - 高性能web server,这个不用多说了,大家都知道. FastCGI程序 - 常驻型CGI程序,它是语言无关的.可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程 ...

  9. CentOS 6.7 源码搭建LNMP架构部署动态网站环境

    源码搭建LNMP架构部署动态网站环境 Nginx 简介 Nginx是一款相当优秀的用于部署动态网站的服务程序,Nginx具有不错的稳定性.丰富的功能以及占用较少的系统资源等独特特性. Nginx (& ...

  10. Linux进阶-网站架构部署(LNMP)

    网站架构部署LNMP 1)网站架构组成介绍 2)网站架构工作原理 3)服务部署过程 4)PHP部署过程 5)需要将LNMP架构进行串联 6)企业动态资源发布过程 1)网站架构组成介绍 LNMP: L: ...

最新文章

  1. C#类方法中使用数组参数params关键字的作用
  2. oschina android版源码中的颜色值
  3. 变量命名规则_JavaScript基础教程(二)变量、常量与运算符
  4. 73 forward动作
  5. 新玩法来了,web前端教程公众号推出《每日一题》
  6. Spring.Net---4、IoC/DI注入方式
  7. 201503-2-数字排序
  8. 87-Moving average of oscillator,移动平均振荡指标.(2015.7.4)
  9. AI头发笔刷_这么棒的AI插件,一定要偷偷藏好了不让总监知道……
  10. Qt 之 QQ系统表情(二)
  11. “朋友”两个字好辛苦
  12. Unity Android手机触屏事件
  13. Consumer消息拉取和消费流程分析
  14. token的基本处理和存储
  15. 相似图片搜索、算法、识别的原理解析(下)
  16. 编程语言:C语言网络资源
  17. HTML5交互性是什么意思,HTML5的结构和语义(5):交互
  18. es6 去掉空格_ES6之字符串
  19. ECShop开源商城与COS互通:降低本地存储负载、提升访问体验
  20. 面试 | 推荐几个程序员刷题的网站!面试必备!!!

热门文章

  1. 「美团 CodeM 复赛」城市网络
  2. Delphi取UTC时间秒
  3. Windows Server 8 Beta 初体验之二:Hyper-v
  4. STM32CubeMX使用(六)之RTC及制作时间戳
  5. STM32定义数组到flash的指定位置
  6. 一些编程习惯和问题记录--不定期更新
  7. selenium无界面chromedriver
  8. Maven(一)之Maven入门
  9. JsSIP 注册,拨打填坑
  10. 【转】编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程