在 location
配置中,proxy_pass
和 root
是完全不同的指令,它们的作用和适用场景不同。
proxy_pass
:代理请求到后端服务器location /api/ {
proxy_pass http://http_backend;
}
http_backend
,即 Nginx 作为反向代理。如果 http_backend
是 http://127.0.0.1:8080
:
http://example.com/api/user
,请求会被转发到 http://127.0.0.1:8080/api/user
。root
:从本地目录读取静态文件location /static/ {
root /usr/share/nginx/webroot;
}
如果 root /usr/share/nginx/webroot;
:
http://example.com/static/logo.png
/usr/share/nginx/webroot/static/logo.png
文件,不会走代理。proxy_pass
vs root
的主要区别对比项 | proxy_pass |
root |
---|---|---|
作用 | 把请求转发到后端服务器 | 直接读取本地文件 |
适用场景 | 代理 API、微服务、后端服务器 | 提供静态资源(HTML、CSS、JS) |
请求路径解析 | 代理时请求路径可能变化 | 直接映射本地路径 |
Nginx 处理方式 | 转发请求,不读取文件 | 直接读取并返回文件 |
示例 | proxy_pass http://backend; |
root /var/www/html; |
proxy_pass
,什么时候用 root
?✅ 使用 proxy_pass
的场景
http://backend/api
。✅ 使用 root
的场景
index.html
、CSS、JS、图片等静态资源。dist/
目录。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 既能做代理,又能提供静态资源!