nginx 配置 FastCGI 代理

什么是CGI?

CGI 全称 "通用网关接口"(Common Gateway Interface),用于 HTTP 服务器与其它机器上的程序服务通信交流的一种工具,CGI 程序须运行在网络服务器上。

传统 CGI 接口方式的主要缺点是性能较差,因为每次 HTTP 服务器遇到动态程序时都需要重启解析器来执行解析,然后结果被返回给 HTTP 服务器。这在处理高并发访问几乎是不可用的,因此就诞生了FastCGI。另外传统的 CGI 接口方式安全性也很差。

什么是FastCGI?

FastCGI 是一个可伸缩地、高速地在 HTTP 服务器和动态脚本语言间通信的接口(FastCGI 接口在 Linux 下是 socket(可以是文件 socket,也可以是 ip socket)),主要优点是把动态语言和 HTTP 服务器分离开来。多数流行的 HTTP 服务器都支持 FastCGI,包括 Apache、Nginx 和 lightpd。

同时,FastCGI 也被许多脚本语言所支持,比较流行的脚本语言之一为 PHP。FastCGI 接口方式采用 C/S 架构,可以将 HTTP 服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或多个脚本解析守护进程。当 HTTP 服务器每次遇到动态程序时,可以将其直接交付给 FastCGI 进程执行,然后将得到的结构返回给浏览器。这种方式可以让 HTTP 服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

FastCGI 的重要特点:

  • FastCGI 是 HTTP 服务器和动态脚本语言间通信的接口或者工具

  • FastCGI 优点是把动态语言解析和 HTTP 服务器分离开来

  • Nginx、Apache、Lighttpd 以及多数动态语言都支持 FastCGI

  • FastCGI 接口方式采用 C/S 架构,分为客户端(HTTP服务器)和服务端(动态语言解析服务器)

  • PHP 动态语言服务端可以启动多个 FastCGI 的守护进程

  • HTTP 服务器通过 FastCGI 客户端和动态语言 FastCGI 服务端通信

Nginx 配置 FastCGI 服务

Nginx 可用于将客户端请求路由到 FastCGI 服务器,这些 FastCGI 服务器是使用各种框架和编程语言(如:PHP)构建的应用程序。

与 FastCGI 服务器一起使用的最基本的 nginx 配置包括使用 fastcgi_pass 指令而不是 proxy_pass 指令,以及 fastcgi_param 指令来设置传递给 FastCGI 服务器的参数。

假设 FastCGI 服务器可在 localhost:9000 上访问。 以上一节中的代理配置为基础,将 proxy_pass 指令替换为 fastcgi_pass 指令,并将参数更改为 localhost:9000。在 PHP 中,SCRIPT_FILENAME 参数用于确定脚本名称,QUERY_STRING 参数用于传递请求参数。生成的配置如下:

server {
    location / {
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        fastcgi_param QUERY_STRING   $query_string;
    }

    location ~ .(gif|jpg|png)$ {
        root /data/images;
    }
}

上面配置将设置一个 server,该 server 将通过 FastCGI 协议将除静态图像请求之外的所有请求路由到 localhost:9000 上运行的代理服务器。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号