ฉันกำลังพยายามตั้งค่า reverse proxy ไปยังเซิร์ฟเวอร์ api ของฉัน แต่ได้รับหน้าข้อผิดพลาด 404
บริบท:
ในขณะที่ตั้งค่าแอปพลิเคชัน react.js และพยายามค้นหาวิธีแก้ไขปัญหา CORS ฉันได้ตัดสินใจใช้ reverse proxy (proxy pass) กับ nginx เพื่อเรียกใช้เซิร์ฟเวอร์ api ภายในและหลอกเบราว์เซอร์ให้คิดว่า api อยู่บน โดเมนเดียวกัน
นี่คือการตั้งค่าที่ตั้งใจไว้ของฉัน:
https://example.com ชี้ไปที่ไดเร็กทอรีของเว็บไซต์
https://example.com/api เรียก api url ที่ฟังเป็นการภายใน http://127.0.0.1:1234 ผ่าน nginx reverse proxy
ฉันใช้ hestia cp ซึ่งมี nginx อยู่หน้า apache เป็น reverse proxy
ปัญหา
ถ้าฉันใช้ lynx เพื่อโทรโดยตรง http://127.0.0.1:1234ฉันได้รับการตอบกลับที่ถูกต้องจากเซิร์ฟเวอร์ API ของฉัน
อย่างไรก็ตาม เมื่อใช้ผ่านพรอกซีบน url https://example.com/apiฉันได้รับหน้าข้อผิดพลาด 404
ไฟล์ปรับแต่ง Nginx
นี่คือการตั้งค่า nginx.ssl.conf ของฉันสำหรับ example.com
ตำแหน่ง /api/ {
proxy_pass http://127.0.0.1:1234;
access_log /var/log/apache2/domains/example.com-api.log กำหนดเอง;
access_log /var/log/apache2/domains/example.com-api.bytes ไบต์;
}
นี่คือการตั้งค่า nginx.conf ของฉันสำหรับโดเมน api.com ของฉัน, กำลังฟัง 127.0.0.1, พอร์ต 1234
เซิร์ฟเวอร์ {
ฟัง 127.0.0.1:1234;
server_name 127.0.0.1;
ที่ตั้ง / {
proxy_pass http://10.0.10.55:8080;
ตำแหน่ง ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|tiff|css|js|htm|html|ttf|otf|webp|woff|txt|csv|rtf|doc |docx|xls|xlsx|ppt|pptx|odf|odp|ods|odt|pdf|psd|ai|eot|eps|ps|zip|tar|tgz|gz|rar|bz2|7z|aac|m4a|mp3 |mp4|ogg|wav|wma|3gp|avi|flv|m4v|mkv|mov|mpeg|mpg|wmv|exe|iso|dmg|swf)$ {
รูท /home/user/web/api.com/public_html;
access_log /var/log/apache2/domains/api.com.log รวมกัน;
access_log /var/log/apache2/domains/api.com.bytes ไบต์;
หมดอายุสูงสุด
try_files $uri @ฟอลแบ็ค;
}
} ตำแหน่ง /ข้อผิดพลาด/ {
นามแฝง /home/user/web/api.com/document_errors/;
}
ตำแหน่ง @ฟอลแบ็ค {
proxy_pass http://10.0.10.55:8080;
}
ตำแหน่ง ~ /\.ht {กลับ 404;}
ตำแหน่ง ~ /\.svn/ {กลับ 404;}
ตำแหน่ง ~ /\.git/ {กลับ 404;}
ตำแหน่ง ~ /\.hg/ {กลับ 404;}
ตำแหน่ง ~ /\.bzr/ {กลับ 404;} }
มีคนช่วยฉันดีบักหรือแก้ไขปัญหานี้ได้ไหม
ไม่เห็นอะไรโดดเด่นในบันทึก แต่อาจไม่รู้ว่าต้องค้นหาอะไร
ดูเหมือนว่าการโทรผ่าน nginx proxy pass ไม่ถึง apache
ฉันได้อ่านแล้วว่า lynx เรียก apache โดยตรง ถ้าฉันข้าม nginx ถ้าฉันใช้ 127.0.0.1:1234 url/port รวมกัน
ขอบคุณมากล่วงหน้า