生产环境下Nuxt.js 3.9 SSL配置(无需反向代理)
解决Nuxt.js 3.9生产构建集成SSL证书(无需反向代理)
核心配置思路
Nuxt 3生产环境基于Nitro服务器运行,需直接配置Nitro的HTTPS参数(而非开发环境的devServer配置)。结合你的Docker/K8s场景,具体步骤如下:
1. 配置nuxt.config.js
在项目根目录的nuxt.config.js中添加Nitro服务器的HTTPS配置,支持硬编码路径或环境变量动态注入:
export default defineNuxtConfig({ nitro: { server: { https: { key: process.env.SSL_PRIVATE_KEY_PATH || '/app/certs/privkey.pem', cert: process.env.SSL_CERT_PATH || '/app/certs/fullchain.pem' }, port: process.env.HTTPS_PORT || 8443 } } })
2. 调整Docker Entrypoint脚本
确保entrypoint脚本完成以下操作,适配证书获取与权限:
# 创建证书存储目录 mkdir -p /app/certs # 下载SSL证书(替换为你的实际curl命令) curl -o /app/certs/fullchain.pem https://your-cert-source/cert curl -o /app/certs/privkey.pem https://your-cert-source/key # 注入环境变量(与nuxt.config配置对应) export SSL_PRIVATE_KEY_PATH="/app/certs/privkey.pem" export SSL_CERT_PATH="/app/certs/fullchain.pem" export HTTPS_PORT=8443 # 赋予证书可读权限(避免Nuxt进程无权限读取) chmod 644 /app/certs/* # 启动Nuxt生产服务 node .output/server/index.mjs
3. 处理端口权限问题
若使用443等1024以下端口(默认HTTPS端口),需额外配置权限:
- Docker环境:启动容器时添加
--cap-add=NET_BIND_SERVICE参数,或在Dockerfile中使用USER root(不推荐) - Kubernetes环境:在Deployment的
securityContext中配置权限:securityContext: capabilities: add: ["NET_BIND_SERVICE"]
4. 局域网自签名证书适配
如果使用自签名证书,需确保局域网内客户端信任该证书:
- 将根证书导入客户端设备的系统信任存储
- 测试阶段可临时忽略浏览器证书警告(生产环境禁用)
内容的提问来源于stack exchange,提问作者Fabian
相关产品推荐
相关产品推荐

