【问题标题】:PHP - Get Custom Headers when Using Nginx with php-fpmPHP - 将 Nginx 与 php-fpm 一起使用时获取自定义标头
【发布时间】:2018-05-03 16:40:27
【问题描述】:

我正在尝试将我的 PHP Web 应用程序(一个 RESTful API)从 Apache 转换为 Nginx。

它在 Apache 中运行良好,但代码库当前使用 apache_request_headers() 方法来检索我们用于身份验证的 custom 标头。一个示例标头是auth_system_signature

我曾希望用getallheaders() 替换对该函数的调用是一个简单的例子。但是,似乎this method is undefined when using php-fpm

我看到各种"workarounds" on the net 将定义该函数(如果它不存在),但它们似乎都循环在没有我的自定义标头的$_SERVER 上。我很确定如果确实如此,那么我们一开始就不会使用apache_request_headers()

有没有办法使用 php-fpm 检索请求中的自定义标头,还是我只需要转而使用 php-cgi

上下文

  • 操作系统:Ubuntu 16.04
  • PHP 版本:7.0。

【问题讨论】:

  • 您确定您的自定义标头不存在于 $_SERVER 中吗?也许this from serverfault 与您的问题很接近?
  • 我认为你的东西在那里。通过我找到的链接:nginx.org/en/docs/http/… 我现在将尝试
  • 好的,如果我将 underscores_in_headers on 添加到我的 nginx.conf 中,那么标题将出现在 $_SERVER 超全局中,前缀为 HTTP_,这对我来说已经足够好了。您发布的 stackoverflow 链接建议用连字符替换下划线,但这是 IMO 更好的解决方案。

标签: php nginx http-headers fpm


【解决方案1】:

事实证明,默认情况下 Nginx 不会传递包含下划线的标头。您可以用连字符as others have done 替换自定义标题的下划线,或者您可以update your nginx.conf file 并设置:

underscores_in_headers on

现在,您的标头将出现在带有 HTTP_ 前缀的 $_SERVER 超全局中。它们也将全部大写。

【讨论】:

  • 对不起,我早该知道的!
猜你喜欢
  • 2017-04-17
  • 2017-11-19
  • 2016-02-23
  • 2014-04-24
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多