Azure Linux应用服务中Node.js/Express应用的.pem证书部署路径及上传方法
解决Azure上Node.js应用连接MySQL的SSL证书存放问题
首先要明确:Azure App Service(Node.js部署场景)的默认网站根目录不是官方示例里的/var/www/html,这个路径通常是Linux虚拟机或传统Web服务器(如Apache)的默认目录,和App Service的目录结构不符,所以你找不到是正常的。下面给你几个可行的解决方案:
方案1:将证书放在应用代码目录中(最便捷)
- 在你的Node.js项目根目录下新建一个
certs文件夹,把DigiCertGlobalRootG2.crt.pem文件放进去 - 修改代码中的SSL配置,使用相对路径读取证书(配合
path模块避免路径问题):const path = require('path'); // ... ssl: { ca: fs.readFileSync(path.join(__dirname, './certs/DigiCertGlobalRootG2.crt.pem'), 'utf8') } - 用VS Code连接到Azure应用后,直接把
certs文件夹上传到应用的根目录(即/home/site/wwwroot)即可,部署时证书会和代码一起同步到服务器。
方案2:用环境变量存储证书内容(更安全)
如果担心证书文件被误提交到代码仓库或意外暴露,可通过Azure应用设置存储证书内容:
- 打开Azure门户,找到你的App Service → 进入「配置」→「应用程序设置」
- 新建一个环境变量(比如命名为
MYSQL_SSL_CA),将DigiCertGlobalRootG2.crt.pem文件的完整文本内容粘贴到变量值中 - 修改代码,直接读取环境变量:
ssl: { ca: process.env.MYSQL_SSL_CA }
这种方式无需上传任何文件,证书内容会被安全存储在Azure配置中,且不会随代码仓库流转。
方案3:上传到App Service的专属存储目录
若你坚持要用文件路径的方式,App Service提供固定的网站根目录/home/site/wwwroot,操作如下:
- 用VS Code连接到Azure应用后,在
wwwroot目录下新建certs文件夹,上传证书文件 - 修改代码中的读取路径为:
ssl: { ca: fs.readFileSync('/home/site/wwwroot/certs/DigiCertGlobalRootG2.crt.pem', 'utf8') }
内容的提问来源于stack exchange,提问作者galactikuh
相关产品推荐
相关产品推荐

