angular - Angular:ng-serve 忽略证书
问题描述
我想使用ng-serve --host 0.0.0.0
. 我的项目使用 Angular CLI 1.2。
Angular 不承认我提供的证书,并创建了自己的证书。我要使用的证书是.pem
文件。
--ssl
使用 HTTPS 正确启用该标志。如果我禁用它,它会返回 HTTP,所以这个标志有效。
我在 Docker 容器中工作。我将证书作为 compose 文件中的卷传递,当我检查时它们在容器中的预期位置docker exec -i <id> bash
。
如果我忽略客户端和服务器端的无效证书错误,一切都会按预期工作。我要解决的问题是ng-serve
使用我的证书。
这是我所做的:
ng-serve --ssl true --ssl-cert <path-to-cert> --ssl-key <path-to-key>
和变化,例如绝对/相对路径。package.json
在文件中设置上述标志。设置我的
.angular-cli.json
默认值:{ ... "defaults": { ... "serve": { "sslKey": "<relative-path>", "sslCert": "<relative-path>" }, ... }, ... }
我已经尝试了答案:
通过 HTTPS 获取 angular-cli 到 ng 服务
通过 https 2018 运行 Angular Cli Ng Serve
本文中的步骤也不起作用: https ://medium.com/@rubenvermeulen/running-angular-cli-over-https-with-a-trusted-certificate-4a0d5f92747a
解决方案
您不应该ng serve
在生产 Docker 容器中使用,因为它调用开发 HTTP 服务器,根本不安全,只是为了在本地测试应用程序。这就是该命令ng serve --prod
触发以下警告的原因:
****************************************************************************************
This is a simple server for use in testing or debugging Angular applications locally. It hasn't been reviewed for security issues.
DON'T USE IT FOR PRODUCTION!
****************************************************************************************
我会给你一个用 Nginx HTTP 服务器(两个最广泛使用的服务器之一)包装 Angular 应用程序的 Dockerfile 示例:
FROM node:10.13.0-stretch as build-stage
WORKDIR /app
COPY package*.json /app/
RUN npm install
RUN npm install -g --unsafe-perm @angular/cli@latest
COPY ./ /app/
ARG configuration=production
RUN ng build --prod --build-optimizer=true --aot=true --output-hashing=all --extract-css=true --named-chunks=false --vendor-chunk=true
FROM nginx:1.14.1
# Add application files
COPY --from=build-stage /app/dist/name-of-your-app/ /var/www/html
COPY --from=build-stage /app/nginx/nginx.conf /etc/nginx/nginx.conf
COPY --from=build-stage /app/nginx/site.conf /etc/nginx/conf.d/default.conf
RUN touch /var/run/nginx.pid && \
chown -R www-data: /etc/nginx/ && \
chown -R www-data: /var/run/nginx.pid && \
chown -R www-data: /var/cache/nginx && \
chown -R www-data: /var/www/html
USER www-data
#Expose the port
EXPOSE 8080
STOPSIGNAL SIGTERM
CMD ["nginx", "-g", "daemon off;"]
这将创建两个容器,第一个安装 CLI 并构建应用程序,第二个将文件从“构建容器”复制到由 Nginx HTTP 服务器提供服务的文件夹,然后第一个容器被销毁。
这假设你有一个适当的nginx.conf
文件夹来保存你的证书配置(顺便说一下,你必须在 Dockerfile 中添加证书和私钥文件)。您还可以使用 Apache 作为 HTTP 服务器。site.conf
nginx
推荐阅读
- asp.net-mvc - 从 SharePoint 2019 进行 API 调用时,请求的资源上不存在 Access-Control-Allow-Origin 标头
- c - getchar() 添加额外字符
- reactjs - 在反应中获取后未设置数据
- html - 为什么 boostrap 轮播不显示图像(甚至不显示占位符)?
- javascript - Firebase 函数:http 函数无法读取正文或标头
- android - 将文件结构表示为 JSON
- node.js - 用 mocha/sinon 模拟 es6 类构造函数属性
- javascript - 如何减少由多个请求引起的加载时间
- android - 如何在 Android Studio 中首次使用 xml 文件初始化 Shared Preferences 值
- python - 我将如何使用 python3 在网站中查找特定链接