如何在具有 ELB 和 ACM 的 EC2 实例上使用 HTTPS 设置 Nginx

How to set up Nginx with HTTPS on EC2 instance with ELB and ACM

提问人:hitaton 提问时间:7/16/2023 最后编辑:hitaton 更新时间:7/17/2023 访问量:487

问:

我设置了一个 EC2 实例,并在该实例上安装了一个使用 Gunicorn 和 Nginx 作为反向代理运行的 flask API。我想使用 https 协议运行它,所以我通过 OVH 购买了一个域名,并通过 AWS Certificate Manager 询问了证书,然后对其进行了验证。因此,我设置了一个 Elastic Load Balancer 以便能够使用此新证书。但是,我不知道如何修改我的 Nginx 配置文件。

现在是这个:

server {
    listen 443 ssl;
    server_name <my domain name>;

    location / {
        proxy_pass http://unix:<path to the gunicorn socket>;
    }
}

但是,使用此配置,我无法启动 Nginx,因为没有指定 SSL 证书。但如您所知,使用 AWS Certificate Manager 时,无法下载任何证书,这就是我设置 ELB 的原因。

那么我该如何解决我的问题呢?

编辑

我将我的 Nginx 配置文件更改为:

server {
    listen 80;
    server_name <my domain name>;

    location / {
        proxy_pass http://unix:<path to the gunicorn socket>;

        # Configurations supplémentaires
    }
}

我还在 EC2 实例的端口 80 上添加了进入者规则。

以下是我为 ELB 创建的侦听器:enter image description here

这是目标组: 及其保存的目标: 以及它的健康检查设置: enter image description here enter image description hereenter image description here

但是,正如您所看到的,实例的运行状况导致不正常,我不知道为什么。此外,随着ELB的添加,我不知道是否应该将该行保留在Nginx配置文件中,或者是否应该将其更改为server_name <my domain name>server_name <public IP of EC2 instance>

亚马逊网络服务 nginx ssl 证书管理器 aws-elb

评论


答:

3赞 Vasyl Herman 7/16/2023 #1

首先,创建一个应用程序负载均衡器 (ALB)。然后在端口 80 上创建一个 HTTP 侦听器,并添加默认规则以将流量重定向到端口 443 上的 HTTPS。在端口 443 上创建额外的 HTTPS 侦听器。设置默认操作以将所有流量转发到目标组。将为您的域创建的 ACM 证书指定为默认 SSL 证书。在端口 80 上创建目标组并对其进行配置。将您的实例添加到目标组,并将您的应用程序设置为侦听端口 80。

评论

0赞 hitaton 7/17/2023
嗨,你能阅读我所做的编辑并回复我吗?
1赞 Vasyl Herman 7/17/2023
确定。它说你能显示健康检查设置吗?理想情况下,应在 Flask 中创建一个响应的终结点healthcheck failed 404/health200
1赞 Vasyl Herman 7/17/2023
添加 nginx.confserver_name localhost;
0赞 hitaton 7/17/2023
我在编辑中添加了健康检查设置。此外,使用以下代码,如果我将 healtcheck 指向 ?/health@app.route('/health') def health_check(): return '', 200
0赞 hitaton 7/17/2023
好的,通过添加上面的代码并将运行状况检查设置指向现在实例运行状况良好。非常感谢您的帮助。server_name localhost;/health