跟我学Nginx,配置 FastCGI 代理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跟我学Nginx,配置 FastCGI 代理相关的知识,希望对你有一定的参考价值。

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

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

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

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

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,该 server 将通过 FastCGI 协议将除静态图像请求之外的所有请求路由到 localhost:9000 上运行的代理服务器。

4nginx设置FastCGI代理-阅读官方文档

官网:Beginner’s Guide

翻译部分:Setting Up FastCGI Proxying

tips: FastCGI是一个协议

开始!


nginx can be used to route requests to FastCGI servers which run applications built with various frameworks and programming languages such as PHP.

 nginx可以用来路由请求到用各种各样的框架和编程语言建立的FastCGI服务器上。


The most basic nginx configuration to work with a FastCGI server includes using the fastcgi_pass directive instead of the proxy_pass directive, and  fastcgi_param directives to set parameters passed to a FastCGI server.

 能够和FastCGI服务器工作最基本的nginx配置包括fastcgi_pass,fastcgi_param指令。

fastcgi_param设置传给FastCGI服务器的参数。


Suppose the FastCGI server is accessible on localhost:9000.

 假设在localhost:9000上可以访问到FastCGI服务器。


Taking the proxy configuration from the previous section as a basis, replace the proxy_pass directive with the fastcgi_pass directive and change the parameter to localhost:9000.

将之前那些部分的demo:proxy_pass http://localhost:8080/; 修改成下面这样

 fastcgi_pass localhost:9000;


In PHP, the SCRIPT_FILENAME parameter is used for determining the script name, and the QUERY_STRING parameter is used to pass request parameters.

 在PHP中,SCRIPT_FILENAME参数用来决定脚本名称

 QUERY_STRING参数用来传递请求参数


The resulting configuration would be:

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;
    }
}

 最终配置文件长这样。


This will set up a server that will route all requests except for requests for static images to the proxied server operating on localhost:9000 through the FastCGI protocol.

 上面的配置会设置一个服务器,它会通过FastCGI协议,路由除静态文件请求以外的请求到跑在localhost:9000 上的被代理服务器。

以上是关于跟我学Nginx,配置 FastCGI 代理的主要内容,如果未能解决你的问题,请参考以下文章

跟我学Nginx,server 配置块介绍

跟我学Nginx,nginx 如何处理请求?

Nginx+Lua(OpenResty)开发高性能Web应用

跟我学Spring Cloud(Finchley版)-07-Ribbon入门

Nginx反向代理后配置404页面

跟我学Java设计模式第三天:代理模式适配器装饰者等其中模式结构