Skip to content

Nginx 配置对比与改进说明

📊 配置文件对比

旧配置(问题版本)

1. default.conf

nginx
server {
    listen 80;
    location / {
        root /usr/share/nginx/html;
        index index.html;
    }
}

问题:

  • ❌ 仅提供基础配置
  • ❌ 没有 Gzip 压缩
  • ❌ 没有缓存策略
  • ❌ 与其他配置冲突

2. ruoyi-office-doc.conf

nginx
server {
    listen 80 default_server;
    server_name _;
    root /usr/share/nginx/html/ruoyi-office-doc;
    # ...
}

问题:

  • ❌ 设置了 default_server,占用根路径
  • ❌ 无法与其他项目共存

3. web-antd.conf

nginx
location /web {
    alias /usr/share/nginx/html/web;
    # ...
}

问题:

  • 语法错误location 必须在 server 块内
  • ❌ 导致 Nginx 无法启动

新配置(统一版本)

ruoyi-office.conf

nginx
server {
    listen 80 default_server;
    server_name 127.0.0.1 _;

    # 文档站点(根路径)
    location / {
        root /usr/share/nginx/html/ruoyi-office-doc;
        # ...
    }

    # 管理后台(子路径)
    location /web {
        alias /usr/share/nginx/html/web;
        # ...
    }
}

优势:

  • ✅ 统一管理所有项目
  • ✅ 配置语法正确
  • ✅ 包含完整的性能优化
  • ✅ 易于维护和扩展

🔄 主要改进

1. 配置结构优化

项目旧配置新配置
配置文件数量3个独立文件1个统一文件
server 块数量2个(冲突)1个(统一)
配置行数~200行~130行
维护难度⭐⭐⭐⭐⭐⭐

2. 功能完善

新增功能

功能旧配置新配置
Gzip 压缩部分支持✅ 完整支持
静态资源缓存部分支持✅ 30天缓存
隐藏文件保护
健康检查接口
SPA 路由支持
日志配置分散✅ 统一
错误页面部分✅ 完整

性能优化对比

nginx
# 旧配置 - Gzip 配置分散
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript ...;

# 新配置 - 统一配置
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_comp_level 6;  # 新增:压缩级别
gzip_types text/plain text/css text/xml text/javascript
           application/json application/javascript application/xml+rss
           application/x-javascript image/svg+xml;  # 新增:SVG支持

3. 路径映射优化

旧配置路径映射

❌ 冲突的配置:
/                 → ruoyi-office-doc (default_server)
/                 → default.conf (被覆盖)
/web              → 语法错误,无法使用

新配置路径映射

✅ 清晰的配置:
/                 → VitePress 文档站点
/web              → Vben Admin 管理后台
/health           → 健康检查接口

4. 静态资源缓存优化

旧配置

nginx
# ruoyi-office-doc.conf
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
    access_log off;
}

# web-antd.conf - 语法错误,无法使用
location ~* ^/web/.*\.(...)$ {
    # ...
}

问题:

  • /web 路径的缓存配置无法生效(语法错误)
  • ❌ 配置分散,难以维护

新配置

nginx
# 文档站点静态资源
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot|map)$ {
    root /usr/share/nginx/html/ruoyi-office-doc;
    expires 30d;
    add_header Cache-Control "public, immutable";
    access_log off;
}

# 管理后台静态资源
location ~* ^/web/.*\.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot|map)$ {
    alias /usr/share/nginx/html/web;
    expires 30d;
    add_header Cache-Control "public, immutable";
    access_log off;
}

优势:

  • ✅ 所有路径的缓存配置都正确生效
  • ✅ 统一的缓存策略
  • ✅ 新增 .map 文件支持

📈 性能对比

加载时间对比(预估)

项目旧配置新配置改进
首次加载~2.5s~1.8s⬇️ 28%
二次加载~1.2s~0.3s⬇️ 75%
静态资源无缓存30天缓存⬇️ 90%

带宽节省(预估)

类型旧配置新配置节省
HTML100%~30%⬇️ 70%
JS/CSS100%~25%⬇️ 75%
图片100%~20%⬇️ 80%

: 节省来自 Gzip 压缩和缓存策略

🔧 配置语法对比

问题:location 指令位置错误

❌ 错误示例(web-antd.conf)

nginx
# 文件开头直接写 location(错误!)
location /web {
    alias /usr/share/nginx/html/web;
    # ...
}

错误信息:

nginx: [emerg] "location" directive is not allowed here
in /etc/nginx/conf.d/web-antd.conf:4

✅ 正确示例(ruoyi-office.conf)

nginx
# location 必须在 server 块内
server {
    listen 80;
    server_name 127.0.0.1;

    location /web {
        alias /usr/share/nginx/html/web;
        # ...
    }
}

问题:root vs alias 使用

❌ 不当使用

nginx
# 使用 root 处理子路径(不推荐)
location /web {
    root /usr/share/nginx/html;  # 实际路径: /usr/share/nginx/html/web/web
    # ...
}

✅ 正确使用

nginx
# 根路径使用 root
location / {
    root /usr/share/nginx/html/ruoyi-office-doc;
    # ...
}

# 子路径使用 alias
location /web {
    alias /usr/share/nginx/html/web;  # 正确去掉 /web 前缀
    # ...
}

🎯 迁移建议

迁移步骤

  1. 备份现有配置

    bash
    ssh root@127.0.0.1 'cp -r /data/nginx/conf/conf.d /data/nginx/conf/conf.d.backup'
  2. 上传新配置

    bash
    scp ruoyi-office.conf root@127.0.0.1:/data/nginx/conf/conf.d/
  3. 删除旧配置

    bash
    ssh root@127.0.0.1 'cd /data/nginx/conf/conf.d && rm -f default.conf ruoyi-office-doc.conf web-antd.conf'
  4. 验证配置

    bash
    ssh root@127.0.0.1 'docker exec nginx nginx -t'
  5. 重新加载

    bash
    ssh root@127.0.0.1 'docker exec nginx nginx -s reload'

迁移前后对比

检查项迁移前迁移后
配置文件数3个1个
配置语法❌ 有错误✅ 正确
文档站点✅ 可访问✅ 可访问
管理后台❌ 无法访问✅ 可访问
性能优化⚠️ 部分✅ 完整

📝 总结

主要改进点

  1. ✅ 修复语法错误: 解决了 web-antd.conflocation 指令位置错误
  2. ✅ 统一配置管理: 3个文件合并为1个,降低维护成本
  3. ✅ 完善性能优化: 添加完整的 Gzip 压缩和缓存策略
  4. ✅ 清晰的路径映射: 明确的根路径和子路径划分
  5. ✅ 健康检查接口: 新增 /health 接口用于监控

兼容性保证

  • ✅ VitePress 文档站点路径不变:http://127.0.0.1/
  • ✅ Vben Admin 访问路径不变:http://127.0.0.1/web
  • ✅ 现有功能完全兼容
  • ✅ 新增功能无副作用

未来扩展

新配置便于添加更多项目:

nginx
# 添加新项目只需要增加 location 块
location /new-project {
    alias /usr/share/nginx/html/new-project;
    index index.html;
    try_files $uri $uri/ /new-project/index.html;
}

建议

  • 🟢 立即迁移: 解决当前 Vben Admin 无法访问的问题
  • 🟢 使用自动化脚本: deploy-nginx-config.sh 一键部署
  • 🟢 做好备份: 迁移前备份现有配置
  • 🟢 验证测试: 迁移后充分测试各项功能
联系我们

获取报价、演示和二开方案

微信咨询二维码

微信咨询

17156169080

添加时备注「RuoYi Office」

在线体验商业版