在 Nginx 中将 HTTP 重定向到 HTTPS

在本指南中,我们将说明如何在 Nginx 中将 HTTP 通信重定向到 HTTPS 。

Nginx 的发音是 “engine x” ,它是一个免费的,开源的,高性能 HTTP 和反向代理服务器,负责处理 Internet 上一些最大站点的负载。

如果您是开发人员或系统管理员,那么您很有可能会定期与 Nginx 打交道。您可能要执行的最常见任务之一是将 HTTP 流量重定向到网站的安全 (HTTPS) 版本。

与 HTTP 不同, HTTP 以纯文本形式发送和返回请求和响应, HTTPS 使用 TLS/SSL 加密客户端和服务器之间的通信。

使用 HTTPS 有很多好处,例如:

  • 所有数据都是双向加密的。结果,如果拦截了敏感信息,则无法读取。
  • Google Chrome 浏览器和所有其他流行的浏览器都会将您的网站标记为安全。
  • HTTPS 允许您使用 HTTP/2 协议,这可以显着提高站点性能。
  • Google 偏爱 HTTPS 网站。如果通过 HTTPS 提供服务,则您的网站排名将会更高。

在 Nginx 中将 HTTP 重定向到 HTTPS 的首选方法是为站点的每个版本配置一个单独的服务器块。您应该避免使用 if 指令重定向流量,因为它可能会导致服务器行为异常。

将单个站点的 HTTP 重定向到 HTTPS

要将单个网站重定向到 HTTPS ,请打开域配置文件并进行以下更改:

server {
    listen 80;
    listen [::]:80;
    server_name bu zheng www.buzheng.org;
    return 301 https://buzheng.org$request_uri;
}

让我们逐行分解代码:

  • listen 80 - 服务器块将侦听指定域在端口 80 上的传入连接。
  • server_name buzheng.org www.buzheng.org - 指定服务器块的域名。确保将其替换为您自己的域名。
  • return 301 https://buzheng.org$request_uri- 将流量重定向到网站的 HTTPS 版本。的 $request_uri 变量是包括参数完整的原始请求 URI 。

通常,您还希望将站点的 HTTPS 从 www 版本重定向到非 www 版本,反之亦然。推荐的重定向方式是为 www 和非 www 版本创建一个单独的服务器块。

例如,要将 HTTPS www 请求重定向到非 www ,应使用以下配置:

server {
    listen 80;
    listen [::]:80;
    server_name buzheng.org www.buzheng.org;
    return 301 https://buzheng.org$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.buzheng.org;

    # . . . other code

    return 301 https://buzheng.org$request_uri;
}

server {
    listen 443 ssl http2;
    server_name buzheng.org;

    # . . . other code
}

将所有站点重定向到 HTTPS

如果服务器上托管的所有网站都配置为使用 HTTPS ,并且您不想为每个站点创建单独的 HTTP 服务器块,则可以创建一个通用的 HTTP 服务器块。该块会将所有 HTTP 请求重定向到适当的 HTTPS 块。

要创建一个通用的 HTTP 块,它将访问者重定向到站点的 HTTPS 版本,请打开 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 重定向。

结论

在网站上安装 SSL 证书后,应将 HTTP 流量重定向到 HTTPS 。

在 Nginx 中,将 HTTP 重定向到 HTTPS 的首选方法是创建一个单独的服务器块并执行 301 重定向。