У меня есть приложение React, которое взаимодействует с основным API Asp.Net. Оба они развернуты в Docker на моей виртуальной машине. Nginx установлен и настроен для разрешения доменных имен для приложения (thesis.uno — для приложения реакции, api.thesis.uno — для ядра asp.net API)
Я добавил поддержку чата в свое приложение с помощью SignalR, но когда реакция пытается установить соединение wss через api.thesis.uno, это не удается.
Когда я заменяю доменное имя api на ip и порт виртуальной машины, все работает нормально, а это значит, что проблема в конфигурации Nginx.
Я пытался погуглить эту беду, но никакое решение не помогло мне (https://stackoverflow.com/questions/48300288/signalr-in-asp-net-core-behind-nginx, https://stackoverflow.com/questions/12102110/nginx-to-reverse-proxy-websockets-and-enable-ssl-wss)
Моя конфигурация nginx:
client_max_body_size 64M;
восходящий сервер {
# включить липкую сессию на основе IP
ip_хеш;
локальный хост сервера: 5000;
}
сервер {
корень /var/www/thesis.uno/html; # Напрямую обслуживает что-либо в общей папке Rails
индекс index.html index.htm index.nginx-debian.html;
имя_сервера thesis.uno www.thesis.uno; # под управлением Certbot
место расположения / {
proxy_pass http://localhost:5001;
proxy_set_header Хост $host;
}
слушать 443 ssl; # под управлением Certbot
ssl_certificate /etc/letsencrypt/live/thesis.uno/fullchain.pem; # под управлением Certbot
ssl_certificate_key /etc/letsencrypt/live/thesis.uno/privkey.pem; # под управлением Certbot
включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot
}
сервер {
если ($host = www.thesis.uno) {
вернуть 301 https://$host$request_uri;
} # управляется Certbot
если ($ host = thesis.uno) {
вернуть 301 https://$host$request_uri;
} # управляется Certbot
слушать 80 ;
имя_сервера thesis.uno www.thesis.uno;
вернуть 404; # под управлением Certbot
}
сервер {
имя_сервера api.thesis.uno www.api.thesis.uno;
# все остальные запросы
место расположения / {
прокси_пасс http://бэкэнд;
proxy_set_header Хост $host;
}
# запросы чата через веб-сокет
местоположение /api/чат {
прокси_пасс http://бэкэнд;
прокси_http_версия 1.1;
proxy_set_header Обновить $http_upgrade;
proxy_set_header Соединение $http_connection;
proxy_set_header Хост $host;
proxy_cache_bypass $http_upgrade;
}
слушать 443 ssl; # под управлением Certbot
ssl_certificate /etc/letsencrypt/live/api.thesis.uno/fullchain.pem; # под управлением Certbot
ssl_certificate_key /etc/letsencrypt/live/api.thesis.uno/privkey.pem; # под управлением Certbot
включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot
}
сервер {
если ($host = www.api.thesis.uno) {
вернуть 301 https://$host$request_uri;
} # управляется Certbot
если ($ host = api.thesis.uno) {
вернуть 301 https://$host$request_uri;
} # управляется Certbot
слушать 80;
имя_сервера api.thesis.uno www.api.thesis.uno;
вернуть 404; # под управлением Certbot
}
ОБНОВИТЬ:
Оказалось, что у nginx есть файл журнала, похоже, что nginx не может правильно перенаправить запрос, выдает 404 по запросу.