Files
yunzerwebsiteallinone/docs/域名系统配置指南_Go.md
T
2026-07-14 10:09:24 +08:00

9.1 KiB

Go (Beego) 多租户二级域名系统部署与配置指南

本指南详细介绍在 不改变你目前宝塔部署路径 的前提下,如何配置 yunzer.com.cndh2.fun 及其所有二级域名的 Nginx,让它们能够直接访问并使用部署在 www.yunzer.cn 的官网前端静态模板。


🛠️ 第一步:宝塔物理部署路径规划(保持现状)

请确认或保持你目前在宝塔服务器上的物理目录部署,不需要进行任何文件移动:

  1. 企业官网门户前台 (frontend)

    • 物理路径: /www/wwwroot/www.yunzer.cn
    • 说明: 你的 frontend 编译打包文件平铺部署在此目录下(有 index.html)。
  2. 平台运营管理后台 (platform)

    • 物理路径: /www/wwwroot/platform.yunzer.cn
  3. 租户/商家管理后台 (back)

    • 物理路径: /www/wwwroot/back.yunzer.cn
  4. Go 后端 API 服务

    • 运行端口: 本地 http://10.31.100.2:8081

📄 第二步:修改 yunzer.com.cndh2.fun 的 Nginx 配置

为了绕过宝塔面板对 SSL 注释规则的保存验证限制,以下配置中完全保留了宝塔原生生成的 #SSL-START#error_page 404/404.html; 以及 #SSL-END 结构

请分别在宝塔面板对应站点的 “配置文件” 选项中,替换为以下内容:

1. yunzer.com.cn 的 Nginx 配置文件

server {
    listen 80;
    listen 443 ssl;
    listen 443 quic;
    http2 on;

    # 匹配主域名和所有租户的子域名
    server_name yunzer.com.cn ~^(?<subdomain>.+)\.yunzer\.com\.cn$;
    index index.html;
    
    # 核心修改:直接指向部署了 frontend 的静态资源路径
    root /www/wwwroot/www.yunzer.cn;

    #CERT-APPLY-CHECK--START
    include /www/server/panel/vhost/nginx/well-known/yunzer.com.cn.conf;
    #CERT-APPLY-CHECK--END
    include /www/server/panel/vhost/nginx/extension/yunzer.com.cn/*.conf;

    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    
    #HTTP_TO_HTTPS_START
    set $isRedcert 1;
    if ($server_port != 443) {
        set $isRedcert 2;
    }
    if ( $uri ~ /\.well-known/ ) {
        set $isRedcert 1;
    }
    if ($isRedcert != 1) {
        rewrite ^(/.*)$ https://$host$1 permanent;
    }
    #HTTP_TO_HTTPS_END

    ssl_certificate    /www/server/panel/vhost/cert/yunzer.com.cn/fullchain.pem;
    ssl_certificate_key    /www/server/panel/vhost/cert/yunzer.com.cn/privkey.pem;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_tickets on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000";
    add_header Alt-Svc 'quic=":443"; h3=":443"; h3-29=":443"; h3-27=":443";h3-25=":443"; h3-T050=":443"; h3-Q050=":443";h3-Q049=":443";h3-Q048=":443"; h3-Q046=":443"; h3-Q043=":443"';
    error_page 497  https://$host$request_uri;
    #SSL-END

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    #ERROR-PAGE-END

    # --- 安全与防盗链拦截 START ---
    location ~* (\.user.ini|\.htaccess|\.htpasswd|\.env.*|\.project|\.bashrc|\.bash_profile|\.bash_logout|\.DS_Store|\.gitignore|\.gitattributes|LICENSE|README\.md|CLAUDE\.md|CHANGELOG\.md|CHANGELOG|CONTRIBUTING\.md|TODO\.md|FAQ\.md|composer\.json|composer\.lock|package(-lock)?\.json|yarn\.lock|pnpm-lock\.yaml|\.\w+~|\.swp|\.swo|\.bak(up)?|\.old|\.tmp|\.temp|\.log|\.sql(\.gz)?|docker-compose\.yml|docker\.env|Dockerfile|\.csproj|\.sln|Cargo\.toml|Cargo\.lock|go\.mod|go\.sum|phpunit\.xml|phpunit\.xml|pom\.xml|build\.gradl|pyproject\.toml|requirements\.txt|application(-\w+)?\.(ya?ml|properties))$ {
        return 404;
    }

    location ~* /(\.git|\.svn|\.bzr|\.vscode|\.claude|\.idea|\.ssh|\.github|\.npm|\.yarn|\.pnpm|\.cache|\.husky|\.turbo|\.next|\.nuxt|node_modules|runtime)/ {
        return 404;
    }

    location ~ \.well-known {
        allow all;
    }

    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
        return 403;
    }
    # --- 安全与防盗链拦截 END ---

    # 静态资源缓存
    location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {
        expires 30d;
        error_log /dev/null;
        access_log /dev/null;
    }

    location ~* \.(js|css)$ {
        expires 12h;
        error_log /dev/null;
        access_log /dev/null;
    }

    # --- Go API 反向代理及 Vue 路由支持 ---
    # 1. 代理 /api/ 请求到本地运行在 8081 端口的 Go 服务
    location /api/ {
        proxy_pass http://10.31.100.2:8081/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 2. 代理文件上传目录到 Go 静态服务
    location /uploads/ {
        proxy_pass http://10.31.100.2:8081/uploads/;
    }

    # 3. 前端单页面应用 (Vue Router) History 模式重定向
    location / {
        try_files $uri $uri/ /index.html;
    }

    access_log  /www/wwwlogs/yunzer.com.cn.log;
    error_log  /www/wwwlogs/yunzer.com.cn.error.log;
}

2. dh2.fun 的 Nginx 配置文件

server { 
     listen 80; 
     listen 443 ssl; 
     listen 443 quic; 
     http2 on; 

     # 匹配主域名和所有租户的子域名
     server_name dh2.fun ~^(?<subdomain>.+)\.dh2\.fun$; 
     index index.html; 
     
     # 核心修改:直接指向部署了 frontend 的静态资源路径
     root /www/wwwroot/www.yunzer.cn; 
     
     #CERT-APPLY-CHECK--START 
     include /www/server/panel/vhost/nginx/well-known/dh2.fun.conf; 
     #CERT-APPLY-CHECK--END 
     include /www/server/panel/vhost/nginx/extension/dh2.fun/*.conf; 
     
     #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
     #error_page 404/404.html; 
     
     #HTTP_TO_HTTPS_START
     set $isRedcert 1; 
     if ($server_port != 443) { 
         set $isRedcert 2; 
     } 
     if ( $uri ~ /\.well-known/ ) { 
         set $isRedcert 1; 
     } 
     if ($isRedcert != 1) { 
         rewrite ^(/.*)$ https://$host$1 permanent; 
     } 
     #HTTP_TO_HTTPS_END

     ssl_certificate    /www/server/panel/vhost/cert/dh2.fun/fullchain.pem; 
     ssl_certificate_key    /www/server/panel/vhost/cert/dh2.fun/privkey.pem; 
     ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; 
     ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; 
     ssl_prefer_server_ciphers on; 
     ssl_session_tickets on; 
     ssl_session_cache shared:SSL:10m; 
     ssl_session_timeout 10m; 
     add_header Strict-Transport-Security "max-age=31536000"; 
     add_header Alt-Svc 'quic=":443"; h3=":443"; h3-29=":443"; h3-27=":443";h3-25=":443"; h3-T050=":443"; h3-Q050=":443";h3-Q049=":443";h3-Q048=":443"; h3-Q046=":443"; h3-Q043=":443"'; 
     error_page 497  https://$host$request_uri; 
     #SSL-END 
 
     #ERROR-PAGE-START  错误页配置,可以注释、删除或修改 
     error_page 404 /404.html; 
     #ERROR-PAGE-END 
 
     # 禁止访问的敏感文件 
     location ~* (\.user.ini|\.htaccess|\.htpasswd|\.env.*|\.project|\.bashrc|\.bash_profile|\.bash_logout|\.DS_Store|\.gitignore|\.gitattributes|LICENSE|README\.md|CLAUDE\.md|CHANGELOG\.md|CHANGELOG|CONTRIBUTING\.md|TODO\.md|FAQ\.md|composer\.json|composer\.lock|package(-lock)?\.json|yarn\.lock|pnpm-lock\.yaml|\.\w+~|\.swp|\.swo|\.bak(up)?|\.old|\.tmp|\.temp|\.log|\.sql(\.gz)?|docker-compose\.yml|docker\.env|Dockerfile|\.csproj|\.sln|Cargo\.toml|Cargo\.lock|go\.mod|go\.sum|phpunit\.xml|phpunit\.xml|pom\.xml|build\.gradl|pyproject\.toml|requirements\.txt|application(-\w+)?\.(ya?ml|properties))$ 
     { 
         return 404; 
     } 
     
     # 禁止访问的敏感目录 
     location ~* /(\.git|\.svn|\.bzr|\.vscode|\.claude|\.idea|\.ssh|\.github|\.npm|\.yarn|\.pnpm|\.cache|\.husky|\.turbo|\.next|\.nuxt|node_modules|runtime)/ { 
         return 404; 
     } 
 
     #一键申请SSL证书验证目录相关设置 
     location ~ \.well-known{ 
         allow all; 
     } 
 
     #禁止在证书验证目录放入敏感文件 
     if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) { 
         return 403; 
     } 
 
     location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 
     { 
         expires      30d; 
         error_log /dev/null; 
         access_log /dev/null; 
     } 
 
     location ~ .*\.(js|css)?$ 
     { 
         expires      12h; 
         error_log /dev/null; 
         access_log /dev/null; 
     } 
 
     # --- Go API 反向代理及 Vue 路由支持 ---
     location /api/ {
         proxy_pass http://10.31.100.2:8081/; 
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
     }

     location /uploads/ {
         proxy_pass http://10.31.100.2:8081/uploads/;
     }

     location / {
         try_files $uri $uri/ /index.html;
     }
 }