无法将CloudFlare域名与运行多Docker镜像的AWS EC2关联求助
配置域名访问EC2上的Docker服务
我在CloudFlare购买了域名example.com,并在CloudFlare中配置了证书和私钥。AWS EC2实例上运行着两个Docker镜像:Flask Hello World服务监听3000端口,Angular Hello World服务监听4000端口。我希望通过example.com:3000访问Flask服务,通过example.com:4000访问Angular服务。
已配置的DNS记录
| 类型(Type) | 名称(Name) | 内容(Content) | 代理状态(Proxy Status) | TTL |
|---|---|---|---|---|
| A | example.com | EC2实例的公网IPv4地址 | 仅DNS(DNS Only) | 自动(Auto) |
| A | www | EC2实例的公网IPv4地址 | 仅DNS(DNS Only) | 自动(Auto) |
Flask Dockerfile
# 使用Fedora作为基础镜像 FROM fedora # 更新软件包仓库并升级所有软件包 RUN dnf upgrade -y # 安装pip及其他必要软件包 RUN dnf install -y python3-pip gcc python3-devel # 设置工作目录为/app WORKDIR /app # 将当前目录的所有内容复制到容器内的/app目录 COPY . . # 从requirements.txt安装Python依赖 RUN pip3 install -r requirements.txt # 暴露Flask应用运行的端口 EXPOSE 5000 # 设置Flask环境变量 ENV FLASK_APP=run.py # 启动Flask应用 CMD ["flask", "run", "--host=0.0.0.0"]
Angular Dockerfile
# 使用官方Node.js运行时作为基础镜像(构建阶段) FROM node:18 AS build # 设置容器内的工作目录 WORKDIR /app # 将package.json和package-lock.json复制到工作目录 COPY package*.json ./ # 安装依赖 RUN npm install # 复制剩余的应用代码到工作目录 COPY . . # 构建生产环境的Angular应用 RUN npm run build --prod # 使用官方Nginx运行时作为基础镜像(部署阶段) FROM nginx:alpine # 将构建阶段生成的Angular应用复制到Nginx的html目录 COPY --from=build /app/dist/sample-frontend/browser /usr/share/nginx/html # 复制SSL证书 COPY ssl/origin.pem /etc/nginx/ssl/origin.pem COPY ssl/origin.key /etc/nginx/ssl/origin.key # 删除默认的Nginx配置文件 RUN rm /etc/nginx/conf.d/default.conf # 将自定义Nginx配置文件复制到Nginx配置目录 COPY nginx.conf /etc/nginx/conf.d # 向外暴露443端口(HTTPS) EXPOSE 443 # 容器启动时启动Nginx CMD ["nginx", "-g", "daemon off;"]
Angular nginx.conf
# HTTP(80端口)重定向到HTTPS(443端口) server { listen 80; server_name example.com www.example.com; # 将所有HTTP请求重定向到HTTPS return 301 https://$host$request_uri; } # HTTPS服务器配置块 server { listen 443 ssl; server_name example.com www.example.com; # SSL证书与密钥 ssl_certificate /etc/nginx/ssl/origin.pem; ssl_certificate_key /etc/nginx/ssl/origin.key; # 启用强SSL加密 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384'; ssl_prefer_server_ciphers on; root /usr/share/nginx/html; index index.html; # 提供Angular应用服务 location / { try_files $uri $uri/ /index.html; } # 启用Gzip压缩 gzip on; gzip_types text/plain application/javascript text/css application/json; gzip_min_length 256; }
内容的提问来源于stack exchange,提问作者DipayanRay
相关产品推荐
相关产品推荐

