如何在Nginx中将HTTP重定向到HTTPS(分步指南)

介绍Nginx(发音为“Engine-X”)是一个基于 Linux 的 Web 服务器和代理应用程序。Nginx 是用于重定向和管理 Web 流量的强大工具。它可以轻松配置为将未加密的 HTTP Web 流量重定向到加密的 HTTPS 服务器。
如何在Nginx中将HTTP重定向到HTTPS?本指南将向你展示如何使用 Nginx 将 HTTP 重定向到 HTTPS,包括详细的Nginx将HTTP重定向到HTTPS示例。
先决条件

  • 运行 Nginx 的 Linux 服务器
  • 具有sudo  权限的用户帐户 
  • 远程登录 Web 服务器(可选,仅当你不直接在 Web 服务器上工作时才需要)
  • 访问终端/命令行(Ctrl-Alt-T 或 Ctrl-Alt-F2)
HTTP 到 HTTPS 重定向Nginx如何将HTTP重定向到HTTPS?要强制执行 HTTP 到 HTTPS 重定向,你需要编辑 Nginx 配置文件。
大多数情况下,你可以在/etc/nginx/sites-available目录中找到该文件。如果未找到,请在此处搜索:/etc/nginx/nginx.conf、 /usr/local/nginx/conf或/usr/local/etc/nginx。
找到 Nginx 配置文件后,使用以下命令在文本编辑器中打开它:
sudo nano /etc/nginx/sites-available/server.conf

将该位置替换为配置文件的实际位置和名称。
【如何在Nginx中将HTTP重定向到HTTPS(分步指南)】注意:如果你是远程连接,请确保你首先通过 SSL 登录。此外,如果你使用图形界面,则可以浏览到文件位置而不是使用终端命令。
打开配置文件进行编辑后,插入下面的代码块之一。完成编辑后,保存文件并退出。然后,使用以下命令重新启动 Nginx 服务:
sudo service nginx restart

Nginx 将所有 HTTP 流量重定向到 HTTPS
如何在Nginx中将HTTP重定向到HTTPS?打开Nginx配置文件进行编辑,然后插入如下代码:
server {listen 80 default_server; server_name _; return 301 https://$host$request_uri; }

在以上的Nginx将HTTP重定向到HTTPS示例中,以下是命令的细分:
  • Listen 80:这会指示系统捕获端口 80 上的所有 HTTP 流量
  • Server_name _; : 这将匹配任何主机名
  • Return 301:这告诉浏览器(和搜索引擎)这是一个永久重定向
  • https://$host$request_uri:这是一个短代码,用于指定用户输入的任何内容的 HTTPS 版本
编辑后,HTTP 默认服务器的所有流量都重定向到 HTTPS。
注:这应该是唯一的服务器模块上的80端口侦听(服务器块是在Nginx的配置代码单元它是由一个名字和大括号标记。)
重定向特定站点Nginx如何将HTTP重定向到HTTPS?你可能有多个服务器,但只有其中一些可能需要 HTTPS。在服务器块中指定服务器名称以重定向选定的流量:
server {listen 80 default_server; server_name my_app.com; return 301 https://my_app.com$request_uri; }

将名称my_app.com替换为你要重定向的服务器的名称。你可能还想通过添加另一个服务器块来添加其他站点。只需复制代码,然后切换服务器名称即可。
仅接受 SSL 连接添加此代码以确保服务器仅接受端口 443 上的 SSL 连接:
server {listen 443 ssl default_server; server_name my_app.com; }server {listen 443 ssl; server_name my_website.com; }

Nginx将HTTP重定向到HTTPS示例?此代码块将设置两个网站my_app.com和my_website.com仅接受 SSL 连接。你可以使用其他服务器块来添加其他站点。
注意:  Let's Encrypt 是一个免费的证书颁发机构,允许你在 NGINX 服务器上设置 SSL/TLS 加密。查看我们关于如何设置 Let's Encrypt 以保护你的 Nginx 服务器的文章。
Nginx 页面重定向
Nginx如何将HTTP重定向到HTTPS?你可以使用重写代码快速管理 301(永久)或 302(临时)重定向:
Location /index.html {rewrite ^/oldURL$ https://www.your_domain.com/newURL redirect; }

大多数情况下,位置将是index.html,但你可以指定任何路径/模式。
请注意,该rewrite命令只能用于 301 或 302 重定向。
如何使用 Nginx 重定向域
如何在Nginx中将HTTP重定向到HTTPS?如果你已从虚扩展名(如 .biz 或 .net)更改为标准的 .com 地址,这将非常有用。它还可以用于从旧域名重定向到新域名。
server {listen 80; listen 443 ssl; server_name www.old_company.com; return 301 $scheme://www.new_company.com$request_uri; }

在大多数情况下,该return命令优于重写命令。
从 www 网站重定向到非 www 网站
此过程类似于标准页面重定向:
server {server_name www.new_company.com; return 301 $scheme://new_company.com$request_uri; }

重定向流量的原因
将 HTTP 流量重定向到 HTTPS 的原因有很多。你可能需要:
  • 强制建立更安全的加密连接。
  • 保留具有良好 SEO 排名的页面,但将其流量发送到新页面。
  • 通知并临时将流量发送到“维护中”页面。
  • 永久地将流量从一个网站发送到另一个网站,即在公司合并之后。
结论如何在Nginx中将HTTP重定向到HTTPS?现在你知道如何在 Nginx 中将 HTTP 重定向到 HTTPS。通过编辑配置文件,你可以将流量从特定目的地发送到不同的站点,并强制使用Nginx SSL 证书。这有助于你安全地管理对网站的更改,而不会中断用户体验。

    推荐阅读