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

前端配置nginx代理

一、定义静态文件的路径的两种方式

1. root 指令

(1)作用
  • 指定文件系统的 基础路径location 的 URI 会 追加到该路径后 形成完整路径。

(2)语法
location /uri/ {root /path/to/files;
}
(3)路径解析规则
  • 最终路径 = root + location URI
    例如:

    location /static/ {root /var/www/html;
    }
    • 请求 /static/logo.png → 服务器文件路径:/var/www/html/static/logo.png

(4)特点
  • 适用于 location 的 URI 需要作为子目录 的情况。

  • 默认会 自动拼接 location 和 root

(5)示例
server {listen 80;server_name example.com;location /images/ {root /data/website;  # 访问 /images/cat.jpg → /data/website/images/cat.jpg}
}

2. alias 指令

(1)作用
  • 指定文件系统的 精确路径location 的 URI 会 被替换为该路径

(2)语法
location /uri/ {alias /path/to/files/;
}
(3)路径解析规则
  • 最终路径 = alias + (URI 去除 location 前缀)
    例如:

    location /assets/ {alias /var/www/static/;
    }
    • 请求 /assets/js/app.js → 服务器文件路径:/var/www/static/js/app.js

(4)特点
  • 适用于 location 的 URI 需要映射到不同目录 的情况。

  • 必须以 / 结尾(否则可能拼接异常)。

  • 不会自动拼接 location 路径,而是直接替换。

(5)示例
server {listen 80;server_name example.com;location /static/ {alias /data/shared/;  # 访问 /static/logo.png → /data/shared/logo.png}
}

二、核心区别对比

特性rootalias
路径拼接方式root + location替换 location 为 alias
结尾斜杠 /可省略必须包含(如 /data/
适用场景URI 是文件子目录(如 /img/URI 需要映射到其他目录
性能影响无差异无差异

三、常见问题与注意事项

1. 结尾斜杠问题

  • alias 必须明确以 / 结尾,否则路径解析会出错:

    # 错误示例(缺少 /)
    location /static {alias /data/static;  # 请求 /static/file → 可能解析为 /data/staticfile
    }# 正确示例
    location /static/ {alias /data/static/;  # 请求 /static/file → /data/static/file
    }

2. 正则匹配 location

  • 如果 location 使用正则表达式(如 ~* \.(jpg|png)$),必须用 alias,因为 root 不支持正则替换。

3. 安全性

  • 避免将 alias 指向敏感目录(如 /etc/),否则可能引发安全问题。


四、示例场景

场景 1:普通静态资源
# 使用 root(URI 是子目录)
location /uploads/ {root /var/www/site;  # 文件路径:/var/www/site/uploads/file.txt
}# 使用 alias(URI 需要重映射)
location /docs/ {alias /mnt/shared/documents/;  # 文件路径:/mnt/shared/documents/file.txt
}
场景 2:单页应用(SPA)
location / {root /var/www/app/dist;try_files $uri $uri/ /index.html;  # Vue/React 路由支持
}

五、完整案例


worker_processes 1;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 600;client_header_timeout 600;client_body_timeout 600;#上传文件的大小限制  默认1mclient_max_body_size 10m;underscores_in_headers on;server {# 访问端口listen 8080;server_name localhost;location / {root D:/Users/22972/work/nginx-1.23.3/web/dist/;index index.html index.htm;}location ^~/api/auth/ {proxy_pass http://192.168.0.125:8081/auth/;}# 后端线上服务代理location /api/system/ {proxy_pass http://192.168.0.125/api/system/;}# 前端子应用代理location /system-ui/ {proxy_pass http://localhost:8001/system-ui/;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}

相关文章:

  • 原生js实现数据响应方法2.0
  • 深度学习入门(十三):加深网络
  • Linux Docker 安装oracle19c数据库教程
  • 【算法提升】牛牛冲钻五 最长无重复子数组 重排字符串 one_day
  • 热点数据的统计到应用
  • 【Sqoop基础】Sqoop定位:关系型数据库与Hadoop生态间的高效数据桥梁
  • RabbitMQ 集群与高可用方案设计(三)
  • 如何用AI设计LOGO,DeepSeek+豆包免费批量生成
  • 【图论 并集查找】P3671 [USACO17OPEN] Where‘s Bessie? S|普及+
  • CodeGeeX - AI编程助手
  • Java Swing 自定义JOptionPane
  • 【文本分类】KG-HTC 知识图谱提升分类准确率
  • 有铜半孔工艺的制造难点与工艺优化
  • 2025年绿色材料与制造技术国际学术会议(GMMT 2025)
  • 易境通WMS系统:赋能快消品海外仓高效管理
  • 《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》第三次印刷
  • leetcode617.合并二叉树:迭代法中层序遍历与队列操作的深度解析
  • 7.安卓逆向2-frida hook技术-介绍
  • Real2Render2Real:无需动力学仿真或机器人硬件即可扩展机器人数据
  • gin使用Mysql连接池用法
  • 上海周边网站建设/免费企业网站管理系统
  • 厦门门户网站建设/昆山网站建设公司
  • 温州网站建设有限公司/网络销售推广公司
  • 专业仿站网站建设/惠州seo关键词推广
  • 网站备案密码怎么找回/上海seo推广平台
  • 超炫酷的网站/今日头条荆州新闻