Nginx功能篇10—重定向

概述

本章,您将学习到 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 中有大量的变量可供系统管理员使用,同名的变量由不同的模块提供,所有的变量说明可参阅 官方文档

Avatar photo

关于 陸風睿

GNU/Linux 从业者、开源爱好者、技术钻研者,撰写文档既是兴趣也是工作内容之一。Q - "281957576";WeChat - "jiulongxiaotianci",Github - https://github.com/jimcat8
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇