代码之家  ›  专栏  ›  技术社区  ›  Sudhakar Chavali

JSessionID在Apache Web服务器上不是持久的

  •  1
  • Sudhakar Chavali  · 技术社区  · 6 年前

    下面是我的httpd.conf配置。我使用Tomcat服务器作为后端服务器,并且使用ApacheWebServer作为我的Tomcat服务器的代理。

    对于不需要会话的所有网页,下面的配置工作正常。

    当进一步调查时,我观察到JSessionID在每个Web请求上都在变化,这意味着当请求和响应通过ApacheHTTP服务器时,该ID不会持久化。

    请注意,当我试图将Tomcat服务器直接公开到Web JSessionID时,它是持久的,并且按预期工作。但是,作为安全性要求,我们只需要使用Tomcat服务器作为后端内部服务器。

    所以我不知道为什么ApacheHTTP服务器不喜欢正确处理JSessionID。同样,请求您的帮助,并指导我在配置中缺少什么。

    注意:我们不需要任何负载均衡器设置,因此目前我不考虑mod eu proxy_balancer模块。

    <VirtualHost *:443>
    ServerName www.external.com
    ProxyRequests Off
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
             AddOutputFilterByType SUBSTITUTE text/html
        ProxyPreserveHost off
        ProxyPass / http://localhost:8080/internal/
        ProxyPassReverse / http://localhost:8080/internal/    
        Substitute "s|http://localhost:8080/internal|https://www.external.com|i"                
        SSLProtocol all
        SSLEngine on     
        SSLCertificateFile C:/keys/site/external_cert.cer       
        SSLCertificateKeyFile C:/keys/site/www_internal_private.p12.pri.pem
        SSLCertificateChainFile C:/keys/site/Intermediate_CA.cer
    </VirtualHost>
    

    Apache Web服务器为Apache 2.4,Tomcat引擎为Tomcat 8.5

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ori Marko    6 年前

    跟随 serverfault answer 通过添加 Set-Cookie 标题:

    最后,我只需要将以下行添加到我的虚拟主机配置中,这会将所有cookie路径从/webapp_name更改为/(root):

    Header edit Set-Cookie "^(.*; Path=)/WEBAPP_NAME/?(.*)" $1/$2