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

相关推荐
wanhengidc3 小时前
云手机 高振畅玩不踩坑
运维·服务器·安全·web安全·智能手机
有谁看见我的剑了?3 小时前
linux 添加硬盘后系统识别不到硬盘处理
linux·运维·服务器
JoyCong19983 小时前
ToDesk远程屏幕墙技术白皮书:如何重塑全局运维视界
运维·电脑·远程工作
偶尔上线经常挺尸4 小时前
《100个“反常识”经验15:Nginx 502排查:从应用到内核》
运维·nginx·性能调优·反向代理·502错误·http排错
yoyo_zzm4 小时前
Laravel9.x新特性全解析
数据库·mysql·nginx
思茂信息4 小时前
CST软件如何进行参数化扫描?
运维·开发语言·javascript·windows·ecmascript·软件工程·软件需求
计算机安禾5 小时前
【Linux从入门到精通】第31篇:防火墙漫谈——iptables与firewalld防护指南
linux·运维·php
下一页盛夏花开5 小时前
ubuntu 20中安装QT以后出现红色空心断点
linux·运维·ubuntu
yoyo_zzm7 小时前
Laravel8.x新特性全解析
数据库·nginx