如何在 Apache 中正确配置 VirtualHost(用于 eXist-db 应用程序)
How to configure VirtualHost in Apache properly (used for eXist-db app)
在虚拟服务器上,我需要 运行 除了其他网站之外还有一个 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}
尝试将代理配置设置到 Location 部分
<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>
解决方法是:ProxyPassReverseCookiePath /exist /
我通过检查 Firebug 显示的 cookie 参数发现了这一点。 URL 的 /exist
部分没有被怀疑,因为它被控制器重写并且在地址栏中看不到。
JSESSIONID
具有路径值 /
、log-in cookie /exist
。现在他们都有 /
.
在虚拟服务器上,我需要 运行 除了其他网站之外还有一个 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}
尝试将代理配置设置到 Location 部分
<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>
解决方法是:ProxyPassReverseCookiePath /exist /
我通过检查 Firebug 显示的 cookie 参数发现了这一点。 URL 的 /exist
部分没有被怀疑,因为它被控制器重写并且在地址栏中看不到。
JSESSIONID
具有路径值 /
、log-in cookie /exist
。现在他们都有 /
.