[特殊字符]使用 Nginx 将 HTTP 重定向到 HTTPS

随着互联网安全要求的提升,HTTPS(加密的 HTTP)已经成为现代网站的标配。但不少用户仍会通过 HTTP 访问网站,因此我们需要确保他们被自动重定向到 HTTPS。

本篇博客将介绍如何通过 Nginx 配置实现 HTTP 到 HTTPS 的自动重定向,并说明变量含义、注意事项及完整配置。


✳️ 为什么要从 HTTP 重定向到 HTTPS?

  • 安全性:HTTPS 提供了加密传输,防止中间人攻击。
  • SEO 友好:Google 明确表示优先收录 HTTPS 页面。
  • 浏览器兼容性:现代浏览器对 HTTP 页面标记为"不安全"。

🛠️ 环境准备

确保你已经具备以下条件:

  • 安装好的 Nginx(1.14+ 推荐)
  • 有效的 SSL 证书(如使用 Let's Encrypt)

📄 完整的 Nginx 配置示例(含重定向)

将下面文件放在 /etc/nginx/conf.d 并取名为 ssl.conf。

nginx 复制代码
# HTTP 服务器:监听 80 端口并重定向到 HTTPS
server {
    listen 80;
    server_name example.com www.example.com;

    # 永久重定向到 HTTPS
    return 301 https://$host$request_uri;
}

# HTTPS 服务器:监听 443 端口,启用 SSL
server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    # SSL 证书配置(以 Let's Encrypt 为例)
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ##密钥所在服务器的绝对路径
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ##密钥所在服务器的绝对路径

    # 推荐的 SSL 配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

🔍 $host 与 $request_uri 是什么?

在配置中这行代码很关键:

nginx 复制代码
return 301 https://$host$request_uri;

它表示将所有 HTTP 请求永久重定向到 HTTPS。下面解释两个变量:

🔸 $host

  • 表示请求头中的 Host 字段;
  • 代表用户请求的域名,比如 example.com 或 www.example.com;
  • 如果没有显式的 Host 请求头,Nginx 使用 server_name 的第一个值。

🔸 $request_uri

  • 表示原始请求路径 + 查询字符串(如 /login?user=admin);
  • 不包含协议和主机信息,仅表示 URI 部分。

✅ 举例说明

用户请求:

复制代码
http://example.com/shop?id=123

Nginx 返回:

复制代码
HTTP/1.1 301 Moved Permanently
Location: https://example.com/shop?id=123

等效于:

nginx 复制代码
return 301 https://example.com/shop?id=123;

🧪 调试小技巧

如果你想临时查看 $host 和 $request_uri 的值,可以添加如下调试配置:

nginx 复制代码
location /debug {
    return 200 "host: $host\nuri: $request_uri\n";
}

访问 http://example.com/debug 即可看到实际变量值。


✅ 总结

通过两段简单的配置,Nginx 就能实现自动将 HTTP 请求安全地重定向到 HTTPS,提高网站安全性和用户体验。

📌重点小结:

  • 使用 $host$request_uri 保留原始访问地址;
  • 使用 return 301 实现永久重定向;
  • 配置 HSTS 提高安全性;
  • 建议启用 HTTP/2 以提升性能。
相关推荐
cpolar技术支持4 小时前
网关加 gzip,同时开启 chunked,下载回来的包解不开:把两层编码的解压顺序与长度核对做成只读页
python·http·网络编程·socket·内网穿透
骑着蜗牛撵大象32711 小时前
手写一个 HTTP 服务器:从 socket 到 epoll,Linux 上到底怎么把请求变成响应
linux·服务器·网络·http·epoll·socket编程·并发模型
沫璃染墨12 小时前
从零入门计算机网络系列(十):HTTP协议进阶——从资源路径解析到状态码与请求头详解
linux·运维·服务器·网络·c++·http
|_⊙13 小时前
应用层协议HTTP与HTTPS
网络·网络协议·http
zxanz113 小时前
证书运维自动化,守住业务 HTTPS 底线
运维·https·自动化
Lsetea14 小时前
Git访问HTTPS证书不受信任:用URL级sslCAInfo限定私有CA范围
git·https·开发工具·ssl证书·ca证书
Jack N14 小时前
【Strapi 系列之八】二次开发 + 生产部署,Docker + PostgreSQL + Nginx 一把梭
nginx·docker·postgresql·strapi
路由侠内网穿透.15 小时前
本地部署开源 WSGI HTTP 服务器 Gunicorn 并实现外部访问
运维·服务器·网络·网络协议·http·开源
川石课堂软件测试1 天前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
2501_916007471 天前
抓包工具功能对比,TraceEagle、Charles、Fiddler、Wireshark、mitmproxy 差别
前端·网络协议·ios·adb·https·fiddler·wireshark