在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 linuxize.com www.linuxize.com;
return 301 https://linuxize.com$request_uri;
}
让我们逐行分解代码:
listen 80
-服务器块将侦听指定域在端口80上的传入连接。server_name linuxize.com www.linuxize.com
-指定服务器块的域名。 确保将其替换为您的域名。return 301 https://linuxize.com$request_uri
-将流量重定向到网站的HTTPS版本。 的$request_uri
variable是完整的原始请求URI,包括参数。
通常,您还希望将站点的HTTPS www版本重定向到非www,反之亦然。 推荐的重定向方式是为www和非www版本创建一个单独的服务器块。
例如,要将HTTPS www请求重定向到非www,应使用以下配置:
server {
listen 80;
server_name linuxize.com www.linuxize.com;
return 301 https://linuxize.com$request_uri;
}
server {
listen 443 ssl http2;
server_name www.linuxize.com;
# . . . other code
return 301 https://linuxize.com$request_uri;
}
server {
listen 443 ssl http2;
server_name linuxize.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重定向。
结论#
在Nginx中,将HTTP重定向到HTTPS的首选方法是创建一个单独的服务器块并执行301重定向。
如果您有任何疑问或反馈,请随时发表评论。
Nginx的