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

Docker部署Nuxt-Axios应用配置SSL证书遇阻求助

解决方案

1. 修正Caddy路径转发逻辑

当前handle_path /api/*会将请求完整路径(如/api/users)转发到API服务,而API服务本身已经挂载了/api前缀,导致实际请求变为node:3001/api/users,路径重复。需要添加uri strip_prefix /api去掉多余前缀:

{
 debug
}

example.com {
    handle_path /api/* {
        reverse_proxy node:3001 {
            uri strip_prefix /api
        }
    }

    handle {
        reverse_proxy node:3000
    }
}

# 其余子域名配置保持不变
emqx.example.com {
    reverse_proxy emqx:18083
}
ws.example.com {
    reverse_proxy emqx:8083
}
wss.example.com {
    reverse_proxy emqx:8084
}

portainer.example.com {
   reverse_proxy portainer:9000
}

2. 调整Nuxt服务配置

  • 关闭Nuxt自身HTTPS:Caddy已负责SSL终止,容器内部无需再启用HTTPS,否则会导致协议不匹配
  • 移除serverMiddleware中的/api配置:API已通过Caddy转发到独立服务,无需Nuxt处理该路径

修正后的nuxt.config.js片段:

axios: {
  baseURL: process.env.AXIOS_BASE_URL // 确保环境变量值为'https://example.com/api'
},
env: {
  mqtt_prefix: process.env.MQTT_PREFIX,
  mqtt_host: process.env.MQTT_HOST,
  mqtt_port: process.env.MQTT_PORT
},

server: {
  https: false, // 改为false,由Caddy处理HTTPS
  port: 3000,
  host: '0.0.0.0',
},

// 移除以下serverMiddleware配置
// serverMiddleware: {
//   https: true,
//   '/api': '~/api'
// },

3. 优化API的CORS配置

生产环境建议指定允许的来源,避免过于宽松的配置:

// 替换原有的app.use(cors())
app.use(cors({
  origin: 'https://example.com',
  credentials: true // 如需携带Cookie等凭证需启用
}));

4. 验证Docker网络连通性

确保Caddy、Nuxt、API等容器处于同一个Docker网络,否则Caddy无法通过容器名(如node:3001)访问到API服务。可通过docker network inspect <网络名>确认容器归属。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:25:18