ฉันมีเว็บเซิร์ฟเวอร์ที่มีเซิร์ฟเวอร์เสมือนมากมาย หนึ่งในนั้นคือ SSL ปัญหาคือเนื่องจากไม่มีเซิร์ฟเวอร์ catchall ที่คอยรับฟัง SSL คำขอ https ไปยังเว็บไซต์อื่น ๆ จะถูกส่งโดย 1 SSL block
การกำหนดค่าของฉันเป็นหลักดูเหมือนว่านี้:
# the catch all
server {
listen 80 default;
# I could add this, but since I have no default cert, I cannot enable SSL,
# and this listen ends up doing nothing (apparently).
# listen 443;
server_name _;
# ...
}
# some server
server {
listen 80;
server_name server1.com;
# ...
}
# some other server ...
server {
listen 80;
server_name server2.com;
# ...
}
# ... and it's https equivalent
server {
listen 443;
ssl on;
server_name server2.com;
# ...
}
ในขณะนี้เนื่องจากไม่มีผู้ฟังเริ่มต้นสำหรับ 443 คำขอเช่นhttps://server1.com
นั้นจะถูกแสดงผลโดยserver2.com
บล็อค https นี่เป็นไปตามตรรกะสำหรับserver_name
ในเอกสาร
หากไม่มีการจับคู่เซิร์ฟเวอร์ {... } บล็อกในไฟล์การกำหนดค่าจะถูกใช้ตามลำดับต่อไปนี้:
- บล็อกเซิร์ฟเวอร์ที่มีคำสั่งฟังตรงที่ทำเครื่องหมายเป็น [เริ่มต้น | default_server]
- บล็อกเซิร์ฟเวอร์แรกที่มีคำสั่ง Listen ที่ตรงกัน (หรือนัย Listen 80;)
ทางออกที่ดีที่สุดสำหรับปัญหานี้คืออะไร? ฉันจำเป็นต้องตั้งค่าตัวแทนจำลองสำหรับการจับบล็อกเซิร์ฟเวอร์ทั้งหมดเพื่อให้ฉันสามารถฟัง 443 และจัดการคำขอที่ไม่ดีได้หรือไม่ มีพารามิเตอร์ที่ฉันไม่รู้ของกองกำลังที่ตรงกับชื่อโฮสต์ที่แน่นอนด้วยserver
?