为什么 Nginx 中使用 FastCGI 和 C 而不是 PHP?

为什么 Nginx 中使用 FastCGI 和 C 而不是 PHP?

我想每次 Nginx 收到 URL 请求时运行一个(编译好的)C 程序,比如https://myserver.com/programs/my-C-file

更具体地说,当 GitHub 中的 PR 合并时,我想要一个钩子来启动用 C 编写的自定义构建和发布过程(我想使用 C,因为构建过程很复杂。有很多步骤,而且用 C 解析 stdout 比用 Bash 或 PHP 更容易。)

但是,我有什么理由应该使用 FastCGI 来直接触发 C 二进制文件而不是 PHP 文件吗exec('my C program')

显然,每隔几天我都不会收到太多这样的请求,因此我并不担心扩展,而且 FastCGI 似乎需要很多额外的配置,而 PHP 则可以直接使用。只需创建一个 PHP 文件运行exec()并在 Nginx 中创建一个块即可。

或者也许我对整个过程的想法是错误的,并且有一种更简单的方法可以做到这一点。

答案1

是的,可以使用 nginx 和 FastCGI 来运行 C 二进制文件。以下是必要步骤的粗略概述:

  • 安装 nginx
  • 安装 spawn-fcgi
  • 安装 fastcgi 数据库(可选)
  • 创建 nginx vhost 配置,其中服务器监听您的 IP/域,并且位置将 FCGI 上游发送到本地主机/端口。
  • 编译你的 C 程序(你的程序应该包括while (FCGI_Accept() >= 0) { }
  • 启动 spawn-fcgi 进程来监听 localhost/port 作为程序的包装器。

更多内容:

使用 NGINX 运行 C FastCGI 脚本

【入门篇】Nginx + FastCGI程序(C/C++)Demo及部署搭建

答案2

两种可能的解决方案:

  1. 使用 Python 的 CGIHTTPServer。无需配置,只需将编译后的程序放在目录中cgi-binpython -m CGIHTTPServer从父目录中启动即可。您可以在路径上调用您的程序/cgi-bin/yourprogramname。这已经是一个可以运行的 HTTP 服务器,如果您仍希望在它前面运行 Nginx,请将其配置为简单的反向代理(proxy_pass 应该足够了)。

  2. 使用 Apache 的原生 CGI 支持。我将向您推荐Apache 的文档对于配置,目录结构相当于第一个选项。

您还可以通过不使用 C 而是使用像 Go 这样的语言来减少移动部件的数量,因为您可以在 10 行内用 Go 编写一个 HTTP 服务器,它可以调用一个函数来执行实际的构建过程。

相关内容