【发布时间】:2015-12-13 09:32:59
【问题描述】:
我刚刚在我的服务器上实现了 OAuth。
要进行身份验证,我需要将令牌作为 "Header" 作为密钥 "Authorization" 传递。
这在本地工作得很好,但是当我将此代码部署到我的生产服务器时,因为系统位于 beanstalk 负载均衡器后面,当 PHP 运行时,我没有在我的各个 EC2 实例上获得任何标头。
+---------------+ +----------------+
| | | |
+----------> | Load Balancer+---> | EC2 Server |
| | | |
| | | |
+----------+----+ +----------------+
|
| +-----------------+
| | |
| | EC2 Server |
+--------> | |
| |
+-----------------+
我最初在客户端 ip 上遇到了同样的问题,服务器会给我返回 $_SERVER['REMOTE_ADDR'] 的负载平衡器 ip。我通过这样做修复了
if (getenv('HTTP_X_FORWARDED_FOR')) {
$ip_array = explode(",", getenv('HTTP_X_FORWARDED_FOR'));
$_SERVER['REMOTE_ADDR'] = trim($ip_array[0]);
}
在我的 index.php 上,我尝试过 die(var_dump($_SERVER))。
但我没有看到对我发送的任何标题的引用。
我确实看到了 HTTP_X_FORWARDED_FOR、HTTP_X_FORWARDED_PORT、HTTP_X_FORWARDED_PROTO,但与标头无关。
通过 beanstalk 负载平衡器后,如何在我的各个服务器上获取标头?
【问题讨论】:
-
getallheaders()怎么样? php.net/manual/en/function.getallheaders.php -
啊,这确实有效!好奇怪
标签: php amazon-web-services amazon-ec2 amazon-elastic-beanstalk