ฉันกำลังทำตามบทช่วยสอนเพื่อตั้งค่าพร็อกซี API ฉันใช้งานแอปเซิร์ฟเวอร์การผลิตและการพัฒนาบน VPS เดียวกัน
https://www.nginx.com/blog/deploying-nginx-plus-as-an-api-gateway-part-1/
ฉันจัดการโดเมนด้วย SSL ผ่าน certbot ทั้งสองโดเมน live.domain.com
และ dev.domain.com
ฉันติดอยู่ที่ "การกำหนด Warehouse API"
ปัญหาคือการกำหนดเส้นทางที่อธิบายนั้นอิงตามตำแหน่งเส้นทาง URL แต่ไม่ได้อธิบายวิธีจัดการโดเมนย่อยที่ตั้งค่าไว้ด้านบน
ฉันมีการตั้งค่า:
api_gateway
รวมถึง api_backends.conf;
รวมถึง api_keys.conf;
เซิร์ฟเวอร์ {
access_log /var/log/nginx/api_live.log หลัก; # แต่ละ API อาจเข้าสู่ระบบ
#แยกไฟล์
ฟัง 443 ssl;
server_name live.domain.com;
#การกำหนดค่า TLS
ssl_certificate /etc/letsencrypt/live/live.domain.com/fullchain.pem; # จัดการโดย Certbot
ssl_certificate_key /etc/letsencrypt/live/live.domain.com/privkey.pem; # จัดการโดย Certbot
รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot
ssl_session_cache ที่ใช้ร่วมกัน: SSL:10m;
ssl_session_timeout 5 นาที;
ssl_ciphers สูง:!aNULL:!MD5;
ssl_protocols TLSv1.2 TLSv1.3;
# คำจำกัดความของ API หนึ่งรายการต่อไฟล์
รวม api_conf.d/*.conf;
#ตอบผิด
error_page 404 = @400; # ถือว่าเส้นทางที่ไม่ถูกต้องเป็นคำขอที่ไม่ถูกต้อง
เปิด proxy_intercept_errors; # อย่าส่งข้อผิดพลาดส่วนหลังไปยังลูกค้า
รวมถึง api_json_errors.conf; # ข้อผิดพลาด JSON ที่เป็นมิตรกับไคลเอ็นต์ API
แอปพลิเคชัน default_type/json; # หากไม่มีประเภทเนื้อหา ให้ถือว่า JSON
}
# *ซ้ำสำหรับ dev.domain.com*
api_backends
ต้นน้ำสด {
โซน live_service 64k;
เซิฟเวอร์ 127.0.0.1:4000
}
ผู้พัฒนาต้นน้ำ {
โซน dev_service 64k;
เซิฟเวอร์ 127.0.0.1:2000
}
ฉันจะจัดการด้วยวิธีใดต่อไปนี้:
ที่ตั้ง / {
# การกำหนดค่านโยบายที่นี่ (การรับรองความถูกต้อง การจำกัดอัตรา การบันทึก...)
#
access_log /var/log/nginx/warehouse_api.log หลัก;
# การกำหนดเส้นทาง URI
#
# ถ้าโดเมนย่อยอยู่
ที่ตั้ง / {
proxy_pass http://สด;
}
# อื่นถ้าโดเมนย่อย dev
ที่ตั้ง / {
proxy_pass http://dev;
}
กลับ 404; #จับทั้งหมด
}
บางทีฉันสามารถใช้ตัวอย่างนี้ที่ฉันพบได้
ถ้า ($host = live.domain.com) {
ส่งคืน 301 https://$host$request_uri;
} # จัดการโดย Certbot
เป็นไปได้ไหม
ถ้า ($host = live.domain.com){
ที่ตั้ง /api {
proxy_pass http://live/api;
}
# และ/หรือ
ตำแหน่ง /docs/ {
proxy_pass https://live$request_uri
}
}