使用nginx向FastCGI后端发送额外的头



我使用nginx和几个fastcgi后端(php-cgi,mod-mon-fastcgi4)。现在我需要向fastcgi后端发送一个额外的http头,基本上与使用nginx作为反向代理时proxy_set_header所做的相同。但根据我的发现,nginx中没有fastcgi_set_header这样的东西。

有人知道怎么做吗?我不想使用额外的nginx模块,因为该解决方案必须能够在广泛的客户系统上轻松部署。

我快速浏览了一下手册,我认为你会发现最接近的是传递fastcgi参数:

请求标头以参数的形式传输到FastCGI服务器。在从FastCGI服务器运行的应用程序和脚本中,这些参数通常可以以环境变量的形式访问。例如;用户代理";作为参数HTTP_USER_AGENT传输。除了HTTP请求的头之外,还可以借助指令fastcgi_param传输任意参数。

http://wiki.nginx.org/HttpFcgiModule#Parameters.2C_transferred_to_FastCGI-服务器。

fastcgi_param

语法:fastcgi_parameter值

http://wiki.nginx.org/HttpFcgiModule#fastcgi_param

上面nginxwiki文章的URL已损坏。

nginx通过前缀为$http_的变量公开请求头值,因此http_USER_AGENT请求头可通过$http_USER_AGENT获得。

同样,名为CHICKEN_SOUP的请求头也可以通过$http_CHICKEN_SOUP获得。

下面的示例显示了如何将AuthorizationHTTP请求头传递给在PHP-fpm(PHP-FastCGI进程管理器)下运行的PHP脚本。

location ~ .php$ {
    fastcgi_pass   unix:/path/to/socket;
    fastcgi_index  index.php;
    fastcgi_param  HTTP_AUTHORIZATION $http_authorization;
    ... other settings
}

您可以使用第三方模块ngx_headers_more来完成此操作。在构建包含该模块的nginx后,您可以在配置中执行以下操作:

location / {
    more_set_input_headers 'Foo: bar baz';
    ...
}

Nginx现在有:

fastcgi_pass_header 'Cache-Control: no-cache, must-revalidate';

如果您正在添加请求中尚未指定的标头,则可以在您的位置规则中使用该标头。默认情况下,fastcgi使用:

fastcgi_pass_request_headers on;

它将把请求中所有传入的Header传递给fastcgi。

最新更新