ฉันมีเซิร์ฟเวอร์หลายเครื่องที่ทำงานในเครื่องเดียวกันบางเครื่องมี http เท่านั้นบางเครื่องมีทั้ง http และ https มีบล็อกเซิร์ฟเวอร์จำนวนมากที่กำหนดไว้ในไฟล์แยกต่างหากซึ่งรวมอยู่ในไฟล์กำหนดค่าหลัก
ฉันได้ตั้งค่าเซิร์ฟเวอร์ "เริ่มต้น" สำหรับ http ซึ่งจะให้บริการ "หน้าการบำรุงรักษา" ทั่วไปกับคำขอที่ไม่ตรงกับชื่อ server_name อื่น ๆ ในไฟล์ config อื่น ๆ http เซิร์ฟเวอร์เริ่มต้นทำงานตามที่คาดไว้จะใช้ server_name "_" และปรากฏเป็นครั้งแรกในรายการรวม (เพราะฉันสังเกตว่าในกรณีของซ้ำ server_name ข้ามเซิร์ฟเวอร์หนึ่งที่ปรากฏก่อนใช้) มันใช้งานได้ดี
ฉันคาดหวังว่าบล็อกเซิร์ฟเวอร์ที่แน่นอนเหมือนกัน (เฉพาะการสลับ "Listen 80 default_server" เป็น "Listen 443 default_server" และแทนการแสดงหน้า "return 444") อย่างไรก็ตามมันไม่ได้ แต่ดูเหมือนว่าเซิร์ฟเวอร์ https เริ่มต้นใหม่จะดึงการเชื่อมต่อ https ขาเข้าทั้งหมดและทำให้พวกเขาล้มเหลวแม้ว่าบล็อกเซิร์ฟเวอร์อื่นจะมี server_names ที่เหมาะสมกว่าสำหรับคำขอขาเข้า การลบเซิร์ฟเวอร์ https เริ่มต้นใหม่จะทำให้การทำงานแบบกึ่งถูกต้องกลับมาทำงานต่อ: เว็บไซต์ที่มี https จะโหลดได้อย่างถูกต้อง แต่เว็บไซต์ที่ไม่มี https จะถูกส่งไปยังเซิร์ฟเวอร์ https แรกในไฟล์รวม (ซึ่งตามเอกสารหากไม่มี "default_server" ปรากฏขึ้นบล็อกเซิร์ฟเวอร์แรกที่ปรากฏจะเป็น "ค่าเริ่มต้น")
ดังนั้นคำถามของฉันคือวิธีที่ถูกต้องในการกำหนด "เซิร์ฟเวอร์เริ่มต้น" ใน nginx สำหรับการเชื่อมต่อ ssl คืออะไร? ทำไมเมื่อฉันตั้ง "default_server" อย่างชัดเจนจะได้รับโลภและคว้าการเชื่อมต่อทั้งหมดในขณะที่เมื่อฉันให้ nginx ตัดสินใจ "เซิร์ฟเวอร์เริ่มต้น" โดยปริยายมันทำงานเหมือนที่ฉันคาดหวัง (ด้วยเซิร์ฟเวอร์ที่ไม่ถูกต้องตั้งเป็นค่าเริ่มต้นและเซิร์ฟเวอร์จริงอื่น ๆ ประพฤติอย่างถูกต้อง)?
นี่คือ "เซิร์ฟเวอร์เริ่มต้น" ของฉัน http ทำงานโดยไม่ทำลายเซิร์ฟเวอร์อื่น ๆ Https แบ่งเซิร์ฟเวอร์อื่น ๆ และใช้ทั้งหมด
server {
listen 443 ssl default_server;
server_name _;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
return 444;
}
server {
listen *:80 default_server;
server_name _;
charset utf-8;
access_log /var/log/nginx/maintenance.access.log;
error_log /var/log/nginx/maintenance.error.log error;
root /home/path/to/templates;
location / {
return 503;
}
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /maintenance.html break;
}
}
มีใครเห็นบ้างไหมว่ามีอะไรผิดปกติที่นี่?