nginx & php-fpm 和自定义标头

nginx & php-fpm 和自定义标头

我想将一些自定义标头(ACCESS_TOKEN)从客户端 RESTful 应用程序(JS)传递到应用程序服务器(php-fpm)。

我读到过 nginx 应该将所有 http 标头传递给 php,但不知何故它并没有出现在我的 php 中 :(

我可以在 Firebug 中看到它http://o7.no/N6DM7q但在 $_SERVER 变量中看不到它。它只是不存在于 $_SERVER 数组中。

我认为我需要手动传递它。现在我的配置如下所示:

location @php-fpm {
    include /etc/nginx/fastcgi_params;


    fastcgi_pass unix:/tmp/php5-fpm.sock;
    fastcgi_param REQUEST_URI    /index.php$request_uri;
    fastcgi_param SCRIPT_FILENAME /htdocs/index.php;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_param DOCUMENT_ROOT /htdocs;
    }
}

当我在位置定义中添加新行时:

location @php-fpm {
    include /etc/nginx/fastcgi_params;
    ...
    fastcgi_param ACCESS_TOKEN $http_access_token;
    }
}

或者即使我将它添加到 fastcgi_params 文件中也无济于事 :(

如果我把下一行放入位置部分:

 fastcgi_param ACCESS_TOKEN $http_access_token;

然后在 php 中它有空值:(

如何通过 nginx 将自定义标头从客户端传递到后端(php)?

答案1

我发现问题在于自定义标头中不能使用下划线。我必须使用 ACCESS-TOKEN 作为标头名称,而不是 ACCESS_TOKEN,然后 nginx 才会自动传递它。

并找到了如何修复的解释在这个 StackOverflow 问题中

相关内容