转发和重写
# 转发
将用户的请求代理到另一个服务器或服务上进行处理,然后将结果返回给用户,通常用于反向代理或负载均衡
主要属性:
- proxy_pass:将请求转发到后端服务器
- upstream:定义后端服务器池(用于负载均衡)
这两种方式在 3.常用场景 已经介绍了
# 重写
修改用户请求的 URI 或 URL,而不改变服务器的响应地址
主要属性:
- rewrite:重写请求 URI,不会暴露实际资源路径
- return:直接返回重写后的地址或状态码
- try_files:优雅地尝试多个文件路径或重写后的路径
例子:
# 简单重写路径
location /old-path/ {
rewrite ^/old-path/(.*)$ /new-path/$1 permanent;
}
# 将 /old-path/anything 重写为 /new-path/anything
# permanent 表示返回 301 状态码,告诉浏览器这是永久的地址变更
# 去掉 URL 中的文件扩展名
rewrite ^/(.*)\.html$ /$1 break;
# 请求 /about.html 会重写为 /about
# 尝试多个文件路径
location / {
try_files $uri $uri/ /index.html;
}
# 依次尝试:
# 文件路径 $uri(如 /about.html)。
# 目录路径 $uri/(如 /about/)。
# 如果都不存在,重写为 /index.html
# 重写路径后转发到后端
location /api/v1/ {
rewrite ^/api/v1/(.*)$ /v2/$1 break;
proxy_pass http://backend_server;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
特性 | 转发 | 重写 |
---|---|---|
作用范围 | 转发请求到另一个服务器或服务 | 修改请求的 URI 路径 |
指令 | proxy_pass、upstream | rewrite、try_files、return |
最终目的 | 后端处理请求并返回响应 | 可能修改 URI 后仍由 Nginx 本地处理 |
使用场景 | 后端服务分发、负载均衡、反向代理 | URL 优化、旧路径迁移、文件路径映射 |
影响的层面 | 改变请求发送的目标地址 | 改变请求路径,通常在同一服务器内解析 |