หนึ่ง ip บนพอร์ต 80 ที่มีชื่อโฮสต์และพอร์ตต่างกันไม่แน่นอน


1

ฉันไม่แน่ใจว่าจะถามหรืออธิบายด้วยคำพูดในสิ่งที่ฉันพยายามจะทำหรือถ้ามันสามารถทำได้ด้วยวิธีนี้ดังนั้นฉันจึงตัดสินใจวาดไดอะแกรม หวังว่ามันจะอธิบายตนเองอย่างเป็นธรรม:

แผนผังของสิ่งที่ฉันพยายามทำ

ฉันรู้ว่าฉันสามารถทำโฮสต์เสมือนที่ตั้งชื่อตามทั้งหมดในพอร์ต 80 แต่ฉันสามารถวางไว้บนพอร์ตต่าง ๆ และให้เซิร์ฟเวอร์ทำงานว่าโฮสต์ที่มีชื่อคืออะไรและพอร์ตใดที่พวกเขาใช้อยู่


<VirtualHost _default_:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/foo-1.com
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/foo-1.com/>
        Options -Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

<VirtualHost _default_:80>
    DocumentRoot /var/www/foo-2.com
    ServerName foo-2.com
    <Directory "/var/www/foo-2.com">
        allow from all
        Options -Indexes
    </Directory>
</VirtualHost>

ทำไมคุณไม่ต้องการใช้ vhost มาตรฐาน
user619714

ทำไม VHosts บนพอร์ต 8080 และ 8081 ตามลำดับคืออะไร พอร์ต 80 กำลังทำอะไรอยู่ ที่นี่มีพร็อกซีอยู่ที่ใดที่หนึ่งหรือ Apache ทำตัวเหมือนกันหรือไม่?
BMDan

ด้วยเหตุผลบางอย่างถ้าฉันสร้างไปยัง vhost บน 80 ด้วยชื่อที่ต่างกันเพียงงานเดียวที่ถูกต้องความหมายหนึ่งจะทำงานพิมพ์ foo-1.com หรือ www.foo-1.com แต่ vhost อื่น ๆ จะทำงานพิมพ์ "foo-2.com "แต่การพิมพ์ www.foo-2.com จะเปลี่ยนเส้นทางไปที่ foo-1.com
Kyle Coots

ฉันใช้พอร์ตเหล่านั้นเป็นเพียงตัวอย่างที่ฉันคิดว่าใช้ apache เป็นพร็อกซี แต่ไม่แน่ใจว่าจะไปเกี่ยวกับเรื่องนี้หรือสถานที่ที่ควรมองอย่างไร
Kyle Coots

ดังนั้นแทนที่จะแก้ปัญหาที่อาจเป็นปัญหาง่าย ๆ ที่คุณคิดค้นรูปแบบแปลก ๆ ... แสดงให้เห็นว่าการกำหนดค่า vhost ของคุณ
user619714

คำตอบ:


3

หากต้องการให้โฮสต์เสมือนสองชื่อใช้งานบนที่อยู่ IP เดียวกันให้ลองสิ่งนี้

NameVirtualHost *:80

<VirtualHost _*:80>
    ServerAdmin webmaster@localhost
    ServerName foo-1.com
    ServerAlias www.foo1.com
    DocumentRoot /var/www/foo-1.com
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/foo-1.com/>
        Options -Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /var/www/foo-2.com
    ServerName foo-2.com
    ServerAlias www.foo-2.com
    <Directory "/var/www/foo-2.com">
        allow from all
        Options -Indexes
    </Directory>
</VirtualHost>

โปรดทราบว่าแต่ละ vhost มีServerNameและServerAlias


ขอบคุณมากที่ใช้งานได้ดี! ขอขอบคุณทุกความช่วยเหลือ
Kyle Coots

นี่เป็นวิธีที่ดีกว่าที่จะไปมากกว่าคำแนะนำอื่น ๆ ของฉันในการใช้การเขียนซ้ำ สิ่งที่คุณถามเป็นไปได้ แต่ไม่ใช่วิธีการมาตรฐาน
Tim Koscielski

ฉันมีเซิร์ฟเวอร์ของฉันโดยใช้วิธีการที่อธิบายไว้ข้างต้นเนื่องจากฉันไม่ได้พยายามทำสิ่งที่ซับซ้อนกว่าที่จำเป็นหรือสร้างใหม่ล้อหรืออะไรก็ตาม ฉันได้ลองวิธีแก้ปัญหาอื่น ๆ ที่คล้ายกับปัญหาที่เกิดขึ้นในความคิดเห็นด้านบนโดยไม่มีประโยชน์ดังนั้นฉันคิดว่าบางทีฉันอาจต้องใช้วิธีนี้ในแบบที่ต่างออกไป อย่างไรก็ตามฉันยังค่อนข้างใหม่กับ apache และส่วนการกำหนดค่า และเช่นเคยฉันพยายามทำวิจัยและทดสอบให้มากที่สุดเท่าที่จะทำได้ก่อนถามอะไรและฉันจะพยายามถามคำถามเฉพาะเจาะจงมากขึ้นกับปัญหาที่เกิดขึ้นจริงในอนาคต แต่ฉันขอขอบคุณทุกความช่วยเหลือจากชุมชน ขอบคุณอีกครั้ง!
ไคล์เป็ด

3

ในการอ่านสถานการณ์ของคุณครั้งแรกการตอบสนองครั้งแรกของฉันคือเหตุผลที่คุณต้องการทำแบบนี้เหมือนคนอื่น ๆ แต่ด้วย Apache หรือ PHP สิ่งนี้เป็นไปได้ คุณน่าจะดีกว่าถ้าให้เวอร์ชวลโฮสต์ทำงานอย่างถูกต้องบนพอร์ต 80 เพราะนี่คือสิ่งที่ผู้เยี่ยมชมเว็บไซต์คาดหวัง แต่นี่เป็นความเห็นของฉัน

ในการทำสิ่งที่คุณต้องการให้สำเร็จมีสองตัวเลือกและคุณต้องมั่นใจว่าการเปลี่ยนเส้นทาง HTTP จะเกิดขึ้น ไม่มีทางรอบที่หนึ่ง

ตัวเลือกแรกของคุณคือใช้ PHP กับสิ่งต่อไปนี้ ...

  1. ไซต์ Apache หลักของคุณจะครอบคลุมคำขอไซต์เริ่มต้นทั้งหมดโดยใช้ PHP
  2. PHP จะอ่านส่วนหัวดู URL และส่งต่อการเปลี่ยนเส้นทางไปยังเบราว์เซอร์
  3. เบราว์เซอร์จะเปลี่ยนเส้นทางไปยัง URL ที่ถูกต้อง

Apache สนับสนุนตัวเลือกการเขียนซ้ำเช่นกันและคุณสามารถจัดระเบียบสิ่งนี้สำหรับแต่ละไซต์ในลักษณะต่อไปนี้

# First host rewrite
RewriteCond %{HTTP_HOST} ^www.\foo-1\.com$ [NC]
RewriteRule ^(.*)$ http://www.foo-1.com:8080/$1 [L,R=301]

# Second host rewrite
RewriteCond %{HTTP_HOST} ^www.\foo-2\.com$ [NC]
RewriteRule ^(.*)$ http://www.foo-2.com:8081/$1 [L,R=301]

อย่างไรก็ตามหากคุณจะไปที่ระดับนี้ด้วยเงื่อนไขการเขียนใหม่มันอาจจะง่ายกว่าที่จะหา VHOSTS ใน Apache และทำให้มันทำงานอย่างถูกต้องบนเซิร์ฟเวอร์ของคุณ


ตกลงดังนั้นจึงสามารถทำได้และนั่นคือสิ่งที่ฉันเป็นจริงหลังจากนั้น หากเพียงแค่ออกจากความอยากรู้บริสุทธิ์หากสิ่งที่สามารถทำได้ ฉันมีชื่อโดเมนหลายชื่อและมีเพียงหนึ่งเซิร์ฟเวอร์และหนึ่ง ip โดยใช้ noip เป็น dns ของฉัน และอาจไม่ต้องการให้เซิร์ฟเวอร์ทั้งหมดทำงานบนพอร์ต 80 ด้วยเหตุผลหลายประการ
Kyle Coots
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.