当前位置: 首页 > news >正文

nginx中proxy_pass和root的区别

location 配置中,proxy_passroot完全不同的指令,它们的作用和适用场景不同。


1. proxy_pass:代理请求到后端服务器

location /api/ {
    proxy_pass http://http_backend;
}

作用

  • 把请求转发到后端服务器 http_backend,即 Nginx 作为反向代理
  • 适用于Nginx 作为 API 网关或负载均衡的情况。

示例

如果 http_backendhttp://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_passroot
作用把请求转发到后端服务器直接读取本地文件
适用场景代理 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_passroot,可以让 Nginx 既能做代理,又能提供静态资源! 🚀

http://www.dtcms.com/a/67118.html

相关文章:

  • Flask
  • 抖音生活服务联动监管开展专项整治 济南66家违规餐饮商家下架
  • XSS跨站脚本攻击
  • ESP32芯片模组方案,设备物联网无线通信,WiFi蓝牙交互控制应用
  • Java中main函数中public static void main2(String[] args) 的String[] args是什么意思?
  • 用SpringBoot做一个web小案例实现登录
  • 宇树ROS1开源模型在ROS2中Gazebo中仿真
  • HCIE考试经验分享:我的华为云服务HCIE认证奋斗史
  • Java 大视界 -- Java 大数据在智慧文旅虚拟导游与个性化推荐中的应用(130)
  • 【PyMySQL】Python操作MySQL
  • Html5记忆翻牌游戏开发经验分享
  • 通过deepseek学习lua写网页
  • SQLark 实战 | 如何从Excel、csv、txt等外部文件进行数据导入
  • doris:SQL 方言兼容
  • 蓝桥杯2024年第十五届省赛真题-团建
  • Modbus RTU协议详解:基于 STM32 与脉冲电源的通信项目实例
  • vscode关闭仓库后如何打开
  • Adobe Genuine Service Alert 一直弹窗,老是一直弹窗【解决方法】
  • 微信小程序:实现多功能表格效果,例如滚动效果、宽度自定义、多选、行内编辑等功能
  • PostgreSQL16 的双向逻辑复制
  • Android实现简易计算器
  • Go执行当前package下的所有方法
  • 侯捷C++课程学习笔记:详解智能指针(三)
  • Feign中@RequestBody 与 @RequestParam 的区别
  • Vue3:组件通信方式
  • 暴力破解Excel受保护的单元格密码
  • 大数据学习(59)-DataX执行机制
  • 云原生性能测试全解析:如何构建高效稳定的现代应用?
  • 【数据结构】-哈夫曼树以及其应用
  • 基于ESP32的桌面小屏幕实战[8]:任务创建