SignalR позади Nginx - получение ответа 200 вместо обновления websocket - PullRequest
0 голосов
/ 10 января 2019

Я перемещаю приложение ASP.NET Core из Windows Server в Ubuntu с Nginx v1.15.5, и я изо всех сил пытался заставить работать SignalR. Соединение websocket продолжает получать код возврата 200 вместо обновления. Все остальные аспекты приложения работают.

Все отлично работает в Windows с IIS, IIS Express и локальным сервером разработки Kestrel, так что я предполагаю, что мне чего-то не хватает в конфигурации прокси Nginx.

Я перепробовал все, что перечислено в разделе ниже. Ниже приведено текущее состояние (запуск и конфигурация Nginx моего сайта). Все журналы выглядят так, как указано ниже.

Сайт является общедоступным, поэтому вы можете протестировать его с помощью инструментов разработчика, чтобы просмотреть запросы / ответы.

Site: https://my.doxm.app/
Login ID: fix@me.please
Password: P@ssword1

Соединение SignalR начинается сразу после входа в систему.

Любая помощь будет оценена.

In Startup.cs

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, DataService dataService)
    {
        DataService = dataService;
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
            //app.UseHttpsRedirection();
        }

        ConfigureStaticFiles(app);

        app.UseCookiePolicy();

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

        app.UseAuthentication();

        app.UseSignalR(routes =>
        {
            routes.MapHub<BrowserSocketHub>("/BrowserHub", options => 
            {
                options.ApplicationMaxBufferSize = 500000;
                options.TransportMaxBufferSize = 500000;
            });
            routes.MapHub<DeviceSocketHub>("/DeviceHub", options =>
            {
                options.ApplicationMaxBufferSize = 500000;
                options.TransportMaxBufferSize = 500000;
            });
            routes.MapHub<RCDeviceSocketHub>("/RCDeviceHub");
            routes.MapHub<RCBrowserSocketHub>("/RCBrowserHub");
        });
        app.UseMvcWithDefaultRoute();
        dataService.SetAllMachinesNotOnline();
        dataService.CleanupEmptyOrganizations();
        dataService.CleanupOldRecords();
    }

Конфигурация сайта Nginx

server {
    listen        80;
    server_name   my.doxm.app *.my.doxm.app;
    location / {
            proxy_pass          http://localhost:5000;
            include             /etc/nginx/proxy_params;
            proxy_http_version  1.1;
            proxy_set_header    Upgrade $http_upgrade;
            proxy_set_header    Connection keep-alive;
            proxy_cache_bypass  $http_upgrade;
        }

    location /BrowserHub {
            proxy_pass          http://localhost:5000;
            include             /etc/nginx/proxy_params;
            proxy_http_version  1.1;
            proxy_set_header    Upgrade $http_upgrade;
            proxy_set_header    Connection "upgrade";
            proxy_cache_bypass  $http_upgrade;
        }


        # Other locations will go here once I get the above one working.

        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/my.doxm.app/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/my.doxm.app/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

Содержимое / etc / nginx / proxy_params

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

Ссылки:

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.2

SignalR в ASP.NET Core за Nginx

https://kimsereyblog.blogspot.com/2018/07/signalr-with-asp-net-core.html

Asp.Net Core 2 SignalR Ubuntu Xamarin Android

https://www.nginx.com/blog/websocket-nginx/

http://nginx.org/en/docs/http/websocket.html

Журналы

2019/01/09 14:05:24 [alert] 24344#24344: *74 open socket #3 left in connection 5
2019/01/09 14:05:24 [alert] 24344#24344: *79 open socket #13 left in connection 8
2019/01/09 14:05:24 [alert] 24344#24344: aborting
2019/01/09 14:11:20 [alert] 24395#24395: *200 open socket #13 left in connection 4
2019/01/09 14:11:20 [alert] 24395#24395: *195 open socket #3 left in connection 15
2019/01/09 14:11:20 [alert] 24395#24395: aborting
2019/01/09 14:26:12 [alert] 24845#24845: *1 open socket #3 left in connection 3
2019/01/09 14:26:12 [alert] 24845#24845: *6 open socket #13 left in connection 4
2019/01/09 14:26:12 [alert] 24845#24845: aborting
2019/01/09 14:36:49 [alert] 25082#25082: *19 open socket #3 left in connection 3
2019/01/09 14:36:49 [alert] 25082#25082: *24 open socket #13 left in connection 4
2019/01/09 14:36:49 [alert] 25082#25082: aborting
2019/01/09 14:48:06 [alert] 26806#26806: *62 open socket #13 left in connection 3
2019/01/09 14:48:06 [alert] 26806#26806: *57 open socket #3 left in connection 4
2019/01/09 14:48:06 [alert] 26806#26806: aborting
2019/01/09 14:49:12 [alert] 26933#26933: *1 open socket #3 left in connection 3
2019/01/09 14:49:12 [alert] 26933#26933: *5 open socket #14 left in connection 5
2019/01/09 14:49:12 [alert] 26933#26933: aborting

1 Ответ

0 голосов
/ 10 января 2019

Проблема оказалась не связанной с Nginx. Произошло несоответствие версии DLL для System.Net.WebSockets.WebSocketProtocol.dll. WinSCP явно не перезаписывал его при развертывании. Я бы ожидал ответ об ошибке от этого, но он все еще отправлял обратно 200 после исключения.

...