在反向代理后面的Java应用程序中确定面向用户的URL

时间:2014-09-03 12:14:01

标签: java tomcat load-balancing

我有这个复杂的Java应用程序,它位于反向代理之后。

在致电request.getServerName()request.getServerPort()和朋友时,在java应用程序级别确定面向用户的网址的最佳做法是什么?

我们在Apache mod_proxy后面使用Tomcat(但我们可能会切换到嵌入式jetty)(但我们肯定会切换到Amazon Elastic Load Balancer)。 我列出了4个解决方案:

  1. 使用apache mod_proxy重写303重定向。 这是我们当前解决方案的一部分,但由于Elastic Load Balancer不具备
  2. 而被排除在外
  3. 让应用程序服务器读取请求的Host HTTP标头
  4. 在应用程序服务器级别(example config in Tomcat
  5. 对应用程序位置进行硬编码
  6. 停止使用标准ServletRequest API。而是在配置文件中拥有服务器的完全限定名称,并从我们的代码中读取此配置。
  7. 我们目前的解决方案:

    • 重定向由mod_proxy(第一种方法)重写
    • 应用程序的其他一些部分使用我们在配置文件中设置的路径(最后一种方法)

    我肯定需要停止使用方法1,我想解决其他三个主张之一。

    修改 这可以概括为:

    • 我可以信任request.getServerName()吗?
    • 是这样,我可以信任Host HTTP标头吗?

1 个答案:

答案 0 :(得分:1)

如果您将Tomcat配置为从请求中保留HOST,即使用指令,则可以信任Tomcat上mod_proxy传递的HOST头:

ProxyPreserveHost On