使用nginx向FastCGI后端发送附加标头

时间:2012-02-27 12:11:32

标签: nginx http-headers fastcgi

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

有人有任何想法如何做到这一点?我不想使用额外的nginx模块,因为解决方案可以在各种客户系统上轻松部署。

4 个答案:

答案 0 :(得分:9)

我快速查看了手册,我认为最接近的是传递fastcgi参数:

  

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

http://wiki.nginx.org/HttpFcgiModule#Parameters.2C_transferred_to_FastCGI-server

  

fastcgi_param

     

语法:fastcgi_param参数值

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

答案 1 :(得分:2)

Nginx现在有:

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

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

fastcgi_pass_request_headers on;

将把请求中的所有传入标头传递给fastcgi。

答案 2 :(得分:2)

上面的nginx wiki文章的网址已被破坏。

nginx通过前缀为 $ http _ 的变量公开请求标头值,因此可以通过 $ http_user_agent 获取 HTTP_USER_AGENT 的请求标头。

同样,名为 CHICKEN_SOUP 的请求标题可通过 $ http_chicken_soup 获取。

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

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

答案 3 :(得分:0)

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

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