Nginx: ชื่อเซิร์ฟเวอร์นับพัน


12

ฉันจะกำหนดค่า Nginx ได้ จำกัด server_name หลายพันรายการโดยไม่สร้างไฟล์ config ภายนอกหลายพันรายการหรือเขียนบรรทัด server_name ที่ยาวมาก ๆ ได้อย่างไร

แน่นอนฉันต้องการ Nginx เป็น reverse-proxy สำหรับ server1.com, server2.com และอื่น ๆ เท่านั้น ...

ทางออกที่ดีที่สุดสำหรับฉันคือการมีไฟล์ปรับแต่งภายนอกหนึ่งไฟล์ที่มี server_names ที่ จำกัด ของฉัน: server1.com, server2.com ฯลฯ

เป็นไปได้ไหม ?


ตกลงขอบคุณสำหรับคำตอบของคุณมันใช้งานได้โดยไม่ต้องลงทะเบียน การแสดงออก เพียงแค่รายการ server_name ใหญ่ตามที่อธิบายโดย kolbijack ขอบคุณ.


คุณควรยอมรับคำตอบ kolbijack หากเป็นคำตอบที่ช่วยได้
Oneiroi

คำตอบ:


19

คุณสามารถใส่คำสั่ง server_name ลงในไฟล์ทั้งหมดด้วยตัวเองแล้วเพียงแค่รวมมันจากบล็อกเซิร์ฟเวอร์ของคุณ:

# example.com.conf
server {
  include /path/to/server_names;
  ...
}

# /path/to/server_names
server_name
  example.com
  domain.com
  foo.com
;

ไฟล์ server_names ต้องการเพียง server_name ที่ด้านบนและ; ที่ด้านล่างเพื่อเป็นคำสั่งที่ถูกต้อง


ระวังความล่าช้า / ความล่าช้าในการค้นหา / การใช้ RAM หากคุณทำเช่นนี้ ฉันได้ทำการทดสอบกับรายการขนาดใหญ่ (ประมาณ 5,000 ServerAliasคำสั่งและมากถึง 16 ล้านDeny fromคำสั่ง) ใน Apache 5,000 โดเมนสร้างความล่าช้าที่วัดได้ แต่มีความล่าช้าเล็กน้อย เมื่อเพิ่มจำนวนฉันพบว่าการหน่วงเวลาเริ่มสังเกตเห็นได้ที่ประมาณ 50,000 ด้วย Apache (และอาจจะเป็นกับ nginx) รายการนั้นถูกเก็บไว้ใน RAM ซึ่งหมายความว่าด้วยชุดที่ใหญ่ที่สุดที่ฉันพยายามฉันสามารถเริ่มกระบวนการลูกเพียงกระบวนการเดียวภายใน RAM ที่มีอยู่ของฉัน
Ladadadada

1
@ Ladadadada LOL ฉันเพิ่งตรวจสอบ Nginx ใช้ RAM ขนาด 30Mb สำหรับโดเมน 100,000 server_nameคำสั่งและตอบกลับRequest rate: 36900.6 req/s (0.0 ms/req)
VBart

1
60Mb สำหรับ 1 000 000 และRequest rate: 34716.8 req/s (0.0 ms/req)
VBart

นั่นดีกว่า Apache ที่จัดการอย่างน้อยกับ MPM prefork สะดวกที่จะรู้
Ladadadada

7

การserver_nameประกาศในserver {}บล็อกของคุณอาจเป็นนิพจน์ปกติซึ่งจะช่วยให้คุณจับคู่ server_name s ภายในรูปแบบที่กำหนดไว้

ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้สามารถดูได้ที่นี่: http://nginx.org/en/docs/http/server_names.html#regex_names


ขอบคุณ แต่ฉันไม่สามารถประกาศรายการโดเมนที่กำหนดเองของฉันในการแสดงออกปกติเดียว server_name [zeus.domain.com | poseidon.domain.com | ฯลฯ ... ]]; มันจะยาวเกินไป
เฟรด

1
@fred คุณสามารถให้ชุดข้อมูลตัวอย่างได้หรือไม่? เว้นแต่จะไม่มีโดเมนใดที่เหมือนโดเมนอื่นเลยฉันมั่นใจอย่างยิ่งว่ารูปแบบ Regex จะแก้ไขปัญหาของคุณได้
Oneiroi

@Oneiroi: example use case = ผู้ใช้สร้างโดเมนย่อย ลองนึกภาพผลิตภัณฑ์ซอฟต์แวร์เป็นบริการที่ผู้ใช้แต่ละคนได้รับโดเมนย่อยของตนเองและคุณต้องการใช้ Nginx เพื่อกำหนดเส้นทางไปยังเซิร์ฟเวอร์ต่าง ๆ ในกรณีนี้ไม่มีโดเมนใดเหมือนโดเมนอื่นเลย
m.stenta

@ m.stenta ah จุดยุติธรรม เว้นแต่จะมีสามัญสำนึกบางอย่างในโดเมนย่อยใช่แล้ว regex จะไม่ทำงาน หรือคุณจะต้องผูกมัดในการสร้าง regex ที่ได้มาจากโดเมนของตัวเองซึ่ง imho เอาชนะวัตถุประสงค์
Oneiroi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.