使用反向代理问题
之前写了函数如下:
public static String buildUrl(String strHost, String strContext, String argAbsolutePath) { if (!argAbsolutePath.startsWith("/")) { argAbsolutePath = "/" + argAbsolutePath; } return MessageFormat.format("http://{0}{1}{2}", new Object[] { strHost, strContext, argAbsolutePath }); }
什么意思大家应该懂,以前一直都没问题,现在用上反向代理后,就出问题了。
从请求头获得的host居然是相对于反向代理服务器的地址。
使用的是apache,发现可以通过设置ProxyPreserveHost 为On来不改变原始host值。
当然即使不开ProxyPreserveHost 选项apache也会加个X-Forwarded-Host
来获得原始host,不过这个头不是标准http头。
这样的话还是有问题的,你只获得了host还有后面的原始context部分怎么得呢?
这就要求使用相对定位来安排资源。