Apache 上的永久重定向不起作用

Apache 上的永久重定向不起作用

我在 Windows 2008 上有一个 Apache 2.4 服务器,它作为反向代理运行得很好。它提供来自在 Glassfish 3.0 上运行的 LifeRay 6.0 安装的内容。最初,当我们实施 https 永久重定向时,我们无法再登录 LifeRay,但我认为目前这个问题已经解决了。一旦我们登录 Liferay,连接就是安全的,但仍然可以将 https 更改为 http,页面将显示为 http 连接,而无需恢复为 https。此外,到站点的初始连接可以使用 http,如果用户不登录,站点将继续使用 http 连接。同样,我认为永久重定向会强制所有 http 流量为 https。

Apache 为用户提供 SSL 连接,而 proxypass 指令通过不安全的端口连接到 LifeRay,这不是问题,因为内部连接是虚拟的,无法从 Internet 访问。因此,我以为我已经确定了配置,但我肯定遗漏了某些东西,因为我似乎能够使用 http 访问网站,而我以为永久重定向会阻止这种情况。ProxyPassReverse 应该是 https 而不是 http 吗?以下是配置:

测试服务器
<VirtualHost *:443>
ServerName test.myexternalserver.org
 #
 ProxyPreserveHost On
 SetEnv proxy-sendchunked
 SSLEngine on
 ProxyPass / http://192.168.80.196:8080/
 ProxyPassReverse / http://192.168.80.196:8080/

 </VirtualHost>

 <VirtualHost *:80>
 ServerName test.myexternalserver.org
 ProxyPreserveHost On
 SetEnv proxy-sendchunked
 Redirect permanent / https://test.myexternalserver.org/
 ProxyPass / http://192.168.80.196:8080/
 ProxyPassReverse / http://192.168.80.196:8080/

 </VirtualHost>

答案1

从我今天早上读到的内容来看,模块是按照既定顺序执行的。(顺序似乎是由模块的代码在编译时确定的。)根据你在这里的问题,听起来mod_proxy(for & co.) 在(for )ProxyPass之前执行。mod_aliasRedirect

为了获得预期的行为,您可以从端口 80 虚拟主机中删除对代理的所有引用。我们在生产中可能有许多与此非常相似的 VHost,它们工作得很好。

<VirtualHost *:80>
  ServerName test.myexternalserver.org
  Redirect permanent / https://test.myexternalserver.org/
</VirtualHost>

相关内容