2014-10-29 29 views
3

我们正在使用Amazon Elastic Load Balancer,并在其后面有2个apache服务器。 但是,我们是不是能够得到的X转发,头在应用程序端AWS ELB未填充x-forwarded-for标头

我读了类似的帖子,但无法找到解决它

Amazon Elastic load balancer is not populating x-forwarded-proto header

这是怎么ELB听众被配置

HTTP 80 HTTP 80 N/A N/A 
TCP 443 TCP 443 N/A N/A 

应该改变443端口HTTPS(安全HTTP)而不是TCP填充头 其他选项是SSL(安全TCP)

如果一切正常,我也想知道为什么,是什么让区别

+2

问题您链接到有回答你的问题。 TCP负载平衡器在第4层左右运行,既没有协议感知,也没有操纵负载的能力以添加HTTP标头。 HTTP(S)负载均衡器在第7层操作,并且能够操纵负载以添加标头。 – 2014-10-30 01:12:48

+0

[Amazon Elastic Load Balancer未填充x -forward-proto头]的可能重复(http://stackoverflow.com/questions/19049320/amazon-elastic-load-balancer-is-not-populating-x-forwarded-原始标题) – 2014-10-30 01:13:20

+0

@Michael - sqlbot - 感谢您的解释 – naveen 2014-10-30 15:48:03

回答

3

亚马逊现在支持使用TCP报头传递沿如本article讨论的来源。

Apache本身不支持proxy protocol。如果你阅读了评论,那么有补丁可以让apache处理它,或者你可以切换到nginx。

1

我有同样的要求。 我有一个AWS负载平衡器指向端口80上的Web服务器。 所有HTTPS请求都使用AWS SSL证书解析,但我的客户端还要求我将所有80端口请求重定向到HTTPS。

我使用的是Apache服务器,所以我需要以下几行添加到

RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} !=https 
RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=301,L] 

然后我重新启动Apache服务和Woala虚拟主机配置文件(httpd.conf文件)! 下面是虚拟主机的配置,你需要为你的子域做同样的,例如www.yourdomain.com

<VirtualHost *:80> 
    RewriteEngine On 
    RewriteCond %{HTTP:X-Forwarded-Proto} !=https 
    RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=301,L] 
    ServerAdmin [email protected] 
    DocumentRoot "/apache2/htdocs/YourDomainFolderWeb" 
    ServerName yourdomain.com 
    ErrorLog "logs/yourdomain.com-error_log" 
    CustomLog "logs/yourdomain.com-access_log" common 
</VirtualHost> 

希望工程。 的更多信息: https://aws.amazon.com/premiumsupport/knowledge-center/redirect-http-https-elb/

最佳