使用 Squid 反向代理将 Apache http 重定向到 https

使用 Squid 反向代理将 Apache http 重定向到 https

我有一个运行网站 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.comhttps://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>

您可以阅读更多关于基于名称的虚拟主机的信息这里

相关内容