Apache + Python Bottle : 访问者 IP 总是指 127.0.0.1

Apache + Python Bottle : visitor IP always refers to 127.0.0.1

我的服务器处理多个网站,其中大部分使用 Apache、PHP 等

但其中一个 (www.mywebsite.com) 使用 Python 网络服务器,它侦听端口 8092。因此此 Apache 配置:

<VirtualHost *:80>
  ServerName mywebsite.com
  ServerAlias *.mywebsite.com
  RewriteEngine On
  RewriteRule /(.*)           http://localhost:8092/ [P,L]
</VirtualHost>

现在,当来自互联网的用户连接到 www.mywebsite.com 时,它会工作:Python 处理它,一切正常。

问题:我在 Python 代码中使用 bottle 获得的 IP:

ip = request.environ.get('REMOTE_ADDR')

总是 127.0.0.1.

如何获取访问者的真实IP地址?

您的虚拟主机正在使用 proxy rewriting。客户端连接到 apache,它打开到您的应用程序的代理连接,重写 URL,并代理请求。您的应用程序和客户端之间没有真正的连接。

由于您的应用程序和客户端之间没有直接连接,您无法获得 "real IP" 除非您告诉 apache 将它发送到您的应用程序。通常的方法是设置类似 X-Forwarded-For header. You may have to explicitly use mod_proxy 的东西来执行此操作。