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
相关产品推荐
相关产品推荐

