在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的

Sidebar