1

我在一个容器中通过端口 80 和 443 运行 Nginx,后者使用mkcert生成的 SSL 证书。这非常有效。

在另一个容器中,我正在运行 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 环境变量。

导出 NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"

所以我知道我的 Node 容器上需要 rootCA.pen,这应该是它的结束。

在用于构建节点容器的 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 的环境变量。

为了安全起见,进入节点容器后,检查 rootCA.pem 是否存在,我终止节点进程并再次运行导出!

运行 gulp 文件:

function server(done) {
  browser.init({
    proxy: "https://nginx",
    open: false,
    https: true
  });
  done();
}

Browsersync 加载并显示我......</p>

[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 工作。但并非没有安全警告。

我错过了什么?

4

0 回答 0