การจัดการเริ่มต้นสำหรับโดเมน / โดเมนย่อยที่ไม่ตรงกันใน Apache


12

ฉันมีการกำหนดค่า Apache2 พร้อมกับ VirtualHosts หลายรายการ DNS ของฉันถูกตั้งค่าให้ยอมรับ*.<domain>.<tld>ในหลายโดเมน ทุกอย่างทำงานได้อย่างถูกต้อง แต่ถ้าฉันไปsomething-random-here.example.comฉันดูเหมือนจะได้รับการเลือก VirtualHost ที่ไม่ถูกต้อง (ฉันเดาว่าเป็นคนแรกหรือคนสุดท้ายที่พบ) มีวิธีบอก Apache ให้ใช้กฎบางอย่างหรือไม่หากไม่มีรายการ VirtualHost ที่ตรงกับโดเมนหรือโดเมนย่อย? ฉันควรจะกลับ 404

คำตอบ:


12

Apache ใช้ virtualhost ตัวแรกหากไม่มีชื่อตรงกัน เพียงกำหนดค่าโฮสต์เสมือนใหม่เป็นชื่อแรกที่มีชื่อแบบสุ่มแสดงสิ่งที่คุณต้องการ - หรือส่งคืนหน้า 404


ขอบคุณ แต่คุณช่วยอธิบายรายละเอียดได้ไหม? ฉันทำงานนี้ไม่ได้
Ryall

2
ไฟล์การกำหนดค่า apache2 ของคุณมีวิธีการจัดวางอย่างไร หรือระบบปฏิบัติการใดที่คุณใช้ Apache อ่านการกำหนดค่าตามลำดับที่แน่นอนและ VirtualHost ตัวแรกที่เห็นคือค่าเริ่มต้น รับการรับส่งข้อมูลทั้งหมดจากชื่อโฮสต์ที่ไม่รู้จัก ดังนั้นหากคุณมีไฟล์กำหนดค่าเดียว VirtualHost แรกก็คือ หากคุณมีหลาย ๆ ตัวเช่นเดียวกับ linux ส่วนใหญ่อาจเป็นชื่อที่เรียกว่า 0default หรือมากกว่านั้น ...
Moritz ทั้งคู่

ports.confฉันใส่การกำหนดค่าเริ่มต้นบางอย่างใน มันไม่ทำงานเพราะฉันพยายามจับคู่ *: 80 เมื่อฉันใช้ <ip>: 80 บน virtualhosts ของฉัน แต่ฉันต้องสร้างรายการเริ่มต้นแยกต่างหากสำหรับแต่ละ IP และใช้งานได้ทันที
Ryall

ไม่ใช้ไฟล์โฮสต์ v แรกหรือไฟล์สุดท้ายของฉัน ฉันคิดว่า Apache มีการเปลี่ยนแปลง
Cobolt

4

อักขระตัวแทนรวมไฟล์การกำหนดค่าไซต์ของคุณ:

Include path/to/site/confs/*httpd.conf

จัดระเบียบไฟล์ไซต์ของคุณเพื่อให้มีการโหลดตามลำดับที่คาดไว้ ตัวอย่าง...

01 httpd.conf

02 site1-httpd.conf

03 site2-httpd.conf

ฯลฯ ...

Apache จะอ่านสิ่งเหล่านี้ตามลำดับ จากนั้นสร้างรายการที่จะโหลดครั้งล่าสุดเสมอเพื่อตรวจจับโฮสต์เสมือนที่ไม่ตรงกันและส่งคืน 404 แทนที่จะโหลดไซต์เริ่มต้น

99 รับทั้งหมด-httpd.conf

<VirtualHost *:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost *:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

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

<VirtualHost 192.168.1.101:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.101:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

หวังว่านี่จะช่วยได้ ฉันใช้วิธีนี้ในการโหลดไซต์ตามลำดับที่ฉันระบุและป้องกันโฮสต์เสมือนที่ไม่ตรงกันจากการโหลดไซต์ที่ไม่คาดคิด


ไม่ควร "ลบ ServerAlias ​​*" ออกจากกฎ catch-all?
Ahm3d กล่าว

ฉันคิดว่ามันจะไม่สำคัญ หากไม่มีโฮสต์เสมือนก่อนที่ catchall จะจัดการกับคำร้องขอเหล่านี้จะส่งคืนการตอบกลับ 404 ฉันไม่เห็นเหตุผลที่ ServerAlias ​​* จะต้องถูกลบออก แต่พวกเขาอาจเฉพาะเจาะจงโดยไม่จำเป็น
Jason Slobotski

0

ในฐานะที่Moritz Bothกล่าวถึง Apache2 จะใช้โฮสต์เสมือนเป็นครั้งแรกที่พบว่ามันไม่ตรงกับที่คุณได้รับการร้องขอ

เมื่อคุณติดตั้ง Apache2 ครั้งแรกมีเว็บไซต์เริ่มต้นที่คุณสามารถใช้เป็นแม่แบบแก้ไขหรือลบได้และฉันก็มักจะสงสัยว่า 000-default.conf นั้นมีไว้เพื่ออะไรเพราะพวกเขามี default.conf ด้วยเช่นกัน หลังจากอ่านสิ่งที่Moritz Bothพูดไปแล้วทุกอย่างก็สมเหตุสมผลแล้ว

สิ่งที่ฉันได้สำหรับเซิร์ฟเวอร์ของฉันคือการคัดลอกการตั้งค่าสำหรับชื่อโฮสต์เริ่มต้น (เว็บไซต์) ไปยังแฟ้ม 000-default.conf a2ensite 000-defaultและ

ตอนนี้ทุกครั้งที่มีการร้องขอโดเมนที่ไม่มีใครเทียบกับเว็บไซต์ของฉันมันให้บริการหน้า 000- ค่าเริ่มต้นซึ่งเป็นเพียงสำเนาของหน้าเริ่มต้นที่แท้จริงของฉัน


1
ฉันทำเช่นเดียวกัน แต่โฮสต์ที่ไม่ตรงกัน / ค่าเริ่มต้นของฉันจะส่งการเปลี่ยนเส้นทางไปยังไซต์ระดับบนสุดที่เหมาะสมซึ่งเปลี่ยน URL ที่แสดงเป็น URL ที่ถูกต้องเช่นกัน
ivanivan

นั่นเป็นความคิดที่ยอดเยี่ยมจริงๆ! ฉันไม่ได้คิดอย่างนั้น ฉันจะใช้งานเว็บไซต์ของฉันอย่างแน่นอน :)
Newteq Developer

ด้วยเหตุผลบางอย่างฉันไม่สามารถรับ ssl ของฉัน (หน้าเริ่มต้น) เพื่อเปลี่ยนเส้นทาง ฉันมี<VirtualHost *:443> ... Redirect / https://baseurl/ ... </VirtualHost> แต่ URL ยังคงเหมือนเดิม ฉันทำเช่นเดียวกันสำหรับเวอร์ชันที่ไม่ใช่ ssl และมันเปลี่ยนเส้นทางอย่างถูกต้อง ความคิดใด ๆ
Newteq Developer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.