概述
本章,您将学习到 Nginx 中重定向的内容。
重定向:也称域名跳转,指当用户通过浏览器访问 A 站点时自动跳转到 B 站点。出现重定向的原因有很多,如:
- 正常情况
- 旧域名需要迁移到新域名
- SEO 优化
- 域名注册商提供的域名转发功能
- Web 服务器设置了域名跳转
- CDN 厂商配置了跳转规则
- 域名到期后被交易平台抢注
- 非正常情况
- DNS 污染
- ISP 或 运营商劫持
- 浏览器有劫持插件
从 HTTP 响应状态码来看,重定向主要有两个:
- 301 - 请求资源的 URL 已永久更改。在响应中给出了新的 URL。
- 302 - 请求资源的 URI 已被暂时更改。未来可能会对这个 URI 做进一步的变更。
强制从 80 端口跳转到 443 端口
假设您 Nginx 主配置的内容形如这样:
...
http {
...
server {
listen 192.168.100.20:80;
server_name www.my-tests.com;
}
server {
listen 192.168.100.20:443 ssl http2 backlog=8000 reuseport;
server_name www.my-tests.com;
location / {
...
}
...
}
}
您可以在此处配置重定向:
...
http {
...
server {
listen 192.168.100.20:80;
server_name www.my-tests.com;
return 301 https://www.my-tests.com$request_uri;
}
server {
listen 192.168.100.20:443 ssl http2 backlog=8000 reuseport;
server_name www.my-tests.com;
...
location / {
...
}
...
}
}
在一些文档或资料中,可能还会见到其他的写法形式:
| 形式 | 评价 |
|---|---|
rewrite ^/(.*)$ https://www.my-tests.com$1 permanent; |
bad |
rewrite ^ https://www.my-tests.com$request_uri? permanent; |
good |
return 301 https://www.my-tests.com$request_uri; |
better |
小提示
您不需要在 80 端口的那个 server 上下文中再书写其他的 location 上下文。
在生产环境中,不建议将
在生产环境中,不建议将
return 301 https://www.my-tests.com$request_uri; 中的 "www.my-tests.com" 用变量替换,如 $host,这会存在开放重定向漏洞(Open Redirect)的风险。旧 Web 站点跳转到新 Web 站点
在旧 Web 站点的 Nginx 中直接配置即可:
...
http {
...
server {
listen 192.168.100.20:80;
server_name www.my-tests.com;
return 301 https://www.my-tests.com$request_uri;
}
server {
listen 192.168.100.20:443 ssl http2 backlog=8000 reuseport;
server_name www.my-tests.com;
...
location / {
...
}
...
return 301 https://www.new-tests.com$request_uri;
}
}
若新站点的 uri 与旧站点的 uri 并不是一一对应的关系,也可以将重定向固定,如 return 301 https://www.new-tests.com;
扩展说明
在 nginx.conf 中有大量的变量可供系统管理员使用,同名的变量由不同的模块提供,所有的变量说明可参阅 官方文档。
版权声明:「自由转载-保持署名-非商业性使用-禁止演绎 3.0 国际」(CC BY-NC-ND 3.0)
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论










