2

我有一个在 aws ecs ec2 实例上运行的前端 Angular 应用程序,并且两者都连接到网络负载均衡器的 TCP 端口 443 和 80。我将在这个具有多个域名的 nginx docker 容器上配置许多 vhost。在 ecs 服务中,要负载平衡的容器被指定为端口 443。我们必须选择容器的端口 443 或 80 来进行负载平衡。https://prnt.sc/pocu41. 在 https 上,网站加载正常。但是在http上我得到了错误

The plain HTTP request was sent to HTTPS port

我打算在 docker 容器上使用 ssl 证书,而不是在负载均衡器上使用 ssl。如果我在负载均衡器上选择 ssl,那么我们需要在应用程序负载均衡器默认证书中使用多域 ssl,并且在有数百个域时可能不可行。

我的 Nginx conf 看起来像这样

server {
        listen 80;
        server_name  example.com;

        root   /usr/share/nginx/html/docroot;
        index  index.html index.htm;
        include /etc/nginx/mime.types;

        gzip on;
        gzip_min_length 1000;
        gzip_proxied expired no-cache no-store private auth;
        gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        location / {
            try_files $uri $uri/ /index.html;
        }
    }


server {
    listen 443 ssl;
    listen [::]:443 ssl;

    ssl on;
    ssl_certificate /etc/nginx/ssl/example.com/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;

    server_name  example.com;
    root           /usr/share/nginx/html/docroot;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }

}

知道我们如何解决这种情况吗?

4

1 回答 1

0

我打算在 docker 容器上使用 ssl 证书,而不是在负载均衡器上使用 ssl。如果我在负载均衡器上选择 ssl,那么我们需要在应用程序负载均衡器默认证书中使用多域 ssl,并且在有数百个域时可能不可行。

您的这种假设似乎不正确,您可以*从 LB 创建证书,也可以从 ACM 配置多个证书。您可以将 AWS ACM 与负载均衡器一起使用,而且完全免费,为什么我还要费心在应用程序级别管理 SSL?如果不需要 NLB,当我可以使用应用程序 LB 进行重定向时,为什么我应该在应用程序级别打开端口 80?

AWS Certificate Manager 定价

通过 AWS Certificate Manager 预置的公共 SSL/TLS 证书是免费的。您只需为为运行应用程序而创建的 AWS 资源付费。

证书管理器定价

其次,使用NLB有什么特殊原因吗?对于 Web 应用程序,我永远不会选择网络平衡器,NLB 对 TCP 级通信有意义,但我会选择应用程序 LB进行 HTTP 通信,它提供高级路由,如主机基础路由、重定向和基于路径的 路由,这将消除对Nginx 的。

容器专为轻量级任务而设计,AWS 建议内存在 300-500MB 左右,对 CPU 的建议相同。

您知道在容器级别终止 SSL 的成本吗?

SSL 流量可能是计算密集型的,因为它需要对流量进行加密和解密。SSL 依靠公钥加密来加密客户端和服务器之间通过网络安全发送消息的通信。

LB 级别 SSL 终止的优势

需要在负载平衡器处终止 SSL,因为解密是资源和 CPU 密集型的。将解密负担放在负载均衡器上使服务器能够将处理能力花费在应用程序任务上,这有助于提高性能。它还简化了 SSL 证书的管理。

new-tls-termination-for-network-load-balancers

ssl终止

在此处输入图像描述

提高 aws 应用程序性能的 10 个技巧

因此,基于此,我不会像@Linpy 建议的那样回答您的问题,如果您仍然想去,您也可以这样做,处理-nginx-400-the-plain-http-request-was-sent-到 https 端口错误

于 2019-10-28T10:36:46.893 回答