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

Dyn*_*lon 11 fastcgi nginx http-headers

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

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

小智 10

我快速浏览了一下手册,我认为最接近的是传递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

  • 我现在正在使用'fastcgi_param HTTP_X_MYVAR"myvalue";'.如果变量名以HTTP_开头,它似乎会被复制到标题中.但是,这是未记录的,并且是特定于实现的,并且可能随将来的版本而改变 (9认同)

zoo*_*oot 5

上面 nginx wiki 文章的 URL 已损坏。

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

同样,名为CHICKEN_SOUP的请求标头可通过$http_chicken_soup 获得

下面的示例显示了如何将Authorization HTTP 请求标头传递给在 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
}
Run Code Online (Sandbox Code Playgroud)

  • 这是这个话题的最佳答案。这个配置效果很好。其他答案不起作用。但有一些提示。任何下划线通常都会被删除。例如,如果您添加配置 'fastcgi_param CHICKENSOUP $http_chickensoup ,则变量 CHICKEN_SOUP 在环境中同时显示为 CHICKENSOUP 和 HTTP_CHICKENSOUP 。不幸的是 $http_chicken_soup 无法访问,我花了一些时间来调试这个。 (3认同)