在Linux(Ubuntu)上部署ASP.NET CORE网站。无法从外部计算机连接到服务器

时间:2018-03-17 07:19:21

标签: c# asp.net linux nginx server

我有一个asp.net核心项目。它只是一个单页网站。我在Linux上将此网站部署为守护进程。我使用Nginx代理服务器+ Kestrel。

当我尝试通过http://@MyIPadress@:5000连接时 - 一切都没问题。但是,当我尝试从计算机连接时,没有与服务器的本地连接 - 我捕获错误连接超时

Ping到服务器:

packets transmitted     9
received                0
packet loss             100 %
time                    8162 ms

打开端口:

命令:sudo ufw status

80                         ALLOW       Anywhere                  
443                        ALLOW       Anywhere                                   
80/tcp                     ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
80 (v6)                    ALLOW       Anywhere (v6)             
443 (v6)                   ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6) 

此外,端口80和443在我的本地IP上转发。

Nginx设置

server {
    listen 80;
    server_name  promzona.ddns.net;
    proxy_send_timeout 1000;
    proxy_read_timeout 1000;
    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 Connection $http_connection;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

ASP.NET CORE Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseContentRoot("/home/promzona/All Works/ASP CORE Tutorial")
            .UseStartup<Startup>()
            .UseKestrel(options =>
            {
                options.Limits.RequestHeadersTimeout = new TimeSpan(0, 5, 0);
                options.Limits.KeepAliveTimeout = new TimeSpan(0, 10, 0);
            })
            .Build();
}

ASP.NET CORE中间件

public void Configure(IApplicationBuilder app)
        {
            Console.WriteLine("NEW CONNECTION");
            app.UseForwardedHeaders(new ForwardedHeadersOptions
            {
                ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
            });                  
            app.UseDefaultFiles();
            app.UseStaticFiles();
            app.UseStaticFiles(new StaticFileOptions
            {
                FileProvider = new PhysicalFileProvider("/home/promzona/All Works/ASP CORE Tutorial")
            });                            
            app.UseMiddleware<CounterMiddleware>();               
            app.Run(async (context) =>
            {        
                await context.Response.WriteAsync(System.IO.Directory.GetCurrentDirectory());
            });
        }

。    CounterMiddleware是我的中间件,它计算按下按钮的次数和返回的点击次数。

日志

Nginx日志仅显示成功连接,来自我的计算机的连接。我的服务器日志也没有显示失败的连接。

命令:sudo tcpdump -i enp3s0 host (my_local_ip) and port 80

在这种情况下,我看到我尝试连接时,但是当我尝试从另一台计算机连接时 - 连接超时

命令:sudo tcpdump -i enp3s0 dst (my_IP) and port 80

类似情况。

问题

为什么外部与我服务器的连接失败,以及如何修复它?

0 个答案:

没有答案