我已经尝试了以下请求并将它们放入我的控制器中:
request.remote_ip
request.env['HTTP_X_FORWARDED_FOR']
request.env['REMOTE_ADDR']
这些都给了我正确的访问者的IP地址:50.67.168.53 (指向位置:温哥华)
然而,当我在制作并检查网络下的chrome标题时,我得到了
远程地址:54.213.94.198:80(俄勒冈州)
Oregan是AWS负载均衡器的位置。
我的问题是,有没有办法让我的控制器或模型中的远程地址指向温哥华(相反或俄勒冈州)并确保它在通过负载均衡器后保持这种状态? 我需要IP地址来确定要插入mailchimp API的访问者的位置。
我阅读了以下文章,我理解发生了什么,但不知道如何实现这些变化:
https://serversforhackers.com/so-you-got-yourself-a-loadbalancer
答案 0 :(得分:0)
我在带有ELB的AWS上部署了nginx后面的rails 3.2应用程序,这段代码适用于我:
def parse_ip
# string of comma separated list of ip addresses
# first one is the outer most address
# other may be load balancers, routers, etc ...
# example: '195.168.122.106, 172.31.19.59'
ips = request.env['HTTP_X_FORWARDED_FOR']
return ips.split(',').first if ips
# fall back
request.remote_ip
end
在位置块中使用ngnix配置:
location @thin_cluster
{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...
}