Am aplicația React care vorbește cu API-ul de bază Asp.Net. Ambele sunt implementate pe Docker pe VM-ul meu. Nginx este instalat și configurat pentru a rezolva numele de domenii pentru aplicație (thesis.uno - pentru aplicația react, api.thesis.uno - pentru api de bază asp.net)
Am adăugat suport pentru chat la aplicația mea folosind SignalR, dar când react încearcă să stabilească o conexiune wss prin api.thesis.uno, nu reușește
Când înlocuiesc numele de domeniu api cu ip și portul VM, totul pare să funcționeze corect, ceea ce înseamnă că problema este în configurația Nginx.
Am încercat să caut pe Google această problemă, dar nicio soluție nu părea să mă ajute (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)
Configurația mea nginx:
client_max_body_size 64M;
backend în amonte {
# activați sesiunea sticky bazată pe IP
ip_hash;
server localhost:5000;
}
Server {
root /var/www/thesis.uno/html; # Servește direct orice în folderul public Rails
index index.html index.htm index.nginx-debian.html;
nume_server thesis.uno www.thesis.uno; # gestionat de Certbot
Locație / {
proxy_pass http://localhost:5001;
proxy_set_header Gazdă $gazdă;
}
asculta 443 ssl; # gestionat de Certbot
ssl_certificate /etc/letsencrypt/live/thesis.uno/fullchain.pem; # gestionat de Certbot
ssl_certificate_key /etc/letsencrypt/live/thesis.uno/privkey.pem; # gestionat de Certbot
includ /etc/letsencrypt/options-ssl-nginx.conf; # gestionat de Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # gestionat de Certbot
}
Server {
dacă ($gazdă = www.thesis.uno) {
returnează 301 https://$host$request_uri;
} # gestionat de Certbot
if ($gazdă = teză.uno) {
returnează 301 https://$host$request_uri;
} # gestionat de Certbot
asculta 80 ;
nume_server thesis.uno www.thesis.uno;
întoarce 404; # gestionat de Certbot
}
Server {
nume_server api.thesis.uno www.api.thesis.uno;
# toate celelalte solicitări
Locație / {
proxy_pass http://backend;
proxy_set_header Gazdă $gazdă;
}
# solicitări de chat cu socket web
locație /api/chat {
proxy_pass http://backend;
proxy_http_versiunea 1.1;
proxy_set_header Actualizare $http_upgrade;
proxy_set_header Conexiune $http_connection;
proxy_set_header Gazdă $gazdă;
proxy_cache_bypass $http_upgrade;
}
asculta 443 ssl; # gestionat de Certbot
ssl_certificate /etc/letsencrypt/live/api.thesis.uno/fullchain.pem; # gestionat de Certbot
ssl_certificate_key /etc/letsencrypt/live/api.thesis.uno/privkey.pem; # gestionat de Certbot
includ /etc/letsencrypt/options-ssl-nginx.conf; # gestionat de Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # gestionat de Certbot
}
Server {
dacă ($gazdă = www.api.thesis.uno) {
returnează 301 https://$host$request_uri;
} # gestionat de Certbot
if ($gazdă = api.thesis.uno) {
returnează 301 https://$host$request_uri;
} # gestionat de Certbot
asculta 80;
nume_server api.thesis.uno www.api.thesis.uno;
întoarce 404; # gestionat de Certbot
}
ACTUALIZAȚI:
S-a dovedit că nginx are un fișier jurnal, se pare că nginx nu poate redirecționa corect cererea, dă 404 la cerere