Nginx + FastCGI架构部署指导

Nginx + FastCGI架构部署指导本文主要介绍使用Nginx+FastCGI技术,搭建一个简单的WebServer的方法。关于Nignx的相关知识,请点击此处。关于FastCGI的相关知识,请点击此处。1.概述Nginx不能像Apache那样直接执行外部的可执行程序,但是Nginx可以作为代理服务器,将Web请求转发给后端(服务器中的)应用程序,这是Nginx的主要作用之一。在本文…

大家好,又见面了,我是你们的朋友全栈君。

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

1. 概述

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

在本文中,我们使用 Nginx 接收Web客户端的请求,然后 Nginx 将该Web请求转发给后端的FastCGI进程, Nginx + 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 + FastCGI架构部署指导

说明:

 

  • 上述新增内容,需要根据实际情况进行配置;
  • 关于 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架构部署指导

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

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/157471.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 树莓派新手教程_新手入门树莓派必做的四件事

    树莓派新手教程_新手入门树莓派必做的四件事此篇文章獻給所有第一次把玩樹莓派的新手、以及樹莓派的愛好者。&amp;nbsp;ByHerbfargus-Ownwork,CCBY-SA4.0,https://commons.wikimedia.org/w/index.php?curid=47497384&amp;nbsp;目標建立一個省電的家用伺服器&amp;nbsp;小弟選用樹莓派作為家用伺服器,…

    2022年10月14日
  • 虚拟机体验NAS私人云全揭秘:深度揭秘虚拟机安装群晖DSM6.2/6.2.1/6.2.2/6.2.3系统洗白全过程(附赠洗白码)

    虚拟机体验NAS私人云全揭秘:深度揭秘虚拟机安装群晖DSM6.2/6.2.1/6.2.2/6.2.3系统洗白全过程(附赠洗白码)文章目录DIY群晖、半洗白以及全洗白的区别获得群晖序列号SN和Mac地址mac1对PE启动群晖虚拟机洗白虚拟机中的DIY群晖6.2系统群晖虚拟机洗白后的效果展示DIY群晖、半洗白以及全洗白的区别1、DIY群晖就是号称的黑群晖,不能转码、无QuickConnect远程网络服务:(1)不能注册和登录QuickConnect(简称QC,就是没有公网的用户利用群晖服务器进行内网穿透);(2)DS…

  • Pandas merge函数「建议收藏」

    Pandas merge函数「建议收藏」[toc]函数原型pd.merge(left,right,how=’inner’,on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=True,suffixes=(‘_x’,’_y’),copy=True,indicator=False,validate=None)参数left:拼接的左侧DataFrame对象r.

  • plc编程小技巧_plc编程入门培训

    plc编程小技巧_plc编程入门培训PLC是一种在工业中被广泛应用的自动控制元件。然而PLC应用与编程人才短缺已经成为制约我国自动控制领域发展的瓶颈。通过学习PLC可编程控制器程序设计使学员掌握可编程序控制器的工作原理和PLC控制系统硬件软件的设计方法,可编写复杂的PLC程序,为从事PLC控制系统的设计、调试和改造工作打下基础。可以独立承担相关项目的设计与开发。让您由一位电工升级为货真价实的工程师![1]随着现代工业设备自动化,越来越多的工厂设备将采用PLC人机界面等自动化器件来控制,因此设备自动化程度越来越高。对设备的维护人员的技术要求越

  • 再生龙使用手册_龙再生

    再生龙使用手册_龙再生“为什么你的代码我跑不了?”搭建环境是一键非常有趣(令人讨厌)的事情。尤其对于任务重心不在搭建环境的人而言,更应该把有限的时间和精力用在核心任务上。下面推荐一款再生龙软件,能让你的U盘作为打包好的系统盘,实现快速备份、还原和部署整个系统环境。

    2022年10月25日
  • SkinSharp用法

    SkinSharp用法

    2021年11月16日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号