在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,请使用“重定向”指令,如下例所示:
<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)上侦听指定域的传入连接。
“ ServerName”和“ ServerAlias”指令指定了虚拟主机的域名。
确保将其替换为域名。
HTTP虚拟主机中突出显示的行“ Redirect永久/https://example.com/”将流量重定向到站点的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
使用'.htaccess'将HTTP重定向到HTTPS
“ .htaccess”是针对Apache Web服务器的每个目录的配置文件。
该文件可用于定义Apache如何从放置文件的目录中提供文件,以及启用/禁用其他功能。
通常,“。
htaccess”文件位于域根目录中,但是我们可以在子目录中拥有其他“ .htaccess”文件。
此方法要求将“ mod_rewrite”模块加载到Apache服务器上。
默认情况下,此模块在大多数服务器上已加载。
如果可能的话,最好在虚拟主机中创建重定向,因为它更简单,更安全。
要将所有HTTP通信重定向到HTTPS,请打开“ .htaccess”根文件,然后向其中添加以下代码:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$https://example.com/ [L,R=301]
代码是什么意思:
- 'RewriteEngine On'-启用重写功能。
- 'RewriteCond%{HTTPS} off'-检查HTTP连接,如果满足条件,则执行下一行。
- 'RewriteRule ^(。*)$https://example.com/$1 [L,R = 301]'-将HTTP重定向到状态代码为301的HTTPS(永久移动)。确保更改域名。
下面的示例还有一个添加条件,用于检查请求是否以'www'开头。
使用它来强制所有访问者使用该的HTTPS非www版本:
RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^www\.example\.com [NC] RewriteRule ^(.*)$https://example.com/ [L,R=301]
编辑“ .htaccess”文件时,我们不需要重新启动服务器,因为Apache会在每个请求中读取该文件。