|
|
51CTO旗下网站
|
|
移动端

Apache中将HTTP重定向至HTTPS

Apache HTTP服务器是世界上流行的Web服务器之一。这是一种开源跨平台HTTP服务器,为互联网上很大一部分的网站提供支持。Apache提供了许多强大的功能,可通过额外的模块加以扩展。

作者:布加迪编译来源:51CTO|2020-01-07 08:00

【51CTO.com快译】Apache HTTP服务器是世界上流行的Web服务器之一。这是一种开源跨平台HTTP服务器,为互联网上很大一部分的网站提供支持。Apache提供了许多强大的功能,可通过额外的模块加以扩展。

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

不像HTTP以明文格式发送和返回请求和响应,HTTPS使用TLS/SSL来加密客户端和服务器之间的通信内容。

使用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服务器上。默认情况下,该模块加载到大多数服务器上。可能的话,最好在虚拟主机中创建重定向,因为这更简单更安全。

要将所有HTTP流量重定向至HTTPS,请打开root .htaccess文件,为它添加以下代码:

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

以下是代码的含义:

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

下面这个例子有一个额外的条件,检查请求是否以www开始。用它迫使所有访客使用网站的HTTPS非www版本:

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

编辑.htaccess文件时,你不需要重启服务器,因为Apache在每次请求时读取文件。

结束语

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

原文标题:Redirect HTTP to HTTPS in Apache

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【编辑推荐】

  1. 详细解析Nginx的功能和应用场景:正代、反向代理、负载、Http
  2. Web服务器Nginx环境下如何实现安全证书Https的配置
  3. 有问有答:什么是DNS over HTTPS?
【责任编辑:武晓燕 TEL:(010)68476606】


点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

Python应用场景实战手册

Python应用场景实战手册

Python应用场景实战手册
共3章 | KaliArch

2人订阅学习

一步到位玩儿透Ansible

一步到位玩儿透Ansible

Ansible
共17章 | 骏马金龙1

99人订阅学习

云架构师修炼手册

云架构师修炼手册

云架构师的必备技能
共3章 | Allen在路上

28人订阅学习

读 书 +更多

Microsoft SQL Server 2005技术内幕:T-SQL程序设

SQL Server 2005微软官方权威参考手册。 是Inside Microsoft SQL Server 2005系列书中的第一本,SQL Server类的顶尖之作。 全球公认SQL S...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微