nginx自动跳转到www的方法

此博客详细解释了如何使用Nginx配置,确保当非www子域名访问时,将HTTP请求永久重定向到HTTPS。通过两个server块实现不同端口的规则,适用于www和非www域名。
server {
  listen 80;
  server_name www.xxx.com xxx.com;
  if ($host != 'www.xxx.com') {
  rewrite ^/(.*)$ http://www.xxx.com/$1 permanent;
  }
}
server {
  listen 443;
  server_name www.xxx.com xxx.com;
  if ($host != 'www.xxx.com') {
  rewrite ^/(.*)$ https://www.xxx.com/$1 permanent;
  }
}

然后重启一下nginx即可。

<think> 我们正在讨论如何配置Nginx实现HTTP自动跳转到HTTPS。根据引用内容,主要有两种常见方法:使用return指令或rewrite指令。 方法一:使用return指令(推荐) 在监听80端口的server块中,添加return 301重定向到HTTPS。 示例配置: server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; # 永久重定向到HTTPS } 方法二:使用rewrite指令 同样在80端口的server块中,使用rewrite规则进行重定向。 示例配置: server { listen 80; server_name example.com; rewrite ^(.*)$ https://$host$1 permanent; # 永久重定向 } 两种方法的区别: - return指令更高效,直接返回状态码和重定向地址,推荐使用。 - rewrite指令通过正则匹配,灵活性高,但性能略低于return。 注意事项: - 确保HTTPS的server块已正确配置SSL证书。 - 如果使用IP访问,则$server_name可能不适用,可以使用$host(引用[3]提到无域名时的情况)。 引用说明: [^1]: 引用[1]中直接使用return 301方式,这是Nginx新版本的推荐写法。 [^2]: 引用[2]中使用了rewrite指令实现跳转。 [^3]: 引用[3]提供了有域名和无域名两种情况下的配置思路。 [^4]: 引用[4]同样使用了rewrite指令。 下面提供一个完整的配置示例(使用return方式): server { listen 80; server_name changzhang.sjzgjlg.com.cn; return 301 https://$server_name$request_uri; # 跳转到HTTPS } 此时,当用户访问http://changzhang.sjzgjlg.com.cn时,会自动跳转到https://changzhang.sjzgjlg.com.cn。 生成的相关问题: 1. 如何为Nginx配置SSL证书? 2. Nginx中rewrite指令的用法有哪些? 3. 如何配置Nginx同时支持HTTP和HTTPS? </think> ### 🔄 Nginx 配置 HTTP 自动跳转 HTTPS 的完整指南 #### ✅ 方法一:使用 `return 301` 指令(**推荐**) ```nginx server { listen 80; # 监听 HTTP 80 端口 server_name example.com www.example.com; # 配置域名 # 核心跳转指令 ↓ return 301 https://$server_name$request_uri; # 永久重定向到 HTTPS [^1] # 可选:添加日志记录 access_log /var/log/nginx/http_redirect.log; } ``` **原理**: - `$server_name`:自动替换为当前域名 - `$request_uri`:保留原始请求路径(如 /user/profile) - `301`:永久重定向状态码(SEO 友好) --- #### ✅ 方法二:使用 `rewrite` 指令 ```nginx server { listen 80; server_name example.com; # 正则匹配所有请求 ↓ rewrite ^(.*)$ https://$host$1 permanent; # 跳转到 HTTPS [^2][^4] } ``` **参数说明**: - `$host`:客户端请求的原始域名 - `$1`:正则捕获的请求路径 - `permanent`:等效于 301 重定向 --- #### 🌐 无域名场景的特殊配置(IP 访问) ```nginx server { listen 80; server_name _; # 匹配所有域名 # 跳转到 HTTPS + 保留原始 IP ↓ return 301 https://$http_host$request_uri; # $http_host 含端口号 [^3] } ``` --- ### ️ 关键注意事项 1. **HTTPS 服务配置** 必须存在有效的 HTTPS server 块并配置 SSL 证书: ```nginx server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; ... # 其他配置 } ``` 2. **测试跳转效果** 使用 curl 验证: ```bash curl -I http://example.com # 应返回 "HTTP/1.1 301 Moved Permanently" ``` 3. **清除浏览器缓存** 301 重定向会被浏览器永久缓存,测试时需用隐身模式或清除缓存 --- > **最佳实践**:优先使用 `return 301` 方案,效率更高且避免正则解析开销。配置后执行 `nginx -t` 检测语法,再 `systemctl reload nginx` 平滑重启 [^1]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值