使用  `return  301  https://$server_name$request_uri;`  是  Nginx  中实现  HTTP  强制跳转  HTTPS  最直接、最高效的方法之一。

核心原理是:为  Nginx  增加一个监听  80  端口的  `server`  块,专门用来捕获所有  HTTP  请求,然后返回一个  301  永久重定向,将用户导向对应的  HTTPS  地址。

一、具体配置步骤

1.    找到配置文件:Nginx  的主配置文件通常位于  `/etc/nginx/nginx.conf`,或者站点配置文件在  `/etc/nginx/sites-available/`  目录下。

2.    编辑配置:在配置文件中,为你的域名创建一个或修改现有的、监听  80  端口的  `server`  块,内容如下:

        ```nginx

        server  {

                listen  80;

                #  监听所有IPv4和IPv6的80端口

                #  listen  [::]:80;  

                                #  替换为你的域名

                server_name  yourdomain.com  www.yourdomain.com;  

                                #  核心跳转指令:返回301,重定向到HTTPS

                return  301  https://$server_name$request_uri;  

        }

        ```

        代码说明:

              `listen  80;`:指示  Nginx  监听所有发往  80  端口的  HTTP  请求。

              `server_name`:指定这条规则适用的域名。

              `return  301`:向客户端返回  301  永久重定向状态码。如果你只是临时测试,可能需要改回  HTTP,可以先用  302  临时重定向。

              `https://$server_name$request_uri`:这是重定向的目标地址。

                      `$server_name`:是一个  Nginx  内置变量,会自动替换为当前请求的域名,也就是你  `server_name`  里配置的值。

                      `$request_uri`:会保留原始请求中的完整路径和查询参数(例如  `/page?name=value`)。

3.    配置  HTTPS  服务:确保你已经有一个监听  443  端口的  `server`  块来处理  HTTPS  流量。这个块里需要配置好  SSL  证书。

4.    测试并重载配置:

              运行  `sudo  nginx  -t`  测试配置文件语法是否正确。

              如果测试通过,运行  `sudo  systemctl  reload  nginx`  或  `sudo  nginx  -s  reload`  使新配置生效。

二、注意事项

      `$host`  vs  `$server_name`:上面用的是  `$server_name`,你也可以用  `$host`。`$host`  取自客户端请求的  `Host`  头,而  `$server_name`  取自配置文件。大多数情况下两者一样,但用  `$server_name`  更可控,能避免  HTTP  Host  头攻击的潜在风险。

      避免重定向循环:确保重定向逻辑只针对  80  端口的  HTTP  流量生效,不要错误地在  443  端口的  HTTPS  `server`  块里也配置跳转。

      考虑启用  HSTS:在  HTTPS  的  `server`  块中添加  `add_header  Strict-Transport-Security  "max-age=31536000;  includeSubDomains"  always;`  可以强制浏览器在接下来的一年里,只通过  HTTPS  访问你的网站,进一步提升安全性。

三、总结

总而言之,使用  `return  301  https://$server_name$request_uri;`  配置  HTTP  到  HTTPS  的强制跳转,是  Nginx  中一种标准、高效且推荐的做法。它配置简单,能完美保留原始请求的  URL  路径,并对搜索引擎友好。