NGINX Newbie ที่นี่ ฉันกำลังพยายามกำหนดค่าสิ่งที่ฉันพบว่าเป็นงานที่ท้าทายเล็กน้อย ฉันต้องการโครงสร้างต่อไปนี้:
www.example.com -- เว็บไซต์สำหรับบริษัท สำหรับตอนนี้ทั้งคู่ www.example.com และ example.com ต้องเปลี่ยนเส้นทางไปที่ project.example.com
project.example.com เว็บไซต์สำหรับโครงการ
project.example.com/app1 -- แอป 1 สำหรับโครงการ
project.example.com/app2 -- แอป 2 สำหรับโครงการ
api.example.com -- API สำหรับโครงการที่ฟังพอร์ต 3001 ฉันต้องการเส้นทางเช่น: www.api.example.com หรือ api.example.com เพื่อเปลี่ยนเส้นทางโดยอัตโนมัติ https://api.example.com.
หมายเหตุ: ฉันกำลังพยายามเปลี่ยนเส้นทางบล็อกทั้งหมดไปที่ https
ฉันได้ลองสิ่งต่อไปนี้แล้วและมีตัวแปรมากมายที่นี่:
เซิร์ฟเวอร์ {
ฟัง 80;
ฟัง [::]:80;
server_name example.com www.example.com;
ส่งคืน 302 https://project.$server_name$request_uri;
}
# API เปลี่ยนเส้นทางไปยัง SSL
เซิร์ฟเวอร์ {
ฟัง 80;
ฟัง [::]:80;
server_name api.example.com www.api.example.com;
ส่งคืน 302 https://api.example.com$request_uri;
}
เซิร์ฟเวอร์ {
ฟัง 443 ssl http2;
ฟัง [::]:443 ssl http2;
server_name www.api.example.com;
ส่งคืน 302 https://api.example.com$request_uri;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
เปิด ssl_verify_client;
}
เซิร์ฟเวอร์ {
ฟัง 443 ssl http2;
ฟัง [::]:443 ssl http2;
server_name example.com www.example.com;
รูท /var/www/html/example-website;
ดัชนี index.html index.htm index.nginx-debian.html;
ส่งคืน 302 https://project.$server_name$request_uri;
# การกำหนดค่า SSL
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
เปิด ssl_verify_client;
ที่ตั้ง / {
try_files $uri $uri/ =404;
}
}
เซิร์ฟเวอร์ {
ฟัง 443 ssl http2;
ฟัง [::]:443 ssl http2;
server_name project.example.com www.project.example.com;
รูท /var/www/html/project-website;
ดัชนี index.html index.htm index.nginx-debian.html;
# การกำหนดค่า SSL
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
เปิด ssl_verify_client;
ที่ตั้ง / {
try_files $uri $uri/ =404;
}
ตำแหน่ง /app1 {
นามแฝง /var/www/html/project-app1;
try_files $uri /project-app1/index.html;
}
ตำแหน่ง /app2 {
นามแฝง /var/www/html/project-app2;
try_files $uri /project-app2/index.html;
}
}
เซิร์ฟเวอร์ {
ฟัง 443 ssl http2;
ฟัง [::]:443 ssl http2;
server_name api.example.com www.api.example.com;
ตัวแก้ไข 127.0.0.1;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
เปิด ssl_verify_client;
ที่ตั้ง / {
เขียนใหม่ ^/api/?(.*) /$1 ตัวแบ่ง;
proxy_pass https://127.0.0.1:3001; #เซิร์ฟเวอร์ API
ปิด proxy_redirect;
proxy_set_header โฮสต์ $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
ฉันค่อนข้างใหม่กับ NGINX ดังนั้นฉันจึงไม่แน่ใจว่าสิ่งที่ฉันทำไปนั้นโอเคหรือใกล้เคียงกับสิ่งที่คนส่วนใหญ่ถือว่าเป็นแนวทางปฏิบัติที่ดีจากระยะไกล
สิ่งที่ฉันประสบความสำเร็จ:
- www.example.com และ example.com เปลี่ยนเส้นทางไปยังเว็บไซต์ project.example.com ตามค่าเริ่มต้น
- และ... ฉันเคยมี app1 และ app2 ที่เกี่ยวข้องกัน แต่ฉันไม่รู้ว่าฉันทำอะไรผิดพลาดไปจนใช้งานไม่ได้อีกต่อไป :(
อย่างไรก็ตาม สิ่งที่ต้องพูดถึงเพิ่มเติม:
- สภาพแวดล้อม: อินสแตนซ์ AWS EC2
- ใบรับรองและ DNS: Cloudflare
รูปภาพของ DNS ที่ประกาศและพร็อกซีผ่าน Cloudflare
- แอพ: นี่คือแอพเชิงมุมและฉันมีปัญหาเกี่ยวกับเส้นทางลูกเช่น:
- project.example.com/app1 -- สามารถเข้าถึงได้ (ในบางจุด ไม่อีกต่อไป)
- project.example.com/app1/home -- จะค้นหา 404 ไม่พบ เท่าที่ฉันรู้ฉันสามารถแก้ไขปัญหาดังกล่าวบนเซิร์ฟเวอร์ Apache ได้เมื่อไม่นานมานี้ ดังนั้นฉันเดาว่าฉันสามารถแก้ไขปัญหาที่คล้ายกันกับกรณีนี้สำหรับ NGINX ได้
- api.example.com -- อันนี้ไม่ถูกเปลี่ยนเส้นทางด้วยซ้ำ www.api.example.comและฉันไม่สามารถเชื่อมต่อกับ API ผ่านจุดสิ้นสุดได้โดยตรง โยน 502 ในกรณีที่ดีที่สุด
ขออภัยสำหรับการโพสต์ที่ยาวเช่นนี้ แต่ต้องการให้ชัดเจนที่สุดเท่าที่จะเป็นไปได้ และขอบคุณมากสำหรับความช่วยเหลือเพิ่มเติมที่คุณสามารถให้ฉันเพื่อให้บรรลุประเด็นเหล่านี้ ขอขอบคุณจริงๆ