Score:0

nginx ไม่เคารพค่า server_name

ธง in
เซิร์ฟเวอร์{
    ..
    server_name some_other_domain_name.com;
    ..
}

ฉันได้จับคู่ชื่อโดเมนของฉันกับ IP สาธารณะของ VM ผ่าน godaddy

เมื่อฉันป้อนชื่อโดเมนในเบราว์เซอร์ ก็จะสามารถเข้าถึงเว็บไซต์ที่โฮสต์บน VM (ผ่าน nginx) อย่างไรก็ตาม ฉันคาดว่าคำขอจะไม่ได้รับอนุญาตจาก nginx เนื่องจากคุณสมบัติ server_name ถูกตั้งค่าเป็น some_other_domain_name.com

nginx ไม่ตรวจสอบคุณสมบัติ server_name หรือไม่

Richard Smith avatar
jp flag
ดู[วิธีที่ Nginx ประมวลผลคำขอ](http://nginx.org/en/docs/http/request_processing.html)
in flag
ดังนั้น server_name จะใช้เฉพาะเมื่อมีการขัดแย้งกับ IP:port รวมกัน?
us flag
`server_name` จะถูกใช้เสมอ ปัญหาน่าจะเกิดจากการบล็อกเซิร์ฟเวอร์เริ่มต้นของคุณตามที่อธิบายไว้ด้านล่าง
Score:1
ธง br

มีคำอธิบายที่ดีเกี่ยวกับวิธีที่ nginx เลือกเซิร์ฟเวอร์และบล็อกตำแหน่งเพื่อดำเนินการตามคำขอใน Digital Ocean ทำความเข้าใจกับเซิร์ฟเวอร์ Nginx และอัลกอริทึมการเลือกบล็อกตำแหน่ง.

กล่าวโดยย่อ nginx เลือกการจับคู่ที่ดีที่สุดก่อน ฟัง คำสั่ง และการตรวจสอบ ชื่อเซิร์ฟเวอร์ เฉพาะในกรณีที่มีการแข่งขันมากกว่านั้น ในกรณีนั้นหากไม่มี ชื่อเซิร์ฟเวอร์ จับคู่แล้วมันจะเลือก ค่าเริ่มต้น บล็อก. บล็อกเริ่มต้นถูกประกาศเป็น default_server ใน ฟัง คำสั่งหรือคำสั่งแรก

in flag
หากเซิร์ฟเวอร์บล็อกเฉพาะฟัง 443 (ตัวอย่าง) และนี่คือบล็อกเซิร์ฟเวอร์เดียว หมายความว่าคำขอใดๆ บนพอร์ต 80 จะไม่ได้รับการบริการใช่หรือไม่ หรือจะบล็อกนี้เป็นค่าเริ่มต้นสำหรับพอร์ต 80 ด้วยหรือไม่
br flag
หากเซิร์ฟเวอร์บล็อกฟังเฉพาะพอร์ต 443 เซิร์ฟเวอร์จะไม่ตรงกันในขั้นตอนแรก และจะไม่ถูกพิจารณาว่าเป็นตัวเลือกในการให้บริการคำขอไปยังพอร์ต 80
in flag
แต่เมื่อไม่พบบล็อกเซิร์ฟเวอร์ที่ตรงกัน ก็จะไม่ใช้บล็อกเซิร์ฟเวอร์ที่ 1 โดยไม่คำนึงว่าบล็อกเซิร์ฟเวอร์ที่ 1 จะฟังอะไร
br flag
@ตัวแปร ไม่ อีกครั้ง nginx เลือกบล็อกเริ่มต้นเฉพาะในบล็อกที่มี *best* ตรงกับคำสั่ง `listen` คุณได้ดูที่บทความ?
in flag
ใช่เพื่อน แต่ฉันไม่เข้าใจประเด็นนั้นในหัวของฉัน
Score:0
ธง us

คุณไม่ได้แชร์การกำหนดค่า nginx แบบเต็ม ดังนั้นนี่คือการเดาว่าสิ่งใดขาดหายไปในการกำหนดค่า

nginx ให้บริการบางอย่างสำหรับทุกคำขอเสมอ ถ้าไม่มี เซิร์ฟเวอร์ บล็อกที่มีการจับคู่ ชื่อเซิร์ฟเวอร์ สำหรับคำขอ nginx ใช้ค่าเริ่มต้น เซิร์ฟเวอร์ บล็อก.

ค่าเริ่มต้น เซิร์ฟเวอร์ บล็อกสามารถบล็อกที่ ฟัง มีคำสั่ง default_server ตัวดัดแปลง

หากไม่มีบล็อกดังกล่าวอยู่ บล็อกแรก เซิร์ฟเวอร์ บล็อกเป็นค่าเริ่มต้น

ในกรณีของคุณ ฉันคิดว่าคุณต้องตั้งค่าบล็อกเซิร์ฟเวอร์เริ่มต้นดังนี้:

เซิร์ฟเวอร์ {
    ฟัง 80 default_server;
    กลับ 444; #ตัดการเชื่อมต่อ สามารถเป็น 404 ได้หากคุณต้องการส่งคืน HTTP 404 ที่ไม่พบ
}
in flag
`หากไม่มีบล็อกดังกล่าวอยู่ บล็อกเซิร์ฟเวอร์แรกจะเป็นค่าเริ่มต้น' - แต่ถ้าบล็อกเซิร์ฟเวอร์แรกฟังเฉพาะ 443 (ตัวอย่าง) หมายความว่าคำขอใดๆ บนพอร์ต 80 จะไม่ได้รับการบริการใช่หรือไม่
us flag
ฉันไม่รู้ เนื่องจากกรณีการใช้งานทั้งหมดของฉันต้องการฟังทั้งพอร์ต 80 และ 443
br flag
@variable มีบทความดีๆ เกี่ยวกับ DO https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา