return
return 是 Nginx 的直接响应指令 ,用于立即结束当前请求并返回指定的状态码或重定向 。
return code [text];
return code URL;
return URL;-
code:HTTP 状态码,如 200、301、302、404、500。 -
URL:目标地址,返回 3xx 时表示重定向。 -
text:返回纯文本。
💥 注意事项: 重定向需要修改 URL,因为这不是内部转发(proxy_pass 就是内部转发),所以跳转到其它 URL 的时候需要写完整的 IP。
server {
listen 8003;
server_name ruoyi.loadbalance;
return 301 https://localhost:8004; # ❌
}
server {
listen 8003;
server_name ruoyi.loadbalance;
return 301 https://192.168.56.105:8004; # ✅
}rewrite
rewrite 既可以重定向 ,也可以内部转发 ,取决于它后面有没有加参数。
rewrite regex replacement [flag];-
regex :匹配 URI 的正则表达式。
-
replacement :重写后的新 URI 或 URL。
-
flag :控制行为的标志位。
| 标志 | 行为类型 | 是否重定向 | 说明 |
|---|---|---|---|
| last | 内部转发 | 否 | 如果当前规则匹配,停止处理后续rewrite规则,使用重写后的路径,重新搜索location及其块内指令 |
| break | 内部转发 | 否 | 如果当前规则匹配,停止处理后续rewrite规则,执行当前{}块内其他指令 |
| redirect | 外部重定向 | 是(302) | 告诉浏览器跳转,URL 会变 |
| permanent | 外部重定向 | 是(301) | 永久重定向,浏览器会缓存跳转规则 |
内部转发 vs 外部重定向
-
内部转发(不变 URL)
location /user/ { rewrite ^/user/(.*)$ /profile/$1 last; }→ 用户访问
/user/123→ Nginx 内部改写为/profile/123,但浏览器地址栏不变 。 属于 转发 。
-
外部重定向(变 URL)
location /old/ { rewrite ^/old/(.*)$ /new/$1 permanent; }→ 用户访问
/old/test→ 浏览器被告知跳转到/new/test,地址栏变更 。 属于 重定向 。
