在Nginx中将HTTP重定向到HTTPS
在本教程中,我们将说明如何在Nginx中将HTTP通信重定向到HTTPS。
Nginx的发音是“ engine x”,它是一个免费的,开源的,高性能的HTTP和反向代理服务器,负责处理Internet上一些最大站点的负载。
如果我们是开发人员或者系统管理员,则很可能会定期与Nginx打交道。
我们可能要执行的最常见的任务之一是将HTTP流量重定向到的安全(HTTPS)版本。
与HTTP(以纯文本形式发送和返回请求和响应)不同,HTTPS使用TLS/SSL加密客户端和服务器之间的通信。
通过HTTP使用HTTPS有很多好处,例如:
- 所有数据都是双向加密的。结果,如果拦截了敏感信息,则无法读取。
- Google Chrome浏览器和所有其他流行的浏览器都会将标记为安全。
- HTTPS允许我们使用HTTP/2协议,这可以显着提高站点性能。
- Google偏爱HTTPS。如果通过HTTPS提供服务,则排名将会更高。
在Nginx中将HTTP重定向到HTTPS的首选方法是为站点的每个版本配置一个单独的服务器块。
我们应该避免使用if指令重定向流量,因为它可能会导致服务器的意外行为。
每个站点将HTTP重定向到HTTPS
通常,当在域上安装SSL证书时,该域将有两个服务器块。
第一个用于端口80的站点的HTTP版本,另一个用于端口443的HTTPS版本。
要将单个重定向到HTTPS,请打开域配置文件并进行以下更改:
server { listen 80; server_name theitroad.com www.theitroad.com; return 301 https://theitroad.com$request_uri; }
让我们逐行分解代码:
- 'listen 80'-服务器块将侦听指定域在端口80上的传入连接。
- “ server_name theitroad.com www.theitroad.com”-指定服务器块的域名。确保将其替换为域名。
- 'return 301 https://theitroad.com$request_uri'-将流量重定向到的HTTPS版本。 '$request_uri'变量是完整的原始请求URI,包括参数。
通常,我们还将希望将站点的HTTPS www版本重定向到非www站点,反之亦然。
推荐的重定向方式是为www和非www版本创建一个单独的服务器块。
例如,要将HTTPS www请求重定向到非www,可以使用以下配置:
server { listen 80; server_name theitroad.com www.theitroad.com; return 301 https://theitroad.com$request_uri; } server { listen 443 ssl http2; server_name www.theitroad.com; # . . . other code return 301 https://theitroad.com$request_uri; } server { listen 443 ssl http2; server_name theitroad.com; # . . . other code }
每当我们对配置文件进行更改时,都需要重新启动或者重新加载Nginx服务,以使更改生效:
sudo systemctl reload nginx
将所有站点重定向到HTTPS
如果服务器上托管的所有都配置为使用HTTPS,并且我们不想为每个站点创建单独的HTTP服务器块,则可以创建一个通用的HTTP服务器块。
该块会将所有HTTP请求重定向到适当的HTTPS块。
要创建一个将所有访问者重定向到站点的HTTPS版本的单个HTTP包,请打开Nginx配置文件并进行以下更改:
server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://$host$request_uri; }
让我们逐行分析代码:
- 'listen 80 default_server'-将此服务器块设置为所有不匹配域的默认(全部捕获)块。
- 'server_name '-''是一个无效域名,从不与任何真实域名匹配。
- 'return 301 https://$host $request_uri'-将流量重定向到状态代码为301(永久移动)的相应HTTPS服务器块。 “ $host”变量保存请求的域名。
例如,如果访问者在浏览器中打开“ http://example.com/page2”,则Nginx会将请求重定向到“ https://example.com/page2”。
如果可能,最好在每个域的基础上创建重定向,而不是从全局HTTP到HTTPS重定向。