我有一个 Apache 服务器(在 docker 中),它分发到多个应用程序。我有一个 Angular 应用程序,我想将其部署在我的服务器上,但是当通过域访问时,检索静态文件时出现 502 错误:
www.mydomain.com => 200
www.mydomain.com/assets/css/mycss.css => 502
www.mydomain.com/.../*.js => 502
这是我的 Angular Dockerfile:
FROM node:14.5.0-alpine As builder
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm install @angular/cli -g
RUN ng build --prod
FROM nginx:1.15.8-alpine
COPY --from=builder /usr/src/app/dist/angular-app/ /usr/share/nginx/html
我的(简化的)Apache 配置(mydomain.conf):
<VirtualHost *:443>
ServerName www.mydomain.com
ServerAlias www.mydomain.com
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
RewriteEngine on
RewriteOptions inherit
ProxyPreserveHost On
# angular-app is the name of container, it is in same network that apache
ProxyPass / http://angular-app Keepalive=On
ProxyPassReverse / http://angular-app
</VirtualHost>
如果我直接访问 IP:端口,应用程序就可以正常工作。
有什么建议吗?提前致谢
答案1
您有两个 FROM 语句
FROM node:14.5.0-alpine As builder
FROM nginx:1.15.8-alpine
FROM 语句用于定义 docker 应从哪个镜像开始。一旦使用 FROM,后续语句就只能将项目 ADD、RUN 或 COPY 到容器中。在您的例子中,您将从节点镜像指示 Docker,然后在几个语句之后从 nginx 镜像开始。
构建 docker 镜像时,确保它只解决一个问题。如果您计划让 angular 应用程序从节点镜像开始。如果您想要提供 angular 应用程序,请构建它并将其复制到 nginx 镜像。