我获得了带有 mod_proxy 和 mod_proxy_ajp 的 Apache 2.2.22。这是我的 mod_proxy 配置:
ProxyRequests Off
ProxyPreserveHost On
ProxyErrorOverride On
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / http://www.myservice.com/
总体来说它运行良好,但是当你查看 mod_proxy 的日志时你会发现缺少一些 http 标头。
Header[0] [Host] = [www.myservice.com]
Header[1] [User-Agent] = [Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:23.0) Gecko/20100101 Firefox/23.0]
Header[2] [Accept] = [text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8]
Header[3] [Accept-Language] = [q=0.94,en-US;q=0.88,en;q=0.82,en-EN;q=0.76,fr-FR;q=0.71,fr;q=0.65,en-GB;q=0.18,ru;q=0.12,en-PL;q=0.06]
Header[4] [Accept-Encoding] = [gzip, deflate]
Header[5] [Cookie] = [_ga=GA1.2.190053753.1379368584; JSESSIONID=2f9c23613e546d91f2f59b6e4d81]
但问题是没有标头 REMOTE_ADDR 并且我的 Glassfish3 服务器无法检测请求的远程地址并返回 null。
我不确定,但也许问题不在于 mod_proxy,而在于 glassfish。
答案1
我不知道您进行了多少谷歌搜索,但“apache proxy real ip”给了我一些有趣的结果。
请阅读此问答;如果没有帮助,请在下面发表评论,谢谢
答案2
X-Forwarded-For
我通过为用户的远程地址设置额外的标头来解决此问题。
RewriteCond %{REMOTE_ADDR} (.*)
RewriteRule .* - [E=SEQ_ADDR:%1]
RequestHeader set X-Forwarded-For %{SEQ_ADDR}e
然后在应用程序中使用简单的过滤器来读取此标题的值。