ทำไมอาปาเช่จึงเพิกเฉยต่อโฮสต์เสมือนที่มีชื่อเซิร์ฟเวอร์ตรงกับ URL ที่ร้องขอ?


26

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

ฉันhttpd.confเพิ่งมีบรรทัดต่อไปนี้:

ServerName radiofreebrighton.org.uk

ฉันยังมีports.confไฟล์ซึ่งมีสิ่งต่อไปนี้:

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    Listen 443
</IfModule>

ฉันมีสองไฟล์sites-availableที่ symlinked sites-enabledโดยa2ensite:

  • radiofreebrighton.org.uk
  • trafalgararches.co.uk

เนื้อหาของแรกคือ:

<VirtualHost _default_:80>
    DocumentRoot /home/tom/www

    ServerAdmin tom@radiofreebrighton.org.uk
    ServerName radiofreebrighton.org.uk
    ServerAlias www.radiofreebrighton.org.uk

    <Directory /home/tom/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log
    LogLevel error
    CustomLog /var/log/apache2/access.log combined

    Alias /wiki /home/tom/www/mediawiki/index.php
</VirtualHost>

เนื้อหาของหลังคือ:

<VirtualHost *:80>
    DocumentRoot /home/tom/tata-www

    ServerAdmin admin@trafalgararches.co.uk
    ServerName trafalgararches.co.uk
    ServerAlias www.trafalgararches.co.uk

    <Directory /home/tom/tata-www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    logLevel error
    ErrorLog /var/log/apache2/error.log
</VirtualHost>

แต่เมื่อใดก็ตามที่ฉันขอหน้าจาก trafalgararches.co.uk ฉันได้รับหน้าจาก radiofreebrighton.org.uk เหตุนี้อาจเกิดขึ้น? ฉันจะแก้ไขได้อย่างไร


แก้ไข:

การกำหนดค่าโฮสต์เสมือนตามที่ Apache เข้าใจ:

tom@rfb:/usr/local$ apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost trafalgararches.co.uk (/etc/apache2/sites-enabled/trafalgararches.co.uk:1)
Syntax OK

(รวบรวมผ่านapache2ctl -Saka httpd -S)


1
ไม่แน่ใจว่านี่คือสาเหตุ แต่คุณควรลบเครื่องหมายทับออกจากปลายของคุณServerNameและServerAliasเส้น นอกจากนี้ตรวจสอบให้แน่ใจว่าคุณได้เริ่มต้น apache ใหม่
EEAA

ฉันเกือบจะเป็นไปในเชิงบวกนั่นคือสาเหตุ หมายความว่าชื่อโฮสต์ในคำขอจะไม่ตรงกับชื่อเซิร์ฟเวอร์สำหรับโฮสต์เสมือนนั้น
larsks

1
@ErikA, @larsks - พวกคุณทำให้ฉันมีความหวัง! ฉันลบเครื่องหมายทับต่อท้ายและเริ่ม apache ใหม่ แต่ไม่เปลี่ยนแปลงอะไรเลย
Tom Wright

1
คุณมีNameVirtualHost *:80การกำหนดค่าของคุณบ้างไหม?
larsks

1
ฉันไม่แน่ใจว่าเว็บไซต์ที่กล่าวถึงข้างต้นเป็นการผลิตหรือการพัฒนาหรือไม่ แต่จริง ๆ แล้วการไปที่ URL เหล่านั้นจะให้สองหน้าที่แตกต่างกันสำหรับฉัน (หน้าที่ถูกต้องตามรูปลักษณ์ของมัน) หาก vhosts ด้านบนอยู่บนเซิร์ฟเวอร์การพัฒนาให้ละเว้นความคิดเห็นนี้ มิฉะนั้นคุณอาจแก้ไขปัญหาของคุณได้ที่ไหนสักแห่งระหว่างทางและยังมีสำเนาแคชนั่งอยู่
cyberx86

คำตอบ:


15

คำถามนี้อายุเกินหนึ่งปีแล้ว แต่ฉันเจอปัญหา "ที่คล้ายกัน" นี่อาจชัดเจน แต่อย่าลืมรีสตาร์ทเซอร์วิส apache หลังจากเปิดใช้งานโฮสต์เสมือนเพิ่มเติม ดูหลังจากดำเนินa2ensiteการโฮสต์เสมือนที่สองผลลัพธ์ของapache2ctl -Sจะแสดงว่าทั้งสองไซต์พร้อมใช้งาน (และหนึ่งในนั้นคือค่าเริ่มต้น) แม้ว่าคุณจะไม่ได้โหลด apache

สมมติว่าคุณมีโฮสต์เสมือนสองโฮสต์คือไซต์ 1 และไซต์ 2 คุณเรียกใช้a2ensite site1แล้วโหลดบริการ apache ตอนนี้คุณสามารถเข้าถึงhttp://site1และเป็นค่าเริ่มต้น ตอนนี้คุณเรียกใช้a2ensite site2แต่ลืมรีสตาร์ท apache ผลลัพธ์ของapache2ctl -Sจะเป็น:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server site1 (/etc/apache2/sites-enabled/site1:1)
         port 80 namevhost site1 (/etc/apache2/sites-enabled/site1:1)
         port 80 namevhost site2 (/etc/apache2/sites-enabled/site2:1)
Syntax OK

แต่เมื่อคุณพยายามโหลดhttp://site2จริง ๆ แล้วมันจะโหลดไซต์เริ่มต้น (ไซต์ 1) เนื่องจากการกำหนดค่าไม่ได้โหลด


ฉันได้ผลลัพธ์เดียวกัน แต่ก็ไม่โหลดเว็บไซต์ที่สอง
arqam

15

ฉันมีปัญหาที่คล้ายกันซึ่ง vhosts เพิ่มเติมของฉันในพอร์ต 443 (SSL / HTTPS) ทั้งหมดถูกนำไปยังไดเรกทอรีของ vhost แรกที่ระบุไว้ Apache กำลังเพิกเฉยต่อคุณสมบัติชื่อเซิร์ฟเวอร์และจับคู่บน ip: พอร์ตเท่านั้น

ปรากฎว่าฉันไม่มีคำสั่ง 'NameVirtualHost *: 443' เพื่อเปิดใช้งาน Named virtual hosting สำหรับพอร์ต 443

'NameVirtualHost *: 443' จะต้องถูกเรียกเพียงครั้งเดียวและต้องกำหนดไว้เหนือ vhosts ของคุณสำหรับพอร์ต 443 ฉันใส่คำจำกัดความของฉันลงในไฟล์ ports.config ดังนั้นจึงดูเหมือนว่า:

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

อย่าลืมรีสตาร์ท apache หลังจากการเปลี่ยนแปลงใด ๆ


1
สำหรับสิ่งที่มีค่า ... ใน Apache 2.4.18 การใช้NameVirtualHostสร้างข้อความนี้เมื่อเริ่มต้น:AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/ports.conf
Lambart

4

2 เซ็นต์ของฉัน: เนื่องจากฉันต้องติดกับ IP (ฉันไม่ต้องการให้เว็บไซต์ที่จะให้บริการในทุกเครือข่ายที่ติดตั้ง) มันเกิดขึ้นว่าหลังจาก IP ส่วนตัวของเซิร์ฟเวอร์ท้องถิ่นเปลี่ยนไปฉันลืมที่จะเปลี่ยนมันที่นี่:

NameVirtualHost 192.168.100.20:80 <VirtualHost 192.168.100.20:80>

แน่นอนว่าไม่ใช่ปัญหา Apache ที่จะแจ้งให้คุณทราบว่า IP ไม่มีอยู่ในเครื่อง


2

ทอมโปรดดูที่นี่ http://httpd.apache.org/docs/2.0/en/mod/core.html#namevirtualhost

บันทึก

โปรดทราบว่า "เซิร์ฟเวอร์หลัก" และเซิร์ฟเวอร์เริ่มต้นใด ๆ จะไม่สามารถให้บริการสำหรับการร้องขอไปยังที่อยู่ IP ของ NameVirtualHost (เว้นแต่ด้วยเหตุผลบางประการที่คุณระบุ NameVirtualHost แต่ไม่ต้องกำหนด VirtualHosts ใด ๆ สำหรับที่อยู่นั้น)

ดังนั้นควรจะเป็นไรถ้าคุณเปลี่ยนค่าเริ่มต้นเป็น ip-adress ของเซิร์ฟเวอร์ของคุณ


ฉันลองมัน แต่มันก็ไม่ได้เปลี่ยนแปลงอะไรเลย ฉันยังต้องการหลีกเลี่ยงการผูกมัดตัวเองกับ IP เฉพาะดังนั้นฉันจะเปลี่ยนกลับ นอกจากนี้ฉันควรชี้ให้เห็นว่า vhost เริ่มต้นเป็นสิ่งที่ใช้งานได้
Tom Wright

1

ฉันหาคำตอบได้จากที่นี่: http://alexking.org/blog/2007/11/01/apache-2-only-serves-first-virtual-host

ใส่ 2 ชื่อเซิร์ฟเวอร์ใน 1 VirtualHost แท็กเดียวกันดังนี้:

<VirtualHost *:80>
ServerName beta-site-1.com
DocumentRoot "/Library/WebServer/beta-site-1"

ServerName beta-site-2.com
DocumentRoot "/Library/WebServer/beta-site-2"
</VirtualHost>

ฉันสิ้นสุดมีปัญหากับไซต์ที่สองเนื่องจากฉันมีแท็ก VirtualHost สองบล็อก


0

ฉันมีปัญหานี้ในการย้ายเว็บไซต์ไปยังเซิร์ฟเวอร์ Ubuntu 16 ใหม่ หลังจากการเกาหัวเล็กน้อยฉันรู้ว่าโมดูล SSL ไม่ได้เปิดใช้งานตามค่าเริ่มต้นดังนั้นสิ่งใดก็ตามที่อยู่ภายใน<IfModule mod_ssl.c>บล็อกนั้นจะถูกละเว้นอย่างเงียบ ๆ

หลายปีที่ผ่านมาฉันห่อ vhosts SSL ทั้งหมดของฉันไว้ในเงื่อนไขนี้และในครั้งนี้ฉันเพิ่งคัดลอกไฟล์กำหนดค่าไปยังเซิร์ฟเวอร์ใหม่

ฉันแก้ไขโดยเปิดใช้งานโมดูล:

sudo a2enmod ssl

0

ฉันค้นพบสาเหตุของปัญหานี้คือรายการ / etc / hosts บนเซิร์ฟเวอร์ของฉันโดยมี URL ที่ชี้ไปยัง IP ภายนอกของเซิร์ฟเวอร์

ณ จุดหนึ่งฉันต้องทำการตั้งค่าก่อนที่ DNS จะพร้อมดังนั้นฉันจึงป้อนรายการ / etc / hosts บนเซิร์ฟเวอร์ของฉันที่ชี้ไปยัง IP ภายนอกของตนเอง:

1.2.3.4 vhost.example.com

จากนั้นฉันตั้งค่า ServerAlias ​​เป็นไซต์ที่มีอยู่สำหรับ "vhost.example.com"

แต่ไม่มีอะไรที่ฉันสามารถทำได้จะหยุด Apache ให้บริการเว็บไซต์ default-ssl.conf เพื่อขอ SSL ไปยัง vhost.example.com HTTP 80 ของพอร์ตทำงานได้ดี แต่ SSL แสดงเว็บไซต์เริ่มต้นแทนเสมอ ในท้ายที่สุดเธรด SO นี้ทำให้ฉันลอง "apachectl -S" ซึ่งแสดงไซต์และในที่สุดฉันก็สามารถหาได้

ดังนั้นหากคุณได้รับเว็บไซต์ SSL เริ่มต้นแทนที่จะเป็นเว็บไซต์ที่คุณคาดหวังให้แน่ใจว่าคุณไม่ได้เพิ่มที่อยู่ IP ภายนอกของเซิร์ฟเวอร์ในรายการ / etc / hosts! สิ่งที่น่าแปลกที่ต้องทำในการเข้าใจถึงปัญหาย้อนหลัง แต่หวังว่าจะช่วยคนอื่นได้!

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