我使用nginx和几个fastcgi后端(php-cgi,mod-mono-fastcgi4)。现在我需要向fastcgi后端发送一个额外的http标头,与使用nginx作为反向代理时的proxy_set_header基本相同。但根据我的发现,nginx中没有fastcgi_set_header这样的东西。
有人有任何想法如何做到这一点?我不想使用额外的nginx模块,因为解决方案可以在各种客户系统上轻松部署。
答案 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参数值
答案 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';
...
}