如何正确配置Apache中的VirtualHost(用于eXist-db应用程序)

时间:2017-01-16 12:34:00

标签: apache session-cookies reverse-proxy exist-db

在虚拟服务器上,我需要在其他网站旁边运行eXist-db应用程序。在我的应用程序中,使用cookie进行登录和注销。

这些设置适用于Firefox,一切都按预期运行:

<VirtualHost *:80>
  ServerAdmin my@mail.com
  ServerName my-app.my-domain.com
  ProxyRequests off
  ProxyPass / http://xx.xx.xx.xx:xxxx/exist/apps/my-app/
  ProxyPassReverse / http://xx.xx.xx.xx:xxxx/exist/apps/my-app/
  ProxyPassReverseCookiePath / http://my-app.my-domain.com
</VirtualHost>

我知道这些设置看起来有点奇怪,但它们是我能找到的最好的,正如我上面所述,它们只适用于Firefox。它们可能特定用于eXist-db应用程序。 (我的灵感来自this solution。)

然而,在IE 11中存在一些问题。我能够每一页登录,一旦我尝试访问其他安全页面(或相同!),我就会注销。我知道ProxyPassReverseCookieDomain可能性,但不知道如何使用它。我尝试了localhost my-domain.com和类似但没有任何效果。

在应用程序的控制器中,我禁用所有缓存(no-cache, no-store, must-revalidate),这对于正确登录和退出页面是必要的。

apache2 -S日志:

[Mon Jan 16 16:09:10.287083 2017] [core:warn] [pid 16104] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
[Mon Jan 16 16:09:10.287698 2017] [core:warn] [pid 16104] AH00111: Config variable ${APACHE_PID_FILE} is not defined
[Mon Jan 16 16:09:10.288003 2017] [core:warn] [pid 16104] AH00111: Config variable ${APACHE_RUN_USER} is not defined
[Mon Jan 16 16:09:10.288220 2017] [core:warn] [pid 16104] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
[Mon Jan 16 16:09:10.288490 2017] [core:warn] [pid 16104] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Mon Jan 16 16:09:10.293480 2017] [core:warn] [pid 16104:tid 140486280820608] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf:
Invalid Mutex directory in argument file:${APACHE_LOCK_DIR}

2 个答案:

答案 0 :(得分:1)

尝试将代理配置设置为位置部分

<VirtualHost *:80>
    ServerAdmin my@mail.com
    ServerName my-app.my-domain.com
    ProxyRequests off
    <Location />
        ProxyPass http://xx.xx.xx.xx:xxxx/exist/apps/my-app/
        ProxyPassReverse http://xx.xx.xx.xx:xxxx/exist/apps/my-app/
        ProxyPassReverseCookiePath http://my-app.my-domain.com
    </Location>
</VirtualHost>

答案 1 :(得分:1)

解决方案是:ProxyPassReverseCookiePath /exist /

我想通过检查通过Firebug显示的cookie参数。 URL的/exist部分没有被怀疑,因为它被控制器重写,并且在地址栏中看不到。

JSESSIONID的路径值/,登录Cookie /exist。现在他们都有/