ฉันมีการตั้งค่าต่อไปนี้เนื่องจากฉันวาง nginx ไว้หน้าบริการแอป Azure สองบริการในภูมิภาคต่างๆ - หากไม่มีสิ่งนี้ (เช่น มีบริการแอปโดยตรงในบล็อกอัพสตรีมของฉัน) ดูเหมือนว่า nginx กำลังเชื่อมต่อกับ Azure ด้วยที่อยู่ IP แทนที่จะเป็น ชื่อโฮสต์เพื่อให้ตัวจัดสรรภาระงาน Azure ไม่ทราบว่าจะกำหนดเส้นทางคำขอไปที่ใด หรือไม่ได้ตั้งค่าส่วนหัวของโฮสต์เป็นค่าที่ถูกต้อง
แต่ตอนนี้ฉันมีปัญหาที่บล็อกอัปสตรีมของฉันจะไม่ล้มเหลวหากเซิร์ฟเวอร์ในบล็อกเซิร์ฟเวอร์ที่เกี่ยวข้องหยุดทำงานเนื่องจากกำลังเชื่อมต่อกับบล็อกเซิร์ฟเวอร์โฮสต์ในพื้นที่
ฉันได้ลองใช้ตัวเลือก proxy_next_upstream แล้ว แต่ดูเหมือนจะไม่ทำในสิ่งที่ฉันต้องการ
ฉันสามารถบรรลุสิ่งที่ต้องการได้หรือไม่ บางทีการตั้งค่าอัปสตรีมของฉันที่ชี้ไปที่ localapps อาจเป็นปัญหาจริง แต่ฉันไม่สามารถหาวิธีให้ nginx เล่นบอลกับบริการแอพอย่างอื่นได้
อัพสตรีม localapps {
เซิร์ฟเวอร์ localhost:8001;
เซิร์ฟเวอร์ localhost:8002;
}
เซิร์ฟเวอร์ {
ที่ตั้ง / {
proxy_pass http://localapps;
ข้อผิดพลาด proxy_next_upstream หมดเวลา http_403;
proxy_next_upstream_timeout 5m;
proxy_next_upstream_tries 20;
proxy_connect_timeout 2;
}
ฟัง 443 ssl; # จัดการโดย Certbot
ssl_certificate <เส้นทาง>/fullchain.pem; # จัดการโดย Certbot
ssl_certificate_key <เส้นทาง>/privkey.pem; # จัดการโดย Certbot
รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot
}
เซิร์ฟเวอร์ {
ฟัง 8001;
server_name web01;
ที่ตั้ง / {
proxy_set_header โฮสต์ app1.azurewebsites.net;
proxy_pass https://app1.azurewebsites.net;
proxy_cookie_domain app1.azurewebsites.net mycustomdomain.com;
proxy_ssl_certificate <เส้นทาง>/fullchain.pem;
proxy_ssl_certificate_key <เส้นทาง>/privkey.pem;
เปิด proxy_ssl_session_reuse;
}
}
เซิร์ฟเวอร์ {
ฟัง 8002;
server_name web02;
ที่ตั้ง / {
proxy_set_header โฮสต์ app2.azurewebsites.net;
proxy_pass https://app2.azurewebsites.net;
proxy_cookie_domain app1.azurewebsites.net mycustomdomain.com;
proxy_ssl_certificate <เส้นทาง>/fullchain.pem;
proxy_ssl_certificate_key <เส้นทาง>/privkey.pem;
เปิด proxy_ssl_session_reuse;
}
}
เซิร์ฟเวอร์ {
ถ้า ($host = myvm.westeurope.cloudapp.azure.com) {
ส่งคืน 301 https://$host$request_uri;
} # จัดการโดย Certbot
server_name myvm.westeurope.cloudapp.azure.com;
ฟัง 80;
กลับ 404; # จัดการโดย Certbot
}