【问题标题】:Can'r run ASP.NET Core app on AWS EC2 Ubunti无法在 AWS EC2 Ubuntu 上运行 ASP.NET Core 应用程序
【发布时间】:2021-08-05 23:02:06
【问题描述】:

尝试了许多分步指南,但仍然无法通过 AWS EC2 在 Ubuntu Linux 20.4 上运行非常简单的 ASP.NET Core 5.0

我做了什么:

为实例配置入站规则:

80 TCP 0.0.0.0/0

80 TCP ::/0

22 TCP 0.0.0.0/0

443 TCP 0.0.0.0/0

443 TCP ::/0

在实例上安装了 Dotnet SDK

已安装 NGINX

使用这些设置配置 NGINX

server {
listen        80;
server_name   localhost;
location / {
    proxy_pass         http://localhost:5000;
    proxy_http_version 1.1;
    proxy_set_header   Upgrade $http_upgrade;
    proxy_set_header   Connection keep-alive;
    proxy_set_header   Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto $scheme;

}

这个配置文件的语法是正确的

重新加载 NGINX

NGINX 的状态是 Active/Running

当我运行应用程序时,它会显示这个

所以,它表明它是好的,正在收听 5000/5001

最后,当我尝试像这样通过 ip 在浏览器中访问实例时:

http://33.333.333:80

在控制台中我看到了这个:

但应用程序没有进入浏览器 - 我看到 ERR_CONNECTION_TIMED_OUT 并且页面被重定向到 https://3.33.33.333:**5001**/

在 Startup.cs 的 Configure 方法中,一开始我有这个:

app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto });

因此,来自浏览器的请求肯定会到达服务器,但其余的都不起作用。

我错过了哪一步?

【问题讨论】:

  • 从问题中不清楚,对33.333.333:443 的请求是否到达您的应用程序。您是否将防火墙配置为允许端口 5001 上的连接?如果您从服务器上的控制台尝试“wget localhost:5001”,输出是什么?
  • @AlexeyAdadurov 感谢您的回复。
  • @AlexeyAdadurov 感谢您的回复。我遵循的指南没有提到防火墙配置 - 我只是为 EC2 实例配置了 80/443 端口的入站规则。
  • 当我从服务器的控制台运行 wget localhost:5001 我看到这个 Resolving localhost (localhost)... 127.0.0.1 Connecting to localhost (localhost)|127.0.0.1|:5001...连接的。错误:无法验证 localhost 的证书,由“CN=localhost”颁发:无法在本地验证颁发者的权限。要不安全地连接到 localhost,请使用 `--no-check-certificate'。
  • 让我们暂时搁置证书问题...让我们使用建议的选项 --no-check-certificate 看看会发生什么。

标签: asp.net-core ubuntu nginx amazon-ec2


【解决方案1】:

我假设您的目标是启用 HTTPS/TLS 访问他的应用程序。我可以提供 2 个级别的响应:

  • 如果没有 nginx,一切都可以在端口 5000 和 5001 上正常运行。您尝试运行 wget https://localhost:5001 --no-check-certificate 的结果证实了这一点,这是成功的(证书信任问题除外)。

所以要在没有 nginx 的情况下运行应用程序,将 ASP.NET Core 配置文件中的端口更改为 80 和 443 并解决 TLS 证书信任问题似乎就足够了。要了解有关开发证书的更多信息,您应该参阅 Microsoft Docs 以获取有关 development certificates for ASP.NET Core 的信息。同时,从这个问题看来你需要刷新关于HTTPS、TLS和证书信任问题的一般理论。

  • 出于某种原因,您希望在设置中包含 nginx。在这种情况下,您需要考虑以下事项:
  1. 可能重新考虑您的设计选择:哪个组件(nginx 或应用程序)负责将用户从端口 80 重定向到端口 443?这可以在 nginx 上完成,并且会从您的应用中消除这种担忧。
  2. 在 nginx 配置文件中启用代理从端口 443 到 5001 的请求。您问题中包含的 nginx.conf 文件不包含必要的指令。
  3. 使用 nginx 配置文件配置受信任的 TLS 证书。信任问题是一个广泛的问题,答案取决于您正在创建的部署目标。是用于开发、测试还是生产?

【讨论】:

  • 再次非常感谢您的详细问题,我决定为我的应用程序同时使用 Kestrel 和 Nginx,因为它是 Microsoft 自己推荐的。在这种情况下,我只是按照指南进行操作(顺便说一句,所有教程都强烈建议同时使用 Kestrel 和 Nginx)。这就是为什么我很惊讶我有(并且仍然有)这个证书问题,在任何教程中都没有突出显示,并且默认情况下应该处于工作状态
  • 再一次,这些教程都没有提到“在 nginx 配置文件中启用代理从端口 443 到 5001 的请求。问题中包含的 nginx.conf 文件不包含必要的指令。配置使用 nginx 配置文件的可信 TLS 证书。”
  • 这肯定是用于生产的
  • Internet 上的公共生产站点需要公共信任的证书。您不要在自己的机器上创建这些,b/c 否则将无法证明信任关系。对于 Intranet 站点,可以由内部 CA 创建证书,因为证书只需要由 IT 部门可以管理信任的内部系统信任。请查看本指南:geekflare.com/tls-101/amp
  • 非常感谢!非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2015-03-18
  • 2015-10-14
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 1970-01-01
  • 2019-09-04
相关资源
最近更新 更多