ProxyPreserveHost似乎对我没什么用

时间:2013-03-17 05:44:06

标签: apache mod-proxy

我在网上看到许多人指的是使用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的/ / 000-默认启用位点-”

<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。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:13)

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

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

我认为您的问题与this question相同。我添加了附加说明,您可以使用X-Forwarded-For配置中的%{X-Forwarded-For}i在日志中记录CustomLog标题。