最推荐用独立server块中return 301实现www到非www跳转:80端口块处理HTTP请求跳转至http://example.com$request_uri,443端口块配SSL证书跳转至https://example.com$request_uri,主站块仅绑定example.com提供服务。

直接用 return 301 在独立 server 块中实现,不推荐用 rewrite,更安全、高效、无正则开销。
配置两个分离的 server 块
要让 www.example.com 跳转到 example.com(即去 www),必须分开处理 HTTP 和 HTTPS 流量,并各自建立专用跳转块:
- 监听 80 端口的块:捕获所有
www.example.com的 HTTP 请求,301 跳转到http://example.com$request_uri - 监听 443 端口的块:专用于
www.example.com的 HTTPS 请求,同样 301 跳转到https://example.com$request_uri,且需加载有效 SSL 证书 - 主站块只绑定
example.com(不带 www),负责实际服务,不参与跳转逻辑
HTTP 跳转示例(80 端口)
这段配置放在 /etc/nginx/conf.d/redirect.conf 或主配置文件中:
server {
listen 80;
server_name www.example.com;
return 301 http://example.com$request_uri;
}注意:server_name 只写 www.example.com,避免和主站冲突;$request_uri 保留路径与参数,确保用户访问 www.example.com/blog 会跳到 example.com/blog。
HTTPS 跳转示例(443 端口)
这个块必须有合法证书,否则浏览器会报“连接不安全”:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
server {
listen 443 ssl;
server_name www.example.com;
<pre class="brush:php;toolbar:false;">ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
return 301 https://example.com$request_uri;}
证书需覆盖 www.example.com(通配符或 SAN 多域名证书均可)。若证书只签了 example.com,此块将无法启用 HTTPS 跳转。
主站配置(仅响应裸域名)
最终提供服务的块应明确限定为 example.com:
server {
listen 80;
server_name example.com;
# 此处可加 return 301 https://example.com$request_uri 实现 HTTP→HTTPS
}
<p>server {
listen 443 ssl;
server_name example.com;</p><pre class="brush:php;toolbar:false;">ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
root /var/www/html;
index index.html;
# 其他 location、反向代理等业务配置放这里}
确保没有其他 server_name www.example.com 的块遗漏,否则可能被误匹配而绕过跳转。

















