Nginx 配置指南

目录

    架构说明

    MDMS 的前台和后台是分离的:前台是纯静态文件(由 Nginx 直接提供),后台是 Go HTTP 服务(通过 Nginx 反向代理)。

    用户浏览器
        ↓
    Nginx (80/443)
        ├── /admin/*   → 反代到 Go 后台(127.0.0.1:9527)
        ├── /api/*     → 反代到 Go 后台(127.0.0.1:9527)
        ├── /static/*  → 反代到 Go 后台(127.0.0.1:9527)
        └── 其他路径    → 静态文件(/www/wwwroot/你的域名/)
    

    基本配置(HTTP)

    最简配置,适合本地测试或内网环境:

    server {
        listen 80;
        server_name mdms.example.com;
        index index.shtml index.html index.htm;
        root /www/wwwroot/mdms.example.com;
    
        # MDMS 后台反代
        location /admin {
            proxy_pass http://127.0.0.1:9527;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    
        # 后台静态资源(CSS/JS/图标)
        location /static {
            proxy_pass http://127.0.0.1:9527;
        }
    
        # API 接口(搜索、健康检查等)
        location /api {
            proxy_pass http://127.0.0.1:9527;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    
        # 错误页
        error_page 404 /404.html;
    }
    

    完整配置(HTTPS + 宝塔面板)

    生产环境推荐配置,包含 SSL、HTTP 强制跳转 HTTPS、安全规则:

    server {
        listen 80;
        listen 443 ssl http2;
        server_name mdms.example.com;
        index index.shtml index.html index.htm;
        root /www/wwwroot/mdms.example.com;
    
        # SSL 证书(宝塔自动申请)
        ssl_certificate    /www/server/panel/vhost/cert/mdms.example.com/fullchain.pem;
        ssl_certificate_key    /www/server/panel/vhost/cert/mdms.example.com/privkey.pem;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;
        add_header Strict-Transport-Security "max-age=31536000";
    
        # HTTP 强制跳转 HTTPS
        if ($server_port != 443) {
            rewrite ^(/.*)$ https://$host$1 permanent;
        }
    
        # ═══ MDMS 反代规则(三条,缺一不可) ═══
    
        # 1. 后台管理界面
        location /admin {
            proxy_pass http://127.0.0.1:9527;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    
        # 2. 后台静态资源
        location /static {
            proxy_pass http://127.0.0.1:9527;
        }
    
        # 3. API 接口
        location /api {
            proxy_pass http://127.0.0.1:9527;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    
        # ═══ 安全规则 ═══
        location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn) {
            return 404;
        }
    
        # ═══ 静态资源缓存 ═══
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
            expires 30d;
        }
        location ~ .*\.(js|css)?$ {
            expires 12h;
        }
    
        # ═══ 错误页 ═══
        error_page 404 /404.html;
    
        access_log /www/wwwlogs/mdms.example.com.log;
        error_log /www/wwwlogs/mdms.example.com.error.log;
    }
    

    三条反代规则说明

    MDMS 需要三条反代规则,缺少任何一条都会导致功能异常:

    /admin 反代后台管理界面。如果缺少,访问后台会返回 Nginx 的 404 页面。

    /static 反代后台的 CSS、JS、图标等静态资源。如果缺少,后台界面没有样式,显示为纯文本。

    /api 反代前台搜索、健康检查等 API 接口。如果缺少,前台搜索不可用,后台健康检查报错(SyntaxError: Unexpected token '<')。

    端口选择

    MDMS 默认监听 8080 端口。如果端口被占用,可以换用其他端口。常用备选:9527、9090、3000、5000。

    启动命令和 systemd 配置中的端口必须和 Nginx 反代的端口一致。例如使用 9527:

    启动命令: ./mdms -mode serve -port 9527

    Nginx 反代: proxy_pass http://127.0.0.1:9527

    systemd: ExecStart=/opt/mdms/mdms/mdms -mode serve -port 9527

    宝塔面板注意事项

    如果使用宝塔面板管理 Nginx,注意以下几点:

    宝塔创建站点时会自动生成 Nginx 配置,包含 PHP 支持(enable-php-xx.conf)。MDMS 是纯 Go 应用,不需要 PHP,可以删除 include enable-php-xx.conf 这行。

    宝塔的 SSL 证书申请功能会自动添加证书验证目录配置(.well-known),保留即可,不影响 MDMS。

    修改 Nginx 配置后,先测试再重载:nginx -t && nginx -s reload。如果 nginx -t 报错,不要执行 reload,否则可能导致所有站点不可用。

    常见问题

    后台页面 404

    检查 /admin 反代规则是否存在。注意 location /admin 后面不要加斜杠,写成 location /admin/ 会导致 /admin/login 匹配不到。

    后台样式丢失(纯文本)

    检查 /static 反代规则是否存在。

    前台搜索不可用或健康检查报错

    检查 /api 反代规则是否存在。这是最容易遗漏的一条。

    静态页面 .shtml 返回 404

    检查 Nginx 的 index 指令是否包含 index.shtml。默认的 Nginx 配置只有 index.html,需要加上 index.shtml

    修改配置后不生效

    确认执行了 nginx -s reload。如果使用宝塔面板,也可以在面板中点击"重载配置"。

    平台声明:该文观点仅代表作者本人,快搜系信息发布平台,本平台仅提供信息存储空间服务。
    作者声明:本文系 MDMS 原创,未经许可,谢绝转载。
    相关话题 Nginx部署运维反向代理

    热门话题

    最新话题