ฉันมีแอป React ที่พูดคุยกับ Asp.Net core API ทั้งคู่ถูกปรับใช้บน Docker บน VM ของฉัน Nginx ได้รับการติดตั้งและกำหนดค่าเพื่อแก้ไขชื่อโดเมนสำหรับแอป (thesis.uno - สำหรับแอป react, api.thesis.uno - สำหรับ asp.net core api)
ฉันเพิ่มการสนับสนุนการแชทในแอปของฉันโดยใช้ SignalR แต่เมื่อ react พยายามสร้างการเชื่อมต่อ wss ผ่าน api.thesis.uno มันล้มเหลว
เมื่อฉันแทนที่ชื่อโดเมน api ด้วย VM ip และพอร์ต ทุกอย่างดูเหมือนจะทำงานได้อย่างถูกต้อง ซึ่งหมายความว่าปัญหาอยู่ในการกำหนดค่า Nginx
ฉันพยายาม google ปัญหานี้ แต่ดูเหมือนจะไม่มีทางแก้ไขใดที่จะช่วยฉันได้ (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_hash;
เซิร์ฟเวอร์ localhost:5000;
}
เซิร์ฟเวอร์ {
รูท /var/www/thesis.uno/html; # ให้บริการทุกอย่างโดยตรงในโฟลเดอร์สาธารณะของ Rails
ดัชนี index.html index.htm index.nginx-debian.html;
server_name 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 ;
server_name thesis.uno www.thesis.uno;
กลับ 404; # จัดการโดย Certbot
}
เซิร์ฟเวอร์ {
server_name api.thesis.uno www.api.thesis.uno;
#คำขออื่น ๆ ทั้งหมด
ที่ตั้ง / {
proxy_pass http://แบ็กเอนด์;
proxy_set_header โฮสต์ $host;
}
# คำขอแชทบนเว็บซ็อกเก็ต
ตำแหน่ง /api/แชท {
proxy_pass http://แบ็กเอนด์;
proxy_http_version 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;
server_name api.thesis.uno www.api.thesis.uno;
กลับ 404; # จัดการโดย Certbot
}
อัปเดต:
ปรากฎว่า nginx มีไฟล์บันทึก ดูเหมือนว่า nginx ไม่สามารถเปลี่ยนเส้นทางคำขอได้อย่างถูกต้อง ให้ 404 ตามคำขอ