Apache ไม่ปฏิบัติตามคำสั่งชื่อเซิร์ฟเวอร์สำหรับไซต์ใดไซต์หนึ่งโดยเฉพาะ


9

ฉันมีไซต์ไม่กี่แห่งที่ได้รับการกำหนดค่าเป็น VirtualHosts โดยใช้ Apache ซึ่งทำงานได้ดีมาระยะหนึ่งแล้ว ฉันเพิ่งเปลี่ยนชื่อโฮสต์ของเซิร์ฟเวอร์เป็นหนึ่งในชื่อโดเมนที่ให้บริการและยังเพิ่มลงใน / etc / โฮสต์ที่ชี้ไปยังที่อยู่ IP ภายนอกของเซิร์ฟเวอร์

ตั้งแต่ฉันทำเช่นนั้นการเข้าถึงโดเมนจากแล็ปท็อปของฉันจะนำฉันไปสู่การเริ่มต้นของ Apache "มันใช้งานได้!" หน้า. หากฉันลบ 000- ค่าเริ่มต้นจาก / etc / apache2 / sites-enabled / มันจะแสดงเว็บไซต์ที่ถูกต้อง พยายามเข้าถึงเว็บไซต์ด้วย 'www.' คำนำหน้านำฉันไปยังไซต์ที่ถูกต้องไม่ว่าจะเป็น 000- ค่าเริ่มต้นอยู่ในเว็บไซต์ที่เปิดใช้งาน

จากทั้งหมดนั้นฉันเดาว่าการกำหนดค่าเริ่มต้นจะแสดงหน้าเริ่มต้นเนื่องจากวิธีที่ฉันกำหนดค่าชื่อโฮสต์หรือ / etc / hosts (หรือทั้งสองอย่าง) แต่ฉันไม่สามารถหาวิธีปิดใช้งานในขณะที่ ออกจากการตั้งค่าเหล่านั้นตามที่พวกเขาเป็น ข้อเสนอแนะใด ๆ ยินดีต้อนรับ!

แก้ไข - การกำหนดค่า VirtualHost ปัจจุบันของฉันมีลักษณะดังนี้:

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin me@domain.com

    DocumentRoot /srv/www/domain

    ErrorLog /srv/www/domain/logs/error.log
    CustomLog /srv/www/domain/logs/access.log combined
</VirtualHost>

เพื่อสรุป:ฉันมี VirtualHosts ตั้งค่าหลายตัวและนี่เป็นเพียงโปรแกรมเดียวที่ทำงานไม่ถูกต้อง ฉันสามารถเข้าถึงhttp://www.domain.com ได้ดี แต่http://domain.comพาฉันไปที่ค่าเริ่มต้นของ Apache "ใช้งานได้!" หน้า. หากฉันปิดการใช้งานการกำหนดค่าเริ่มต้น 000 รายการจะแสดงหน้าเว็บที่เหมาะสม สิ่งนี้เริ่มเกิดขึ้นหลังจากฉันตั้งชื่อโฮสต์ของเซิร์ฟเวอร์เป็น domain.com และเพิ่มบรรทัดไปยัง / etc / โฮสต์ชี้ domain.com ไปยังที่อยู่ IP ภายนอกของเซิร์ฟเวอร์ ฉันต้องการปล่อยให้เป็นอย่างนั้นถ้าเป็นไปได้

แก้ไข:ฉันวิ่งapache2ctl -Sตั้งแต่/usr/sbin/apache2 -Sให้ฉัน "apache2: ชื่อผู้ใช้ที่ไม่ดี $ {APACHE_RUN_USER}" นี่คือผลลัพธ์:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost other.com (/etc/apache2/sites-enabled/other:1)
         port 80 namevhost another.com (/etc/apache2/sites-enabled/another:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/domain:1)
Syntax OK

domain.com นั้นถูกใช้ในไฟล์ httpd.conf หลักเป็น ServerName หรือไม่ หรือ apache2ctl.conf คุณดูเหมือนจะใช้อูบุนตูดังนั้นมันอาจแตกต่างกับชื่อ
Prix

คำตอบ:


12

ลืมคำถามนี้ไปเมื่อวันก่อน

เมื่อคุณมีคอนเทนเนอร์ <VirtualHost> โดยไม่มีส่วนประกอบ ServerName มันจะใช้ชื่อโฮสต์เริ่มต้น ในฐานะที่เป็นค่าเริ่มต้น 000 อาจไม่มีองค์ประกอบชื่อเซิร์ฟเวอร์และเป็นตัวอักษรตัวแรกที่จะรวมนั่นคือเหตุผลที่มันตอบสนองสำหรับ hostname.com และไม่อนุญาตให้ชื่อโฮสต์ที่ประกาศอย่างชัดเจนของคุณทำงาน


ฉันเห็นวิธีใดที่จะแก้ไขได้? ฉันต้องการกำหนดค่าเริ่มต้นให้จัดการโดเมนที่ไม่ได้จัดการ แต่ฉันไม่ต้องการให้จัดการโดเมนนั้น
John Debs

ให้โดเมนอื่นที่ไม่ใช่โดเมนที่ใช้ในการกำหนดค่าหรือเปลี่ยนชื่อเป็น zzz-default เพื่อให้มีการเรียกใช้ล่าสุด
karmawhore

โอเคฉันคิดว่าฉันเข้าใจทุกอย่างแล้ว ฉันลองใช้ zzz-default แต่มันไม่ใช่พฤติกรรมที่แน่นอนที่ฉันต้องการ ServerName example.comแม้ว่าการตั้งค่าเริ่มต้นจะใช้งานได้ดี ขอบคุณ!
John Debs

4

คุณมี NameVirtualHost *: 80 คำสั่งที่ไหน?

ลอง:

/usr/sbin/apache2 -S

นั่นจะบอกคุณว่า apache กำลังแยกวิเคราะห์ไฟล์กำหนดค่าอย่างไร คุณมีการกำหนดค่าที่มี IP จริงหรือทั้งหมดมี * หรือไม่ คุณมีอะไรขาดหายไป: 80 หรือไม่? Apache ไม่ชอบการผสมเหล่านั้น

คุณมี ServerName domain.com หรือ ServerAlias ​​domain.com เป็นค่าเริ่มต้นหรือไม่


ใช่ฉันเข้าใจแล้วใน /etc/apache2/posts.conf ฉันจะเพิ่มบทสรุปให้กับคำถามที่หวังว่าจะทำให้ชัดเจนยิ่งขึ้น
John Debs

การกำหนดค่าเริ่มต้น 000 ของฉันไม่ได้ถูกแตะต้องมันไม่มีคำสั่ง ServerName หรือ ServerAlias
John Debs

NameVirtualHost เลิกใช้แล้ว
Sam

1

ตรวจสอบ ServerName และ ServerAlias ​​ในคำสั่ง VirtualHost:

<VirtualHost *:80>
ServerName domain
ServerAlias www.domain.com
ServerAlias *.domain.com
</VirtualHost> 

อ่าน: http://httpd.apache.org/docs/2.2/mod/core.html#serveralias , http://httpd.apache.org/docs/2.2/vhosts/


นั่นเป็นเพียงวิธีการตั้งค่าสิ่งต่าง ๆ ในขณะนี้ ฉันโพสต์การกำหนดค่าของฉันในคำถาม
John Debs

0

สิ่งนี้ได้ผล:

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerAlias www.mydomain.com
</VirtualHost>

เมื่อฉันพิมพ์ผิดมันไม่ทำงาน (คำสั่ง ServerName สองครั้ง):

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerName www.mydomain.com
</VirtualHost>

เมื่อฉันมีคำสั่ง ServerName สองครั้งมันก็แก้ไขไปยังเว็บไซต์แรกที่ระบุไว้ (ไม่แสดงที่นี่)

หวังว่านี่จะช่วยใครซักคน ...


0

ฉันมีปัญหาที่คล้ายกันและแก้ไขได้โดยการตั้งค่า ServerName อย่างชัดเจนในไฟล์ httpd.conf หลักแทนที่จะปล่อยให้ apache คิดออกโดยอัตโนมัติ ฉันคิดว่าสิ่งที่ apache ตัดสินใจนั้นเหมือนกับ vhost ของฉัน (กำหนดไว้ในภายหลัง) ดังนั้นค่าเริ่มต้น "won" จะแทนที่การตั้งค่า vhost

ฉันเพิ่งตั้งค่า httpd.conf ServerName เป็นชื่อโฮสต์ที่เครื่องมีฉันจะไม่ให้บริการหน้าเว็บสำหรับ

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