You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu20.04下Nginx配置静态站点与Docker Spring Cloud站点共存

问题根因

当前两个站点无法共存的核心原因是宿主机Nginx和Docker部署的新站点前端服务同时抢占了80、443公网端口,同一时间同一端口只能被一个服务绑定。解决方案是统一使用宿主机Nginx作为公网流量入口,基于域名做请求分流,Docker内的新站点不再直接暴露公网端口,仅监听本地回环地址。

操作步骤

1. 调整新站点Docker Compose配置

修改docker-compose.yml中newsite-frontend服务的配置,移除公网端口映射,调整站点域名相关环境变量:

newsite-frontend:
    image: ...........
    container_name: newsite-frontend
    restart: always    
    environment:
      - SERVER_NAME=new.mysite.cc 
      - BACKEND_SERVER_HOST=${BACKEND_HOST:-172.20.0.5} 
      - BACKEND_SERVER_PORT=${BACKEND_PORT:-6688} 
      - USE_HTTPS=true 
    ports:
      # 仅绑定本地回环地址的8081端口,映射到容器内部80端口,不对外暴露
      - "127.0.0.1:8081:80"
    networks:
      newsite-network:
        ipv4_address: 172.20.0.6

其余服务(nacos、backend)的配置不需要改动,同Docker网络内的服务可以直接通过内部IP通信,不影响可用性。

修改完成后,在docker-compose.yml所在目录执行以下命令重启前端服务:

docker-compose up -d newsite-frontend

验证服务正常:在宿主机执行curl http://127.0.0.1:8081,能正常返回新站点首页内容即配置生效。

2. 为新域名申请SSL证书

提前将new.mysite.cc的DNS A记录解析到当前服务器的公网IP,解析生效后直接使用已有的Certbot工具申请证书:

certbot --nginx -d new.mysite.cc

按照提示操作即可,证书签发成功后会存放在/etc/letsencrypt/live/new.mysite.cc/目录下。

3. 调整宿主机Nginx配置

在原有Nginx配置的基础上,新增new.mysite.cc对应的流量转发规则,原有mysite.cc的配置完全不需要改动。
新增配置内容如下:

# HTTP请求统一跳转HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name new.mysite.cc;
    return 301 https://$host$request_uri;
}

# HTTPS站点配置
server {
    server_name new.mysite.cc;

    listen [::]:443 ssl ipv6only=on;
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/new.mysite.cc/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/new.mysite.cc/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # 转发前端请求到Docker内的前端服务
    location / {
        proxy_pass http://127.0.0.1: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;
        
        # 如果站点用了WebSocket,添加以下三行配置
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    # 如果前端需要调用后端接口,放开以下配置,根据实际接口前缀调整location匹配规则
    # location /api/ {
    #     proxy_pass http://127.0.0.1:6688/;
    #     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;
    # }
}

4. 验证并重载Nginx配置

执行以下命令测试Nginx配置语法是否正确:

nginx -t

返回syntax is ok和test is successful后,重载Nginx配置生效:

systemctl reload nginx
注意事项
  • 服务器安全组/防火墙仅需对外开放80、443端口,8848(nacos)、6688(后端)、8081(本地前端)端口不要对公网开放,避免服务暴露带来安全风险。
  • 如果后续需要新增其他二级域名,按照相同逻辑添加Nginx server块,Docker服务映射本地不冲突的端口即可。

内容的提问来源于stack exchange,提问作者xaero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 17:42:42