nginx实现网址规范化统一最稳妥的方式是使用return 301指令:http→https跳转需单独配置监听80端口的server块,用return 301 https://$host$request_uri;裸域名与www跳转需分设server块并明确指定目标域名;多旧域名合并跳转可将所有域名列于同一server_name后;上线前必须执行nginx -t语法检查、nginx -s reload重载,并用curl -i验证301响应及location头。

网址规范化统一,核心是让多个入口(比如带www、不带www、HTTP、HTTPS)最终都指向唯一权威地址。Nginx里用return 301是最稳妥的做法,不依赖正则、不进location匹配、无性能开销,也避免规则冲突。
HTTP → HTTPS 全站跳转
单独配一个监听80端口的server块,强制所有HTTP请求跳到HTTPS:
- server_name设为你的域名(如example.com和www.example.com)
- 用
return 301 https://$host$request_uri;——$host保留原域名,$request_uri完整带上路径和参数 - 别在这个块里写ssl相关指令,否则会报错
裸域名 → www 域名(或反之)
如果主站是www.example.com,那example.com就该跳过去:
- 新增一个server块,只监听80端口,
server_name example.com; return 301 https://www.example.com$request_uri;- 不要用
$host拼接目标,防止IP直连或恶意Host头导致跳转异常
多旧域名合并跳转到一个新域名
比如old1.com、old2.com、www.old1.com都要跳到new-site.com:
- 在一个server块里把它们全列在
server_name后面,空格分隔 return 301 https://new-site.com$request_uri;- Nginx会自动匹配任意一个命中即执行,不用写多份配置
验证与上线前必做事项
配置不是写完就完事,这几步漏一不可:
- 先运行
nginx -t检查语法是否合法 - 再执行
nginx -s reload重载生效 - 用
curl -I http://old-domain.com确认返回头含301 Moved Permanently和正确的Location - 浏览器测试时清缓存——301会被长期记住,临时调试可用302验证逻辑
- 确保新域名的SSL证书已部署好,且443端口防火墙放行











