我有一个运行网站 example.com 的 Web 服务器。我已在 Apache 上配置了 http 到 https 的重定向;请参见下文
<VirtualHost *:80>
ServerName www.example.com
Redirect permanent / https://www.example.com
</VirtualHost>
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /usr/www/htdocs
SSLEngine On #etc...
</VirtualHost>
http 上的请求已成功内部重定向。
因此,问题在于外部请求必须通过 Squid 反向代理。当尝试连接到 http://example.com 时,会建立 http 连接。不是 https,重定向失败。
如果我们输入以下 URL:http://example.com/index.html,连接成功重定向到https。
有人知道我们该如何解决这个问题吗?
答案1
尝试连接到 时
http://example.com
,建立的是 HTTP 连接,而不是 HTTPS,因此重定向不成功。
http://example.com
您似乎遇到的一个问题是,您的 Apache 虚拟主机配置中没有 的条目。该www
前缀在技术上是 的子域example.com
,因此被视为需要解析的单独站点。排除 Squid 的任何问题,一个简单的解决方法是修改您的虚拟主机以考虑 的不同变体,example.com
使用以下ServerAlias
指令:
# Redirect http://example.com and http://www.example.com
# to https://www.example.com
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://www.example.com
</VirtualHost>
# Serve https://example.com and https://www.example.com
# from the same DocumentRoot
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /usr/www/htdocs
SSLEngine On #etc...
</VirtualHost>
请注意,您也可以重定向https://example.com
到https://www.example.com
:
# Redirect http://example.com and http://www.example.com
# to https://www.example.com
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://www.example.com
</VirtualHost>
# Redirect https://example.com to https://www.example.com
<VirtualHost *:443>
ServerName example.com
Redirect permanent / https://www.example.com
SSLEngine On #etc...
</VirtualHost>
# Serve https://www.example.com
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /usr/www/htdocs
SSLEngine On #etc...
</VirtualHost>
您可以阅读更多关于基于名称的虚拟主机的信息这里。