如何在运行 NGINX Docker 容器的 AWS EC2 上启用 HTTPS?

2024-05-09

我在 AWS 上有一个运行 Amazon Linux 2 的 EC2 实例。

在上面,我安装了 Git、docker 和 docker-compose。完成后,我克隆了我的存储库并运行docker-compose up让我的生产环境启动。我访问公共 DNS,它可以工作。

我现在想要在网站上启用 HTTPS。

我的项目有一个使用 React 在 Nginx-alpine 服务器上运行的前端。后端是 NodeJS 服务器。

这是我的 nginx.conf 文件:

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri /index.html;
    }

    location /api/ {
        proxy_pass http://${PROJECT_NAME}_backend:${NODE_PORT}/;
    }    

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

这是我的 docker-compose.yml 文件:

version: "3.7"
services:
##############################
# Back-End Container
##############################
  backend: # Node-Express backend that acts as an API.
    container_name: ${PROJECT_NAME}_backend
    init: true
    build:
      context: ./backend/
      target: production
    restart: always
    environment:
      - NODE_PATH=${EXPRESS_NODE_PATH}
      - AWS_REGION=${AWS_REGION}
      - NODE_ENV=production
      - DOCKER_BUILDKIT=1
      - PORT=${NODE_PORT}
    networks:
      - client
##############################
# Front-End Container
##############################
  nginx:
    container_name: ${PROJECT_NAME}_frontend
    build:
      context: ./frontend/
      target: production
      args:
        - NODE_PATH=${REACT_NODE_PATH}
        - SASS_PATH=${SASS_PATH}
    restart: always
    environment:
      - PROJECT_NAME=${PROJECT_NAME}
      - NODE_PORT=${NODE_PORT}
      - DOCKER_BUILDKIT=1
    command: /bin/ash -c "envsubst '$$PROJECT_NAME $$NODE_PORT' < /etc/nginx/conf.d/nginx.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
    expose:
      - "80"
    ports:
      - "80:80"
    depends_on:
      - backend
    networks:
      - client
##############################
# General Config
##############################
networks:
  client:

我知道有一个 certbot 的 Docker 镜像,但我不知道如何使用它。我还担心我代理请求的方式/api/通过 http 到服务器。这也会给我带来任何问题吗?


Edit:

尝试#1:Traefik

我创建了一个 Traefik 容器来通过 HTTPS 路由所有流量。

version: '2'

services:
  traefik:
    image: traefik
    restart: always
    ports:
      - 80:80
      - 443:443
    networks:
      - web
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /opt/traefik/traefik.toml:/traefik.toml
      - /opt/traefik/acme.json:/acme.json
    container_name: traefik

networks:
  web:
    external: true

对于 toml 文件,我添加了以下内容:

debug = false

logLevel = "ERROR"
defaultEntryPoints = ["https","http"]

[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
  [entryPoints.https.tls]

[retry]

[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "ec2-00-000-000-00.eu-west-1.compute.amazonaws.com"
watch = true
exposedByDefault = false

[acme]
storage = "acme.json"
entryPoint = "https"
onHostRule = true
[acme.httpChallenge]
entryPoint = "http"

我将其添加到我的 docker-compose 生产文件中:

labels:
  - "traefik.docker.network=web"
  - "traefik.enable=true"
  - "traefik.basic.frontend.rule=Host:ec2-00-000-000-00.eu-west-1.compute.amazonaws.com"
  - "traefik.basic.port=80"
  - "traefik.basic.protocol=https"

I ran docker-compose up对于 Traefik 容器,然后运行docker-compose up在我的生产图像上。我收到以下错误:

无法获得acme证书

我正在阅读 Traefik 文档,显然有一种方法可以专门为 Amazon ECS 配置 toml 文件:https://docs.traefik.io/configuration/backends/ecs/ https://docs.traefik.io/configuration/backends/ecs/

我走在正确的轨道上吗?


最简单的方法是设置 ALB 并将其用于 HTTPS。

  1. 创建ALB
  2. 将 443 监听器添加到 ALB
  3. 使用 AWS Certificate Manager 生成证书
  4. 将证书设置为负载均衡器的默认证书
  5. 创建目标组
  6. 将您的 EC2 实例添加到目标组
  7. 将 ALB 指向目标组

将使用带有 https 的 ALB 来处理请求

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在运行 NGINX Docker 容器的 AWS EC2 上启用 HTTPS? 的相关文章

随机推荐

  • 重用 Jsoup 连接

    我喜欢 Jsoup 来解析 html 但它们的连接有问题 我需要向同一个网站但不同的查询参数发送请求 比如 id XXX 请求如下 http website id XXX 我不想为每个 id 创建一个新连接 而是为所有 id 请求保留一个连
  • 将 DIV 扩展到父列表项之外

    我有一个有序列表 它实际上是页面上产品的显示 在每个列表项中 li 有一些内容 后面跟着一个div在关闭列表项之前包含更多内容 我需要每个列表项中的 div 扩展 其宽度 超出其父列表项 并实际填充有序列表的宽度 ol 每个 div 还需要
  • iOS 中的 FacebookSDK 不显示关闭按钮且无法关闭

    您好 我已经为 iOS 6 应用程序集成了 Facebook SDK Facebook 身份验证和共享工作完美 但没有提供关闭 FB 对话框的规定 当FB对话框打开时 只有在身份验证成功后才会关闭 没有关闭或导航回来的规定 我如何制作关闭按
  • 操作按钮未出现在通知 iOS 10 中

    我在我的应用程序中使用本地推送通知 在 iOS 10 中为通知添加操作按钮时 它不会出现在通知下方 通知正在显示 但通知底部缺少操作按钮 下面给出了 appdelegate 代码 import UIKit import CoreData i
  • Scipy 最小化 fmin - 语法问题

    我有一个函数 它接受多个参数 一个数组和两个浮点数 并返回一个标量 浮点数 现在我想通过改变两个参数来最小化这个函数 两个浮点数 该数组在函数内部 解包 然后使用其内容 数组和浮点数 如何使用 SciPy 的 fmin 函数来完成此操作 我
  • Python 2 中的 Python 3 舍入行为

    在 Python 2 x 中 内置round http docs python org 2 library functions html round有以下行为 如果两个倍数同样接近 则进行四舍五入远离0 例如 round 0 5 是 1 0
  • Android,无法从谷歌API获取天气

    以下代码之前运行良好 class RetreiveWeatherTask extends AsyncTask
  • 创建用于插入、修改和删除的数据库触发器的正确​​语法是什么

    我有一个看起来像是 SQL Server 中数据库触发器的基本场景 但我遇到了一个问题 我有桌子Users 身份证 姓名 电话等 我有桌子用户历史记录 id user id 操作 字段 时间戳 我想要一个数据库触发器 可以随时插入 更新或删
  • 标签转换问题

    我是 html css 新手 当用户在输入框中输入无效输入时出现错误 然后特定输入字段的标签会下降 但是当用户输入时 输入正确则工作正常
  • 将单引号括起来的数组转换为数组

    深度嵌套在 JSON 对象中我有属性value actions name InviteUser type button value Brian Timoney email protected cdn cgi l email protecti
  • 如何以编程方式从 mipmap 文件夹加载图像? [复制]

    这个问题在这里已经有答案了 如何从 加载图像mipmap以编程方式保存文件夹 与可绘制对象一样 img setImageResource imageId 我使用的是Android Studio 1 2 1 In 安卓工作室我们有mipmap
  • 无法安装 psycopg2 Ubuntu

    试图为 django 项目准备好服务器 但我在设置 postgres 时遇到了一些问题 我正在遵循本指南 https jee appy blogspot com 2017 01 deply django with nginx html ht
  • Webstorm 不刷新修改后的 JavaScript 文件

    我的 HTML 页面引用了一些 JavaScript 文件 例如 我正在使用 Chrome 的 Windows 中使用 Python SimpleHTTPServer 来调试 WebStorm 我可以在 JavaScript 中设置断点 W
  • Visual Studio 2010 在程序结束后退出

    我正在通过编译 C 程序来尝试 Visual Studio 2010 在 DOS 命令窗口中显示解决方案后 该窗口立即关闭 在 Visual Studio 2008 中 用户会收到按任意键继续的消息 并按任意键关闭命令提示符窗口 我如何在
  • 更新 Meteor 中的嵌套数组

    这是我的架构 id FJwSEMdDriddXLKXh name t number 5 owners id 1 name Name address Address type Type gender Gender notes 单击后 我将在所
  • 使用 nix 在 Mac OS X 上由于“架构 x86_64 的未定义符号”而导致“堆栈构建”失败

    首先是错误消息 stack build Linking Users yuzhao stack setup exe cache x86 64 osx tmp Cabal simple mPHDZzAJ 2 2 0 1 ghc 8 4 4 cl
  • 如何隐藏 dll 导出类中的成员变量

    我想在 dll 文件中导出一个 1024 字节的类 class declspec dllexport ExportedClass private char Data 1024 Holding 1024 bytes public void F
  • 缓冲与非缓冲,该使用哪一种?

    如果这是重复的 我很抱歉 但我无法找到每种类型的最佳实践的明确答案 我想知道定义何时使用 BufferedReader 与 FileReader 或 BufferedInput OutputStream 与 FileInput Output
  • 图表无法在 Xcode 14 上编译

    我在图书馆中面临以下错误 Type 图表数据集 不符合协议 范围可替换集合 实例方法不可用 替换Subrange with 用于满足协议的要求 范围可替换集合 将其附加到扩展 ChartDataSet RangeReplaceableCol
  • 如何在运行 NGINX Docker 容器的 AWS EC2 上启用 HTTPS?

    我在 AWS 上有一个运行 Amazon Linux 2 的 EC2 实例 在上面 我安装了 Git docker 和 docker compose 完成后 我克隆了我的存储库并运行docker compose up让我的生产环境启动 我访