วิธีการปิดการใช้งาน VirtualHost เริ่มต้นใน apache2?


10

ใน apache2 โดยการออกแบบคำขอ http ใด ๆ กับโฮสต์ที่ไม่รู้จักจะถูกนำไปยัง VirtualHost ที่โหลดครั้งแรก มีวิธีปิดใช้งานคุณสมบัตินี้หรือไม่? กล่าวว่าแตกต่างกันฉันต้องการมีเว็บเซิร์ฟเวอร์ที่ผู้ใช้อาจได้รับชื่อ VirtualHost นิยามอย่างชัดเจนเท่านั้น ชื่อโฮสต์อื่นใดที่ไม่ได้กล่าวถึงอย่างชัดเจนในบรรทัด ServerName หรือ ServerAlias ​​ควรถูกละเว้นไปโดยไม่แจ้งเตือน

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

Listen 80
NameVirtualHost *

<VirtualHost _default_:*>
# Anything matching this host should be silently ignored.
</VirtualHost>

<VirtualHost *>
DocumentRoot /www/example1
ServerName www.example.com
</VirtualHost>

<VirtualHost *>
DocumentRoot /www/example2
ServerName www.example.org
</VirtualHost>

อัปเดต:ตามที่แนะนำด้านล่างและที่อื่น ๆ การเพิกเฉยต่อคำขออย่างเงียบ ๆ อาจไม่ใช่ความคิดที่ดีและอาจทำลาย RFC สำหรับ HTTP อย่างไรก็ตามเนื่องจากโฮสต์เสมือนได้รับการออกแบบมาเพื่อจำลองมีเซิร์ฟเวอร์ HTTP จริงแยกกันหลายวิธีการเพิกเฉยต่อความเงียบจึงไม่ดูเหมือนไม่มีเหตุผลสำหรับฉัน มันจะเหมือนกับการโฮสต์เสมือนบน IP และไฟร์วอลล์ปิด IP บางส่วน (อาจไม่เหมาะสำหรับไคลเอ็นต์ทั้งหมด)

คำตอบ:


4

ฉันไม่แน่ใจว่า "ความล้มเหลวอย่างเงียบ ๆ " เป็นความคิดที่ดี คุณควรให้ลูกค้าอย่างน้อยบางส่วนที่บ่งบอกถึงสิ่งที่เกิดขึ้น บางทีคุณอาจส่งข้อผิดพลาด http 410 "หายไป" สิ่งนี้ควรทำเคล็ดลับ:

RewriteRule ^.*$ - [G]

นอกจากนี้คุณควรสามารถระบุเอกสารข้อผิดพลาด 410 ที่กำหนดเองซึ่งอาจเป็นหน้า html ว่างเปล่า


ฉันพบวิธีแก้ปัญหาด้วยตัวเองเช่นกัน คุณควรเพิ่มบรรทัดสำหรับการโหลด mod_rewrite และ "RewriteEngine On" โดยสังเกตว่าอาจไม่จำเป็น พวกเขาสำหรับฉัน :)
ฮาร์วีย์

2
นอกจากนี้เนื่องจากเราเพิ่งบอกว่า Gone หรือ Forbidden และที่สำคัญกว่านั้นคือ "-" ป้องกันการเปลี่ยนตัว regex นั้นง่ายกว่ามาก:RewriteRule . - [F]
Harvey

17

นี่คือวิธีอื่นที่ไม่เกี่ยวข้องกับการเขียนกฎใหม่:

<VirtualHost _default_:*>
    <Location />
        Deny from all
        Options None
        ErrorDocument 403 Forbidden.
    </Location>
</VirtualHost>

2
นี่ควรเป็นทางออกที่ยอมรับได้ +1
Greg Schmit

ฉันยังไม่ชัดเจนในการแก้ปัญหานี้ ฉันมีไฟล์ VHOST หลายไฟล์และฉันเพิ่งสร้างไฟล์ใหม่ด้วยไฟล์นี้หรือไม่ ฉันลองแล้วและฉันตั้งชื่อไฟล์ 001.default.conf แต่ฉันยังคงมีการกำกับโดเมนย่อยของฉันอีกครั้ง
Frantumn

@Frantumn ตามที่ระบุไว้ในคำถาม "คำขอ http ใด ๆ กับโฮสต์ที่ไม่รู้จักจะถูกนำไปยังVirtualHost ที่โหลดครั้งแรก " <VirtualHost>ดังนั้นจึงต้องกำหนด"ค่าเริ่มต้น" นี้ก่อนในการกำหนดค่าเซิร์ฟเวอร์ ไฟล์ที่ถูกต้องแม่นยำนั้นขึ้นอยู่กับการกำหนดค่าของคุณ (อย่างไรก็ตามปัญหา "โดเมนย่อยที่ถูกเปลี่ยนเส้นทาง" ของคุณอาจเป็นปัญหาที่ไม่เกี่ยวข้อง)
MrWhite

ฮะ. เมื่อใช้โดเมนอื่น ๆ ที่ชี้ไปที่เซิร์ฟเวอร์ของฉันมันไม่ได้ทำ 403 มันเพิ่งเลือก virtualhost แรกที่พบแม้ว่าชื่อเซิร์ฟเวอร์จะไม่ตรงกัน
247

1

สิ่งนี้ใช้ได้สำหรับฉัน

<VirtualHost x.x.x.x:80 [x:x::x:x:x:x]:80>
  ServerName myactualservername.com
  ServerAlias *
  <Location />
    Deny from all
    Options None
    ErrorDocument 403 Forbidden.
  </Location>
</VirtualHost>

แทนที่ xxxx ด้วย ipv4 จริงและ ipv6 ของคุณ
แทนที่ myactualservername.com ด้วยเว็บไซต์จริงที่ให้บริการโดยเครื่อง

ฉันใช้ชื่อโฮสต์เสมือน
เครดิตสำหรับโซลูชันนี้จะไปที่
https://serverfault.com/a/82309/459796

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.