【问题标题】:How to properly setup Apache HTTP - Tomcat configuration如何正确设置 Apache HTTP - Tomcat 配置
【发布时间】:2012-05-25 23:26:09
【问题描述】:

我使用 Apache HTTP 和 Tomcat 构建了一个设置,它们通过 mod_proxy 相互通信。我已经粘贴了我在下面使用的配置。我遇到的问题是会话丢失,我认为这与代理配置不当有关。我阅读了很多文章,但仍然无法弄清楚我做错了什么。

httpd.conf:

<VirtualHost MACHINE_IP:80>
  ServerName www.mydomain.com
  ProxyRequests Off
  ProxyPass /apps/my_app http://MACHINE_IP:8080/my_app
  ProxyPassReverse /apps/my_app http://MACHINE_IP:8080/my_app
  Header set P3P "CP=\"HONK\""
</VirtualHost>

<VirtualHost MACHINE_IP:443>
  ServerName www.mydomain.com
  ProxyRequests Off
  ProxyPass /apps/my_app https://MACHINE_IP:8443/my_app
  ProxyPassReverse /apps/my_app https://MACHINE_IP:8443/my_app

  Header set P3P "CP=\"HONK\""
</VirtualHost>

Tomcat(在 MACHINE_IP 上)在常用端口 8080 和 8843 上运行,配置如下(我认为这是默认配置):

<Server port="8005" shutdown="SHUTDOWN">

  <Service name="Catalina">

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               />

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
                keystoreFile="cert/tomcat.keystore"
                keystorePass="password"
               />

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    <Engine name="Catalina" defaultHost="localhost">

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

      </Host>
    </Engine>
  </Service>
</Server>

奇怪的是,当我在 server.xml 中配置任何 proxyName 和 proxyPort 以及主机的域名时,一切都停止工作了。上面的 server.xml 示例正在运行,但由于某种原因,会话丢失。

【问题讨论】:

    标签: apache tomcat reverse-proxy mod-proxy server.xml


    【解决方案1】:

    您看到会话丢失是因为您更改了应用程序的上下文路径

    ProxyPass /apps/my_app https://MACHINE_IP:8443/my_app
    

    从 httpd 中的 /apps/my_app 到 Tomcat 中的 /my_app。这意味着 Tomcat 将为路径 /my_app 发出会话 cookie,它与客户端从 httpd 请求的内容不匹配。

    要解决此问题,请使用 ProxyPassReverseCookiePath

    【讨论】:

    • 感谢您的回答。现在会话丢失问题似乎消失了。请问我是否需要在 Tomcat 配置中添加任何 proxyName/proxyPort,或者对 Host name 属性进行任何更改?据我了解,没有,因为 Apache HTTP(转发请求)位于同一台机器上。
    • 除非您在 Tomcat 中定义了多个主机(即您在 Tomcat 中进行虚拟托管),否则单个默认主机的名称无关紧要。 mod_proxy 应该负责修复主机和端口,但它不能处理所有情况。为了安全起见,在 Tomcat 中定义 proxyHost 和 proxyPort 并没有什么坏处。
    猜你喜欢
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多