Asp.net core Can';r在AWS EC2 Ubunti上运行ASP.NET核心应用程序

Asp.net core Can';r在AWS EC2 Ubunti上运行ASP.NET核心应用程序,asp.net-core,ubuntu,nginx,amazon-ec2,Asp.net Core,Ubuntu,Nginx,Amazon Ec2,尝试了许多分步指南,但仍然无法从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 localhos

尝试了许多分步指南,但仍然无法从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的状态为活动/正在运行

当我运行应用程序时,它会显示以下内容

所以,它表明它是正常的,并且听5000/5001

最后,当我尝试通过ip访问浏览器中的实例时,如下所示:

在控制台中,我看到以下内容:

但应用程序没有进入浏览器-我看到错误连接超时,页面被重定向到

在刚开始的Configure方法中的Startup.cs中,我有以下内容:

app.UseForwardedHeaders(新的ForwardedHeaders选项{ForwardedHeaders=ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto})

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


我错过了哪一步?

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

  • 如果没有nginx,在端口5000和5001上一切都可以正常工作。您尝试运行
    wget的结果证实了这一点https://localhost:5001 --没有成功的检查证书
    (证书信任问题除外)
因此,要在没有nginx的情况下运行应用程序,在ASP.NET核心配置文件中将端口更改为80和443并解决TLS证书信任问题似乎就足够了。要了解有关开发证书的更多信息,请参阅Microsoft文档以了解有关的信息。同时,从这个问题来看,您需要更新关于HTTPS、TLS和证书信任问题的一般理论

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

  • 这个问题并不清楚,是否有一个请求到达了你的应用程序。您是否将防火墙配置为允许在端口5001上进行连接?如果您在服务器的控制台上尝试“wget”,输出是什么?@AlexeyAdadurov谢谢您的回复。@AlexeyAdadurov谢谢您的回复。我遵循的指南没有提到防火墙配置-我只是为80/443端口的EC2实例配置了入站规则。当我从服务器的控制台运行两个wget时,我看到这个解析localhost(localhost)。。。127.0.0.1连接到本地主机(localhost)| 127.0.0.1 |:5001。。。有联系的。错误:无法验证由“CN=localhost”颁发的localhost证书:无法在本地验证颁发者的权限。要不安全地连接到本地主机,请使用“--no check certificate”。让我们暂时搁置证书问题。。。让我们使用建议的选项——不检查证书,看看会发生什么。再次感谢您提出的详细问题。我决定让Kestrel和Nginx都用于我的应用程序,因为它是由Microsoft自己推荐的。我只是按照本例中的指南(顺便说一句,所有教程都强烈建议同时使用Kestrel和Nginx)。这就是为什么我感到惊讶,我有(现在仍然有)证书的问题,这在任何教程中都不是很高,默认情况下应该处于工作状态,而且这些教程中没有一个提到这样的问题“在nginx配置文件中启用从端口443到5001的代理请求。问题中包含的nginx.conf文件不包含必要的指令。使用nginx配置文件配置受信任的TLS证书。“这是为了制作,因为互联网上的公共制作网站需要一个公众信任的证书。您不能在自己的机器上创建这些,否则将无法证明信任关系。对于intranet站点,证书可以由内部CA创建,因为证书只需要由IT部门可以管理信任的内部系统信任。请查看本指南:非常感谢!我真的很感谢你的帮助