在Apache中将HTTP重定向到HTTPS

Apache HTTP服务器是世界上最受欢迎的Web服务器之一。 这是一个开放源代码和跨平台的HTTP服务器,可为Internet的很大一部分网站提供支持。 Apache提供了许多强大的功能,可以通过其他模块进行扩展。

如果您是网站所有者或系统管理员,则很可能会定期与Apache打交道。 您可能要执行的最常见任务之一是将HTTP流量重定向到网站的安全(HTTPS)版本。

与HTTP(以纯文本形式发送和返回请求和响应)不同,HTTPS使用TLS / SSL加密客户端和服务器之间的通信。

通过HTTP使用HTTPS有许多优点,例如:

  • 所有数据都是双向加密的。 结果,如果拦截了敏感信息,则无法读取。
  • Google Chrome浏览器和所有其他流行的浏览器都会将您的网站标记为安全。
  • HTTPS允许您使用HTTP / 2协议,这可以大大提高站点性能。
  • Google偏爱HTTPS网站。 如果通过HTTPS提供服务,您的网站将排名更高。

本指南介绍了如何将HTTP流量重定向到Apache中的HTTPS。

在Apache中,有几种方法可以重定向到HTTPS。 如果您具有运行Apache的Linux服务器的超级用户访问权限,则首选方法是在域的虚拟主机配置文件中设置重定向。 否则,您可以在域的 .htaccess 一些控制面板,例如cPanel允许您通过单击几下鼠标来强制HTTPS重定向。

使用虚拟主机#将HTTP重定向到HTTPS

Apache虚拟主机定义服务器上托管的一个或多个域的设置。 在虚拟主机指令中,您可以指定站点文档的根目录(包含网站文件的目录),为每个站点创建单独的安全策略,使用不同的SSL证书,配置重定向等等。

通常,当在域上安装SSL证书时,您将对该域具有两个虚拟主机指令。 第一个用于端口80的站点的HTTP版本,另一个用于端口443的HTTPS版本。

在基于Red Hat的发行版(例如CentOS和Fedora)中,虚拟主机文件存储在 /etc/httpd/conf.d。 在Debian及其衍生版本(例如Ubuntu)上时,文件存储在 /etc/apache2/sites-available 目录。

要将网站重定向到HTTPS,请使用 Redirect 指令,如下例所示:

<VirtualHost *:80> 
  ServerName example.com
  ServerAlias www.example.com

  Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName example.com
  ServerAlias www.example.com

  Protocols h2 http/1.1

  # SSL Configuration

  # Other Apache Configuration

</VirtualHost>

让我们解释一下代码。 我们正在使用两个虚拟主机指令,一个用于HTTP,一个用于该网站的HTTPS版本。

  • VirtualHost *:80 -Apache服务器在端口80(HTTP)上侦听指定域的传入连接。
  • VirtualHost *:443 -Apache服务器在端口443(HTTPS)上侦听指定域的传入连接。

ServerNameServerAlias 指令指定虚拟主机的域名。 确保将其替换为您的域名。

突出显示的行, Redirect permanent / https://example.com/ 在HTTP虚拟主机中,将流量重定向到站点的HTTPS版本。

通常,您还希望将站点的HTTPS www版本重定向到非www,反之亦然。 这是一个示例配置:

<VirtualHost *:80> 
  ServerName example.com
  ServerAlias www.example.com

  Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName example.com
  ServerAlias www.example.com

  Protocols h2 http/1.1

  <If "%{HTTP_HOST} == 'www.example.com'">
    Redirect permanent / https://example.com/
  </If>

  # SSL Configuration

  # Other Apache Configuration

</VirtualHost>

HTTPS虚拟主机(突出显示的行)中的代码正在检查请求标头是否包含www域,并重定向到非www版本。

每当您对配置文件进行更改时,都需要重新启动或重新加载Apache服务,以使更改生效:

  • Debian和Ubuntu:

    sudo systemctl reload apache2
  • CentOS和Fedora:

    sudo systemctl reload httpd

使用以下命令将HTTP重定向到HTTPS .htaccess

.htaccess 是Apache Web服务器按目录的配置文件。 该文件可用于定义Apache如何从放置文件的目录中提供文件,以及启用/禁用其他功能。

通常, .htaccess 文件放置在域根目录中,但是您可以将其他文件放置在 .htaccess 子目录中的文件。

此方法需要 mod_rewrite 模块加载到Apache服务器上。 默认情况下,此模块在大多数服务器上加载。 如果可能的话,最好在虚拟主机中创建重定向,因为它更简单,更安全。

要将所有HTTP通信重定向到HTTPS,请打开根目录 .htaccess 文件,并向其中添加以下代码:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

代码是什么意思:

  • RewriteEngine On -启用重写功能。
  • RewriteCond %{HTTPS} off -检查HTTP连接,如果满足条件,则执行下一行。
  • RewriteRule ^(.*)$ https://example.com/$1 [L,R=301] -使用状态代码301(永久移动)将HTTP重定向到HTTPS。 确保更改域名。

下面的示例还有一个附加条件,用于检查请求是否以 www。 使用它强制所有访问者使用该网站的HTTPS非www版本:

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

编辑时 .htaccess 文件,则无需重新启动服务器,因为Apache会在每个请求中读取文件。

结论#

在Apache中,将HTTP重定向到HTTPS的首选方法是在域的虚拟主机中配置301重定向。

如果您有任何疑问或反馈,请随时发表评论。

阿帕奇

Sidebar