Tôi có ứng dụng React giao tiếp với API lõi Asp.Net. Cả hai đều được triển khai trên Docker trên máy ảo của tôi. Nginx được cài đặt và định cấu hình để phân giải tên miền cho ứng dụng (thesis.uno - cho ứng dụng phản ứng, api.thesis.uno - cho api lõi asp.net)
Tôi đã thêm hỗ trợ trò chuyện vào ứng dụng của mình bằng SignalR, nhưng khi phản ứng cố gắng thiết lập kết nối wss thông qua api.thesis.uno thì không thành công
Khi tôi thay thế tên miền api bằng VM ip và cổng, mọi thứ dường như hoạt động bình thường, điều đó có nghĩa là sự cố nằm ở cấu hình Nginx.
Tôi đã cố gắng tìm kiếm sự cố này trên google, nhưng dường như không có giải pháp nào giúp tôi (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)
Cấu hình nginx của tôi:
client_max_body_size 64M;
phụ trợ ngược dòng {
# kích hoạt phiên cố định dựa trên IP
ip_hash;
máy chủ cục bộ: 5000;
}
người phục vụ {
gốc /var/www/thesis.uno/html; # Phục vụ trực tiếp mọi thứ trong thư mục chung của Rails
chỉ mục index.html index.htm index.nginx-debian.html;
server_name luận án.uno www.thesis.uno; # được quản lý bởi Certbot
địa điểm / {
proxy_pass http://localhost:5001;
proxy_set_header Máy chủ lưu trữ $host;
}
nghe 443 ssl; # được quản lý bởi Certbot
ssl_certificate /etc/letsencrypt/live/thesis.uno/fullchain.pem; # được quản lý bởi Certbot
ssl_certificate_key /etc/letsencrypt/live/thesis.uno/privkey.pem; # được quản lý bởi Certbot
bao gồm /etc/letsencrypt/options-ssl-nginx.conf; # được quản lý bởi Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # được quản lý bởi Certbot
}
người phục vụ {
nếu ($host = www.thesis.uno) {
trả lại 301 https://$host$request_uri;
} # được quản lý bởi Certbot
nếu ($host = luận án.uno) {
trả lại 301 https://$host$request_uri;
} # được quản lý bởi Certbot
nghe 80 ;
server_name luận án.uno www.thesis.uno;
trả lại 404; # được quản lý bởi Certbot
}
người phục vụ {
server_name api.thesis.uno www.api.thesis.uno;
# tất cả các yêu cầu khác
địa điểm / {
proxy_pass http://phụ trợ;
proxy_set_header Máy chủ lưu trữ $host;
}
# yêu cầu trò chuyện ổ cắm web
vị trí /api/trò chuyện {
proxy_pass http://phụ trợ;
proxy_http_version 1.1;
proxy_set_header Nâng cấp $http_upgrade;
proxy_set_header Kết nối $http_connection;
proxy_set_header Máy chủ lưu trữ $host;
proxy_cache_bypass $http_upgrade;
}
nghe 443 ssl; # được quản lý bởi Certbot
ssl_certificate /etc/letsencrypt/live/api.thesis.uno/fullchain.pem; # được quản lý bởi Certbot
ssl_certificate_key /etc/letsencrypt/live/api.thesis.uno/privkey.pem; # được quản lý bởi Certbot
bao gồm /etc/letsencrypt/options-ssl-nginx.conf; # được quản lý bởi Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # được quản lý bởi Certbot
}
người phục vụ {
nếu ($host = www.api.thesis.uno) {
trả lại 301 https://$host$request_uri;
} # được quản lý bởi Certbot
nếu ($host = api.thesis.uno) {
trả lại 301 https://$host$request_uri;
} # được quản lý bởi Certbot
nghe 80;
server_name api.thesis.uno www.api.thesis.uno;
trả lại 404; # được quản lý bởi Certbot
}
CẬP NHẬT:
Hóa ra nginx có tệp nhật ký, có vẻ như nginx không thể chuyển hướng yêu cầu đúng cách, cung cấp 404 theo yêu cầu