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

相关推荐
老百姓懂点AI2 小时前
[测试工程] 告别“玄学”评测:智能体来了(西南总部)基于AI agent指挥官的自动化Eval框架与AI调度官的回归测试
运维·人工智能·自动化
德育处主任Pro2 小时前
『NAS』用SSH的方式连上NAS
运维·ssh
Meaauf2 小时前
VMware安装中科方德服务器操作系统
运维·服务器·中科方德
南宫码农2 小时前
神马影视8.5版本如意伪静态+视频教程
linux·运维·centos
j_xxx404_3 小时前
Linux:命令行参数与环境变量
linux·运维·服务器
j_xxx404_3 小时前
Linux:进程虚拟地址空间|虚拟内存管理
linux·运维·服务器
江畔何人初3 小时前
pod的定义以及创建过程
linux·运维·云原生
末日汐3 小时前
linux线程
linux·运维
玉梅小洋4 小时前
CentOS :yum源配置及验证指南
linux·运维·centos·yum