【发布时间】:2020-07-17 22:15:59
【问题描述】:
我有 2 个 docker 容器在服务器上运行:
- 前端 Vue.js 应用程序 (0.0.0.0:6336 -> 443/tcp)
- Express 后端 (0.0.0.0:8000 -> 443/tcp)
当前端尝试与后端通信时,使用此请求:
https://host:8000/query
我收到此错误:
net::ERR_SSL_PROTOCOL_ERROR
后端应用了一个证书,如下所示:
app = https.createServer({
key: fs.readFileSync('private_key.key', 'utf8'),
cert: fs.readFileSync('cert.crt', 'utf8')
}, app)
如果我在本地运行这两个应用程序,它工作正常。我觉得这是一个简单的修复,但我对 Docker 还很陌生,所以我不知道从哪里开始。
如果我将其更改为 http,我会收到此错误:
xhr.js:178 混合内容:“https://host:6336/#/search?subject=a”处的页面通过 HTTPS 加载,但请求了不安全的 XMLHttpRequest 端点“http://host:8000” /询问'。此请求已被阻止;内容必须通过 HTTPS 提供。
【问题讨论】:
-
express 真的服务于 https 吗?如果你试试
http://host:8000/query,那行得通吗? -
我更新了问题以显示
http会发生什么。 -
如果您直接通过 http 访问该页面,是否有效?
-
它确实可以在 http 上运行。我发现如果我将密钥和证书存储在后端存储库本身中它可以工作,但如果它们位于从主机绑定的目录中,它就不起作用。而且我已经验证了从主机绑定时文件是否存在。有什么想法吗?
-
这表明 Express 真正服务于 http,而不是 https。我之前在使用 https 访问 http 资源时遇到过这个错误。
标签: node.js docker express server containers