Apache ProxyHost似乎对我没什么帮助

Apache ProxyHost似乎对我没什么帮助,apache,mod-proxy,Apache,Mod Proxy,我在网上看到许多人提到在上使用ProxyPreserveHost来确保代理后端接收原始调用方的主机名。我用它来加强我的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 这是我的配置

我在网上看到许多人提到在上使用
ProxyPreserveHost来确保代理后端接收原始调用方的主机名。我用它来加强我的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默认值”

这是运行ApacheHTTPD2.2.22的Ubuntu12.10


非常感谢您的帮助。

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

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


我想你的问题和我的一样。我想补充一点,您可以在
自定义日志配置中使用
%{X-Forwarded-For}I
在日志中记录
X-Forwarded-For
头。

谢谢。您提到的问题有一个投票赞成的答案,链接到堆栈溢出之外的一篇文章,该文章实际上将
proxysepervehost
作为一个解决方案,“因此开发人员不必使用
X-Forwarded-for
标题”。我是这样的开发者,不得不使用一些非标准的东西让我感觉很糟糕。说到这里,我在谷歌上搜索了
X-Forwarded-For
,甚至维基百科也将其称为事实上的标准,这比我最初认为的要好得多(这是特定于ApacheHTTPD的东西,使我的web应用程序特定于ApacheHTTPD)。我认为链接的博客文章写得令人困惑。他说,该指令可用于保留“远程主机而不是远程ip”。在正常情况下,这两个名称(通过DNS)可能是同一事物的两个不同名称,但我认为“远程主机”实际上是指“远程客户端发送的主机头”,而不是远程客户端的主机名。但实际上,正如所写的那样,这相当令人困惑。除了对
WebAuthenticationDetails.getRemoteAddress()的现有检查之外,我还对
HttpServletRequest.getHeader(“X-Forwarded-For”)
的返回值进行了检查。因此,我的应用程序现在是
X-Forwarded-For
aware。这不是我最初希望的,但仍然在工作。谢谢。正如前面提到的问题,如果运行apache httpd 2.4.6或更高版本,apache模块
mod_remoteip
似乎是de faco标准。
<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]
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod rewrite