nginx静态资源

静态资源服务器 - 80 端口

server {

listen 80;

server_name localhost;

charset utf-8;

charset_types text/css application/javascript text/plain text/xml application/json;

项目部署根目录

root /Users/yupi/Code/yu-ai-code-mother/tmp/code_deploy;

复制代码
# 处理所有请求
location ~ ^/([^/]+)/(.*)$ {
    try_files /$1/$2 /$1/index.html =404;
}

}

解释一下这段代码

你想要我解释这段 Nginx 配置代码的含义,它本质上是一个监听 80 端口、支持多项目的静态资源服务器配置,尤其适配前端单页应用(SPA)的路由规则,我会逐行拆解并说明核心逻辑。

一、代码整体功能总结

这段配置定义了一个 Nginx 的server(虚拟主机),作用是:

  1. 监听本地 80 端口,提供静态资源访问服务;
  2. /Users/yupi/Code/yu-ai-code-mother/tmp/code_deploy为根目录托管静态文件;
  3. 支持 "多项目" 目录结构(每个子目录对应一个前端项目),并适配前端 SPA 的 history 路由模式(非真实文件路径自动指向项目的index.html);
  4. 确保各类静态文件(CSS/JS/JSON 等)的 UTF-8 编码,避免乱码。

二、逐行详细解释

nginx

复制代码
# 静态资源服务器 - 80 端口
server {
    # 1. 监听80端口(HTTP协议默认端口)
    listen       80;
    # 2. 匹配的访问域名/主机名:仅响应localhost(本地访问)的请求
    server_name  localhost;
    # 3. 设置全局响应的默认字符编码为UTF-8,解决中文乱码基础问题
    charset      utf-8;
    # 4. 明确指定哪些MIME类型的文件使用UTF-8编码(覆盖Nginx默认值)
    # 确保CSS/JS/文本/XML/JSON这类文件返回时编码正确
    charset_types text/css application/javascript text/plain text/xml application/json;
    # 5. 静态资源的根目录:所有文件请求都会基于这个路径查找
    root         /Users/yupi/Code/yu-ai-code-mother/tmp/code_deploy;
    
    # 6. 核心:匹配URL路径的规则(正则匹配)
    # ~ 表示区分大小写的正则匹配;^/([^/]+)/(.*)$ 是正则表达式,拆解如下:
    # ^/        :URL以 / 开头
    # ([^/]+)   :第一个捕获组($1),匹配"/"后、下一个"/"前的所有非/字符(比如项目名)
    # /         :匹配第二个 /
    # (.*)      :第二个捕获组($2),匹配剩下的所有字符(比如文件路径/路由路径)
    # 示例:请求 /project1/page/index.html → $1=project1,$2=page/index.html
    # 示例:请求 /admin/dashboard → $1=admin,$2=dashboard
    location ~ ^/([^/]+)/(.*)$ {
        # 7. try_files:按顺序检查文件/目录是否存在,核心逻辑是"适配前端SPA路由"
        # 第一步:检查 根目录/$1/$2 是否存在(比如 /project1/page/index.html)
        # 第二步:如果不存在,尝试访问 根目录/$1/index.html(项目的入口文件)
        # 第三步:如果都不存在,返回404错误
        try_files /$1/$2 /$1/index.html =404;
    }
}

三、实际请求示例(帮你理解执行逻辑)

假设你的root目录结构如下:

plaintext

复制代码
/code_deploy/
├─ project1/          # 项目1目录
│  ├─ index.html      # 项目1的SPA入口
│  └─ static/
│     └─ app.js
└─ admin/             # 管理后台项目
   └─ index.html      # 管理后台SPA入口
  1. 请求真实静态文件http://localhost/project1/static/app.js

    • 正则捕获:1=project1,2=static/app.js
    • try_files 检查:/project1/static/app.js 存在 → 直接返回该文件。
  2. 请求前端路由路径(非真实文件)http://localhost/admin/dashboard

    • 正则捕获:1=admin,2=dashboard
    • try_files 检查:/admin/dashboard 不存在 → 尝试访问 /admin/index.html(存在)→ 返回该文件,由前端路由处理/dashboard路径。
  3. 请求不存在的项目 / 文件http://localhost/test/123

    • 正则捕获:1=test,2=123
    • try_files 检查:/test/123 不存在 → 尝试/test/index.html 也不存在 → 返回 404 错误。

总结

  1. 核心作用:搭建 80 端口的静态资源服务器,支持多项目托管,适配前端 SPA 的 history 路由模式;
  2. 关键指令root指定资源根目录,location正则匹配多项目路径,try_files实现 "文件优先、路由回退到 index.html";
  3. 编码保障charsetcharset_types确保各类静态文件 UTF-8 编码,避免乱码。

如果你的前端项目(Vue/React)部署后刷新页面 404,这个配置就是典型的解决方案,核心是try_files把非文件请求转发到index.html

相关推荐
~黄夫人~1 小时前
Linux 权限管理:用户组 + 特殊权限 + ACL 解析
linux·运维·计算机·学习笔记·权限管理
2501_907136821 小时前
手搓仓库管理系统Senbar-1.0.4(附带财务管理板块)
运维·服务器·软件需求
盟接之桥3 小时前
盟接之桥EDI软件:API数据采集模块深度解析,打造企业数据协同新引擎
java·运维·服务器·网络·数据库·人工智能·制造
时空潮汐3 小时前
神卓N600 NAS身份核验功能深度解析
linux·运维·网络·神卓nas·神卓n600 pro·家庭轻nas
小李独爱秋3 小时前
模拟面试:用自己的话解释一下lvs的工作原理
linux·运维·面试·职场和发展·操作系统·lvs
百锦再4 小时前
Jenkins 全面精通指南:从入门到脚本大师
运维·后端·python·servlet·django·flask·jenkins
隔壁老王的代码4 小时前
Jenkins的流水线详解
运维·servlet·jenkins
珹洺4 小时前
Java-servlet(五)手把手教你利用Servlet配置HTML请求与相应
java·运维·服务器·前端·servlet·html·maven
一路往蓝-Anbo4 小时前
第 8 章:M33 领航——引导 A35 加载 U-Boot 与 Linux 内核
linux·运维·服务器·stm32·单片机·嵌入式硬件·网络协议
何中应5 小时前
从零搭建JumpServer
运维·堡垒机·jumpserver