我的应用程序是在python和bottle框架中开发的。我使用以下代码段来获取页面访问者的IP地址:
user_ip = bottle.request.environ['REMOTE_ADDR']
它在我的本地计算机上工作正常,但是,在部署到AWS Beanstalk实例后,我认为我正在获取负载均衡器IP,因为user_ip读取的内容类似于10.48.95.234。
我的想法是否正确?如果是这样,有没有办法获得真实访问者的IP地址?
答案 0 :(得分:6)
你是正确的,你得到的REMOTE_ADDR
值是ELB。
您通常需要在请求中查找X-Forwarded-For
标头。 ELB将插入此标头以通知您最终客户端IP地址。
答案 1 :(得分:3)
在这种情况下,还有一个特定于瓶子的版本可以提供帮助:
user_ip = bottle.request.remote_addr
这会自动执行处理并获取用户的地址。有关详细信息,请参阅documentation或source code。
答案 2 :(得分:0)
这适用于我的ELB:
from bottle import route, run, request
@route('/hello')
def hello():
return "Hello, {}".format(request.remote_route)
run(host="0.0.0.0", port=8000, server='twisted')