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 的东西来执行此操作。
我的服务器处理多个网站,其中大部分使用 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 的东西来执行此操作。