在 location 配置中,proxy_pass 和 root 是完全不同的指令,它们的作用和适用场景不同。
1. proxy_pass:代理请求到后端服务器
 
location /api/ {proxy_pass http://http_backend;
}
作用
- 把请求转发到后端服务器 http_backend,即 Nginx 作为反向代理。
- 适用于Nginx 作为 API 网关或负载均衡的情况。
示例
如果 http_backend 是 http://127.0.0.1:8080:
- 访问 http://example.com/api/user,请求会被转发到http://127.0.0.1:8080/api/user。
- Nginx 不处理文件,直接把请求转发给后端服务器。
2. root:从本地目录读取静态文件
 
location /static/ {root /usr/share/nginx/webroot;
}
作用
- Nginx 直接从服务器本地读取静态资源(HTML、CSS、JS、图片等)。
- 适用于网站静态资源托管。
示例
如果 root /usr/share/nginx/webroot;:
- 访问 http://example.com/static/logo.png
- Nginx 直接返回 /usr/share/nginx/webroot/static/logo.png文件,不会走代理。
3. proxy_pass vs root 的主要区别
 
| 对比项 | proxy_pass | root | 
|---|---|---|
| 作用 | 把请求转发到后端服务器 | 直接读取本地文件 | 
| 适用场景 | 代理 API、微服务、后端服务器 | 提供静态资源(HTML、CSS、JS) | 
| 请求路径解析 | 代理时请求路径可能变化 | 直接映射本地路径 | 
| Nginx 处理方式 | 转发请求,不读取文件 | 直接读取并返回文件 | 
| 示例 | proxy_pass http://backend; | root /var/www/html; | 
4. 什么时候用 proxy_pass,什么时候用 root?
 
✅ 使用 proxy_pass 的场景
- 反向代理 API,如 http://backend/api。
- Nginx 作为网关,将请求转发给 Spring Boot、Node.js、Django 等后端服务。
✅ 使用 root 的场景
- 提供前端 index.html、CSS、JS、图片等静态资源。
- 部署 Vue、React、Angular 前端应用时,Nginx 直接托管 dist/目录。
5. 示例:静态资源 + API 代理
server {listen 80;# 代理 API 请求location /api/ {proxy_pass http://backend_server;}# 提供静态资源location / {root /usr/share/nginx/webroot;index index.html;}
}
- 访问 /api/users-> 转发给backend_server(后端处理)。
- 访问 /index.html-> 直接从webroot目录读取index.html。
总结
- proxy_pass:用于 反向代理,Nginx 不处理文件,直接转发请求给后端服务器。
- root:用于 静态资源托管,Nginx 直接读取本地文件并返回。
- 可以混合使用,proxy_pass处理 API,root处理静态资源。
🚀 合理使用 proxy_pass 和 root,可以让 Nginx 既能做代理,又能提供静态资源! 🚀
