Apache中将HTTP重定向至HTTPS

Apache HTTP服务器是世界上流行的Web服务器之一 。这是一种开源跨平台HTTP服务器,为互联网上很大一部分的网站提供支持 。Apache提供了许多强大的功能,可通过额外的模块加以扩展 。
如果你是一名网站所有者或系统管理员,很可能常与Apache打交道 。你可能执行的最常见任务之一是将HTTP流量重定向至你网站的安全(HTTPS)版本 。
不像HTTP以明文格式发送和返回请求和响应,HTTPS使用TLS/SSL来加密客户端和服务器之间的通信内容 。

Apache中将HTTP重定向至HTTPS

文章插图
使用HTTPS而不是HTTP有许多优点,比如:
  • 所有数据都是双向加密的 。因而,敏感信息即使遭拦截也无法被读取 。
  • 谷歌Chrome浏览器和所有其他流行的浏览器会将你的网站标为安全网站 。
  • HTTPS让你可以使用HTTP/2协议,从而大大改善网站性能 。
  • 谷歌偏爱HTTPS网站 。如果网站内容通过HTTPS来提供,你网站的排名会更高 。
本文介绍了如何在Apache中将HTTP流量重定向至HTTPS 。
在Apache中,有几种方法可以重定向至HTTPS 。如果你拥有访问Apache在其中运行的linux服务器的root权限,首选方法是在域名的虚拟主机配置文件中设置重定向 。否则,可以在域名的.htaccess文件中设置重定向 。
一些控制面板(比如cPanel)让你可以通过点击几下鼠标强制进行HTTPS重定向 。
使用虚拟主机将HTTP重定向至HTTPS
Apache虚拟主机定义了服务器上托管的一个或多个域名的设置 。在虚拟主机指令中,你可以指定网站文档root(包含网站文件的那个目录)、为每个网站创建单独的安全策略、使用不同的SSL证书、配置重定向等等 。
将SSL证书安装到域名上时,通常会有针对该域名的两个虚拟主机指令 。第一个面向端口80的网站的HTTP版本,另一个面向端口443的HTTPS版本 。
在基于Red Hat的发行版(比如centos和Fedora)中,虚拟主机文件存储在/etc/httpd/conf.d中 。在Debian及其衍生版本(比如Ubuntu)上时,文件存储在/etc/apache2/sites-available目录中 。
要将网站重定向至HTTPS,使用Redirect指令,如下例所示:
  1. <VirtualHost *:80>
  2.  ServerName example.com
  3.  ServerAlias www.example.com
  4.  Redirect permanent / https://example.com/
  5. </VirtualHost>
  6. <VirtualHost *:443>
  7.  ServerName example.com
  8.  ServerAlias www.example.com
  9.  Protocols h2 http:/1.1
  10.  # SSL Configuration
  11.  # Other Apache Configuration
  12. </VirtualHost>
不妨解释一下代码 。我们使用两个虚拟主机指令,一个用于HTTP版本的网站,一个用于HTTPS版本的网站 。
  • VirtualHost *:80—Apache服务器在端口80(HTTP)上侦听指定域名的入站连接 。
  • VirtualHost *:443—Apache服务器在端口443(HTTPS)上侦听指定域名的入站连接 。
ServerName和ServerAlias指令指定虚拟主机的域名 。确保将其换成你的域名 。
HTTP虚拟主机中高亮的一行:Redirect permanent / https://example.com/将流量重定向至网站的HTTPS版本 。
通常,你还希望将网站的HTTPS www版本重定向至非www,反之亦然 。这是一个示例配置:
  1. <VirtualHost *:80>
  2.  ServerName example.com
  3.  ServerAlias www.example.com
  4.  Redirect permanent / https://example.com/
  5. </VirtualHost>
  6. <VirtualHost *:443>
  7.  ServerName example.com
  8.  ServerAlias www.example.com
  9.  Protocols h2 http:/1.1
  10.  <If "%{HTTP_HOST} == 'www.example.com'">
  11.  Redirect permanent / https://example.com/
  12.  </If>
  13.  # SSL Configuration
  14.  # Other Apache Configuration
  15. </VirtualHost>
HTTPS虚拟主机内的代码(高亮的那一行)检查请求报头是否含有www域名、重定向至非www版本 。
每当你更改配置文件,都需要重新启动或重新加载Apache服务,以使更改生效:
Debian和Ubuntu:
  1. sudo systemctl reload apache2
  2. CentOS和Fedora:
  3. sudo systemctl reload httpd
使用.htaccess将HTTP重定向至HTTPS
.htaccess是Apache Web服务器基于目录的配置文件 。该文件可用于定义Apache如何从文件所在的目录中提供文件以及启用/禁用其他功能 。
.htaccess文件通常位于域名根目录中,但你可以将其他.htaccess文件放在子目录中 。
该方法要求将mod_rewrite模块加载到Apache服务器上 。默认情况下,该模块加载到大多数服务器上 。可能的话,最好在虚拟主机中创建重定向,因为这更简单更安全 。


推荐阅读