在 Nginx 配置中,location
和 proxy_pass
是两个不同但常配合使用的指令,它们的核心区别和关系如下:
location
指令nginx
location /api/ {
# 匹配以 /api/ 开头的请求
proxy_pass http://backend;
}
location /path/
:前缀匹配(优先级低于正则)。location ~ \.php$
:正则匹配(区分大小写)。location = /exact
:精确匹配(最高优先级)。proxy_pass
指令location
结合使用,实现动态内容的代理(如转发到 Tomcat、Node.js 等)。nginx
location /app/ {
proxy_pass http://127.0.0.1:8080/; # 注意尾随斜线的影响
}
proxy_pass http://backend/
:会移除 location
匹配的部分(如 /app/foo
→ /foo
)。proxy_pass http://backend
:保留完整路径(如 /app/foo
→ /app/foo
)。特性 | location |
proxy_pass |
---|---|---|
用途 | 定义请求的匹配规则和处理逻辑 | 将请求代理到后端服务器 |
作用阶段 | 请求到达时的 URI 匹配 | 匹配后的请求转发 |
独立性 | 可独立使用(如处理静态文件) | 需依赖 location 或其他上下文 |
配置复杂度 | 支持复杂匹配(正则、优先级) | 主要关注代理目标和请求改写 |
server {
listen 80;
# 静态文件处理
location /static/ {
root /var/www/html;
}
# 动态请求代理到后端
location /api/ {
proxy_pass http://backend_server;
proxy_set_header Host $host;
}
# 精确匹配首页
location = / {
proxy_pass http://frontend_server;
}
}
路径改写
proxy_pass
包含路径(如 http://backend/new/
),Nginx 会将 location
匹配的部分替换为 /new/
。正则匹配冲突
location
时,按配置文件中的顺序优先匹配(除非使用 ^~
或 =
明确优先级)。代理头信息
proxy_set_header
传递原始请求头(如 Host
、X-Real-IP
)。location
是路由匹配的“条件”,proxy_pass
是匹配后的“动作”。location
还可用于其他场景(如静态文件、重定向)。