Ubuntu 16.04上的ASP.Net Core给了我Bad Gateway

时间:2017-02-15 08:19:47

标签: asp.net-core .net-core ubuntu-16.04

我遵循了Scott Hanselman撰写的精彩文章http://www.hanselman.com/blog/PublishingAnASPNETCoreWebsiteToACheapLinuxVMHost.aspx

我让主管开始了,但当我浏览我的Digitial Ocean Droplet时,我得到了一个502 Bad Gateway。

有什么想法吗?

anton@ubuntu-512mb-lon1-01:/var/dotnettest$ sudo tail -f /var/log/dotnettest.out.log

现在聆听:http://localhost:5000 申请开始了。按Ctrl + C关闭。 警告:Microsoft.Extensions.DependencyInjection.DataProtectionServices [59]       既没有用户个人资料也没有HKLM注册表。使用临时密钥存储库。应用程序退出时,受保护的数据将不可用。 警告:Microsoft.AspNetCore.DataProtection.Repositories.EphemeralXmlRepository [50]       使用内存存储库。密钥不会持久存储。 托管环境:生产 内容根路径:/ var / dotnettest 现在听取:http://localhost:5000

anton@ubuntu-512mb-lon1-01:/var/dotnettest$ sudo tail -f /var/log/supervisor/supervisord.log

> 2017-02-15 08:11:58,737 INFO waiting for dotnettest to die 2017-02-15
> 08:11:58,782 WARN received SIGTERM indicating exit request 2017-02-15
> 08:11:58,815 INFO stopped: dotnettest (exit status 0) 2017-02-15
> 08:12:09,996 CRIT Supervisor running as root (no user in config file)
> 2017-02-15 08:12:09,996 WARN Included extra file
> "/etc/supervisor/conf.d/dotnettest.conf" during parsing 2017-02-15
> 08:12:10,006 INFO RPC interface 'supervisor' initialized 2017-02-15
> 08:12:10,007 CRIT Server 'unix_http_server' running without any HTTP
> authentication checking 2017-02-15 08:12:10,007 INFO supervisord
> started with pid 13383 2017-02-15 08:12:11,011 INFO spawned:
> 'dotnettest' with pid 13388 2017-02-15 08:12:12,013 INFO success:
> dotnettest entered RUNNING state, process has stayed up for > than 1
> seconds (startsecs)

2 个答案:

答案 0 :(得分:2)

让它工作,希望它可以帮助别人... 4 x Ubuntu图像以后......:)

Bad Gateway是由于Kestrel服务器不在Nginx侦听的同一端口上提供的。

首先关闭,确保在Program.Main中实际添加.UserConfiguration(config)

public static void Main(string[] args)
{
    var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("hosting.json", optional: true)
        .Build();

    var host = new WebHostBuilder()
        .UseKestrel()
        .UseConfiguration(config) //MAKE SURE THIS IS IN
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

还要确保添加了使用Microsoft.Extensions.Configuration; Program.cs的命名空间

然后根据Scott的帖子将您的hosting.js文件添加到路线中。

如果您现在执行dotnet运行,请确保应用程序在您在hosting.js文件中指定的端口上启动,按照Scott的帖子,它将是:5123

发布应用程序并执行主管停止并启动以确保该端口是5123运行此

  

sudo tail -f /var/log/dotnettest.out.log

这必须是端口5123而不是默认的5000,如果它在您发布的目录中缺少hosting.js文件,如果您按照帖子将它/ var / dotnettest

我做的唯一其他非常愚蠢的事情是我在testapp下发布我的应用程序,而主管conf正在寻找dotnettest.dll而不是testapp.dll,它会给你一个可爱的

  

nginx主管由SIGABRT终止;不期望

错误

感谢Scott Hanselman,没有这些家伙会怎样做...... http://www.hanselman.com/blog/PublishingAnASPNETCoreWebsiteToACheapLinuxVMHost.aspx

干杯

答案 1 :(得分:0)

如果Anton的话仍然不起作用,则可能值得检查Startup.Configure()是否在使用app.UseHttpsRedirection();,而hosting.json /参数和Nginx设置尚未为此准备好。

在我的情况下,从一开始我就尝试设置 SSL ,因为我使用的Visual Studio模板默认情况下启用了它(带有Angular的SPA),但是过了一会儿它变得太难了并决定将其留待以后……只是忘了删除该行形式Startup.cs,这导致该应用在失败时反复产生。

通过使用sudo tail -f /var/log/myapp.err.log(或您在主管的配置文件中设置的任何文件名)查看错误日志,我发现了这一点