我在端口80和443的一个容器中运行Nginx,后者使用mkcert生成SSL证书。
在另一个容器中,我运行Node, Node运行Gulp, Gulp运行Browsersync。
我的Gulp文件在Node容器中运行,它打开端口3000到我的本地机器并代理localhost,以便:https://localhost从Nginx容器运行。https://localhost:3000使用Browsersync
从Node容器中运行除了节点容器不能通过代理安全地显示网站之外,这是有效的。
阅读更多关于Node认证可能发生的事情,我在mkcert
找到这个使用Node.js的根目录
Node不使用系统根存储,所以它不会接受mkcert自动证书。相反,您必须设置NODE_EXTRA_CA_CERTS环境变量
export NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem">
所以我知道我需要rootCA。在我的Node容器上的笔,这应该是结束。
在Dockerfile中用于构建节点容器
FROM node:12.19.1-alpine3.9
RUN npm install -g gulp-cli@2.1.0
ADD ./nginx/certs /etc/ssl
RUN export NODE_EXTRA_CA_CERTS=/etc/ssl/rootCA.pem
我获取所有的证书,包括rootCA。Pem文件,并将它们转储到节点容器的某个地方,在本例中为/etc/ssl
然后设置NODE_EXTRA_CA_CERTS的env变量。
为了安全起见,在进入Node容器后,检查rootCA。pem在那里,我杀死节点进程并再次运行导出!
运行gulp文件
function server(done) {
browser.init({
proxy: "https://nginx",
open: false,
https: true
});
done();
}
Browsersync加载并显示…
[Browsersync] Proxying: https://nginx
[Browsersync] Access URLs:
--------------------------------------
Local: https://localhost:3000
External: https://192.168.16.7:3000
--------------------------------------
UI: http://localhost:3001
UI External: http://localhost:3001
--------------------------------------
我可以在浏览器中打开https://localhost:3000和browsersync工作。但不能没有安全警告。
我错过了什么?
对于任何在使用BrowserSync时遇到SSL问题的人,您可能希望明确指向您的自定义证书和密钥。
browserSync( {
proxy: "https://localhost/mysite/",
https: {
key: "W:/xampp/htdocs/mkcert/localhost/localhost.key",
cert: "W:/xampp/htdocs/mkcert/localhost/localhost.crt"
}
});
注意:我使用的是xampp,它安装在W:/drive.
你可以在这里了解更多。
HTH