我想将一些自定义标头(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 问题中。