ProxyPreserveHost似乎对我没什么用

San*_*gen 11 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
Run Code Online (Sandbox Code Playgroud)

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

"/ 000-缺省的/ etc/apache2的/启用的站点 - "

<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]
Run Code Online (Sandbox Code Playgroud)

(从这里开始的默认内容000-default)

启用模块:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod rewrite
Run Code Online (Sandbox Code Playgroud)

这是运行Apache HTTPD 2.2.22的Ubuntu 12.10.

非常感谢您的帮助.

rra*_*rra 13

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

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

我认为你的问题和这个问题是一样的.我添加了额外的注释,您可以在配置中X-Forwarded-For使用日志记录日志.%{X-Forwarded-For}iCustomLog