13

我在网上看到很多人提到使用ProxyPreserveHost On来确保代理后端接收原始调用者的主机名。我正在使用它来加强我的 Web 应用程序的安全性(Java、Tomcat),而如果我的日志能够显示用户实际所在的位置也会很好。我的 Tomcat 日志现在显示了这一点——非常没用:

127.0.0.1 - - [17/Mar/2013:06:32:13 +0100] "GET /webapp/frontend/app/partials/welcome.html HTTP/1.1" 200 54

这是我的配置,显然不能按预期工作:

“/etc/apache2/sites-enabled/000-default”

<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass /webapp http://localhost:8080/webapp
ProxyPassReverse /webapp http://localhost:8080/webapp
RewriteEngine On
RewriteRule ^/$            /webapp/frontend/app/ [proxy]
RewriteRule ^/webapp/$     /webapp/frontend/app/ [redirect]
RewriteRule ^/webapp/app/$ /webapp/frontend/app/ [redirect]

(从这里开始是在默认的东西000-default

启用的模块:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod rewrite

这是运行 Apache HTTPD 2.2.22 的 Ubuntu 12.10。

您的帮助将不胜感激。

4

1 回答 1

20

我假设您担心的是您的访问日志在客户端字段中仍然包含 127.0.0.1 。这不受ProxyPreserveHost; 这是连接到 Apache 的网络端点的 IP 地址。对于来自另一台服务器的代理连接,这将始终是 localhost。

另外,ProxyPreserveHost是关于保留Host客户端发送的标头,而不是关于保留客户端的原始 IP。换句话说,这是关于信息朝着错误的方向发展的信息;它保留了客户端发送的服务器名称,而不是客户端的 IP。

我认为您的问题与此问题相同。我会添加额外的说明,您可以在配置X-Forwarded-For中使用日志中记录标题。%{X-Forwarded-For}iCustomLog

于 2013-03-18T00:36:01.387 回答