我在网络上看到许多人提到使用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。

您的帮助将不胜感激。

最佳答案

我认为您担心的是,您的访问日志在“客户端”字段中仍然包含127.0.0.1。这不受ProxyPreserveHost的影响;这是连接到Apache的网络端点的IP地址。对于来自其他服务器的代理连接,它将始终为localhost。

同样,ProxyPreserveHost与保留客户端发送的Host标头有关,而不与保留客户端的原始IP有关。换句话说,这是关于信息为您的目的选择了错误的方向。它保留了客户端发送的服务器名称,而不是客户端的IP。

我认为您的问题与this question相同。我还要补充一点,您可以使用X-Forwarded-For配置中的%{X-Forwarded-For}i在日志中记录CustomLog标头。

10-07 13:42