ServerName และ ServerAlias ​​ทำงานอย่างไร


62

เป็นส่วนต่อไปนี้ของการกำหนดค่าโฮสต์เสมือนที่ฉันต้องการชี้แจงเพิ่มเติมเกี่ยวกับ:

<VirtualHost *:80>
  # Admin email, Server Name (domain name), and any aliases
  ServerAdmin example@example.com
  ServerName  141.29.495.999
  ServerAlias example.com
...

นี่คือตัวอย่างการตั้งค่าและคล้ายกับสิ่งที่ฉันมีในปัจจุบัน (ฉันไม่มีชื่อโดเมนในขณะนี้)

<VirtualHost *:80>- อนุญาตการตั้งค่าต่อไปนี้สำหรับคำขอ HTTP ทั้งหมดที่ทำบนพอร์ต 80 ถึง IP ที่เซิร์ฟเวอร์นี้สามารถติดต่อได้ ตัวอย่างเช่นหากเซิร์ฟเวอร์สามารถเข้าถึงได้มากกว่าหนึ่ง IP คุณสามารถ จำกัด คำสั่งนี้เป็นเพียงหนึ่งแทนที่จะเป็นทั้งสอง

ServerName- หากส่วนโฮสต์ของคำขอ HTTP ตรงกับชื่อนี้ให้อนุญาต โดยปกติจะเป็นชื่อโดเมนที่จับคู่กับ IP แต่ในกรณีนี้โฮสต์คำขอ HTTP จะต้องตรงกับ IP นี้

ServerAlias - ชื่อสำรองที่เซิร์ฟเวอร์ยอมรับ

ส่วนที่สับสนสำหรับฉันคือในสถานการณ์ข้างต้นถ้าฉันตั้งค่าServerAlias mytestname.comและจากนั้นทำการร้องขอ HTTP ไปmytestname.comจะต้องมีระเบียน DNS ที่ชี้ไปที่ IP ของเซิร์ฟเวอร์เพื่อให้ทำงานได้หรือไม่ ในกรณีนี้ ServerAlias ​​เป็นเพียงแค่รายการ EXTRA ServerName หรือไม่

บอกว่าผมมีรายการ DNS ดังกล่าวว่าfoobar.com = 141.29.495.999แต่แล้วฉันมีServerName = 141.29.495.999และServerAliasเป็นที่ว่างเปล่าที่จะหมายถึงว่าแม้ foobar.com ได้รับการแก้ไขเพื่อ IP ที่เหมาะสมเนื่องจากมีการอ้างอิงถึงการยอมรับใน foobar.com ไม่มีServerNameหรือServerAlias?

หรือบางสิ่งบางอย่าง. ผู้ชายฉันสับสน


1
คุณลืมบางคำในย่อหน้าที่ 2 :-)
ThatGraemeGuy

คำตอบ:


105

คิดว่ามันเป็นเช่นนี้:

DNS เป็นสมุดโทรศัพท์ / หน้าเหลือง เมื่อมีคนต้องการโทรหาพวกเขาพวกเขาสามารถค้นหาชื่อของคุณและรับหมายเลขโทรศัพท์และโทรหาโทรศัพท์นั้น DNS ทำเช่นเดียวกัน แต่สำหรับคอมพิวเตอร์ - เมื่อมีคนต้องการไปที่www.example.comพวกเขาขอ DNS สำหรับที่อยู่ IP จากนั้นพวกเขาสามารถติดต่อคอมพิวเตอร์ที่มีที่อยู่ IP นั้นได้ นั่นคือสิ่งที่การแก้ไขหมายถึง การแก้ไขที่อยู่ IP ไม่มีส่วนเกี่ยวข้องกับ Apache เป็นคำถาม DNS อย่างเคร่งครัด

ServerNameและServerAliasเป็นเหมือนรายการโทรศัพท์ภายในของ บริษัท เว็บเซิร์ฟเวอร์ของคุณคือแผงสวิตช์ มันจะยอมรับการเชื่อมต่อที่เข้ามาทั้งหมดไปยังเซิร์ฟเวอร์ จากนั้นลูกค้า / ผู้โทรจะบอกพวกเขาว่าพวกเขากำลังมองหาชื่ออะไรและมันจะค้นหาในการกำหนดค่า Apache สำหรับวิธีจัดการกับชื่อนั้น

หากชื่อไม่อยู่ในชื่อ ServerName / ServerAlias ​​ในการกำหนดค่า apache, apache จะให้ชื่อ VirtualHost แรกแก่พวกเขาเสมอ หรือถ้าไม่มี VirtualHost เลยมันจะให้เนื้อหาเดียวกันไม่ว่าจะมีชื่อโฮสต์ใดในคำขอ

ETA: ดังนั้นขั้นตอนสำหรับการเชื่อมต่อปกติ:

  1. คุณพิมพ์http://www.example.comลงในเบราว์เซอร์ของคุณ
  2. คอมพิวเตอร์ของคุณขอให้แก้ไข DNS ของที่อยู่ IP www.example.comมันควรจะใช้เมื่อมันต้องการที่จะพูดคุยกับ
  3. คอมพิวเตอร์ของคุณเชื่อมต่อกับที่อยู่ IP นั้นและบอกว่าต้องการคุยกับwww.example.com(นั่นคือHost:ส่วนหัวใน HTTP)
  4. www.example.comเว็บเซิร์ฟเวอร์มีลักษณะที่กำหนดค่าจะคิดออกว่าจะทำอย่างไรกับการร้องขอสำหรับเนื้อหาจาก หนึ่งในสิ่งต่อไปนี้อาจเกิดขึ้น:
    • www.example.comมีการระบุว่าเป็นServerNameหรือServerAliasสำหรับVirtualHost- ถ้าเป็นเช่นนั้นจะใช้การกำหนดค่าสำหรับ VirtualHost นั้นเพื่อส่งเนื้อหา
    • เซิร์ฟเวอร์ไม่มี VirtualHosts ใด ๆ เลย - ถ้าเป็นเช่นนั้นเซิร์ฟเวอร์จะใช้การกำหนดค่าใน httpd.conf เพื่อส่งเนื้อหา
    • เซิร์ฟเวอร์มี VirtualHosts แต่www.example.comไม่มีอยู่ในรายการใด ๆ หากเป็นเช่นนั้น Virtualhost แรกในรายการจะถูกใช้เพื่อส่งเนื้อหา

ดังนั้นหากส่วนโฮสต์ของคำขอ HTTP นั้นwww.example.comDNS จะแก้ไขที่อยู่ IP สำหรับชื่อนั้นและส่วนโฮสต์คำขอ HTTP นั้นจะเป็น IP จริง เมื่อไปถึงเซิร์ฟเวอร์ apache จะรู้ว่าคำขอwww.example.comนั้นมีและถ้ามีServerNameหรือมีServerAliasคำสั่งสำหรับชื่อโดเมนนั้นจะสามารถให้บริการรูทเอกสารได้หรือไม่
njp

ไม่ - ส่วนคำขอ HTTP ยังคงเป็นชื่อโฮสต์ ฉันจะอธิบายเพิ่มเติมเล็กน้อย
Jenny D

The server has VirtualHosts but www.example.com isn't listed in any of them - if so, the first Virtualhost in the list will be used to deliver the content.. ฉันทดสอบสิ่งนี้ ถูกต้อง แต่ฉันไม่แน่ใจว่าเป็น Virtualhost รายแรก ขอบคุณสำหรับข้อมูล. +1
SMMousavi

19

หากคุณไม่ได้กำหนด ServerName ไว้ apache2 จะพยายามเดาจาก / etc / hosts ServerAlias ​​เป็นตัวเลือก กรณีการใช้งานบ่อยที่สุดคือที่

ServerName example.com
ServerAlias www.example.com

มันขึ้นอยู่กับคุณ (ไม่ใช่งาน apache2) เพื่อให้แน่ใจว่าคำขอเข้าถึง IP ของเว็บเซิร์ฟเวอร์เช่นการลงทะเบียนโดเมนและการตั้งค่าระเบียน DNS วิธีทั่วไปในการทำเช่นนั้น (สำหรับการทดสอบและการพัฒนา) โดยไม่มีการบันทึกโดเมนและ DNS คือการตั้งค่าไฟล์ / etc / hosts ในเครื่องของคุณเพื่อให้ example.com ชี้ไปที่ IP ของเซิร์ฟเวอร์ของคุณ

192.168.0.12 example.com
192.168.0.12 www.example.com

0

ฉันขอแนะนำอย่างยิ่งให้อ่านเอกสารอย่างเป็นทางการในหัวข้อ: https://httpd.apache.org/docs/2.4/vhosts/name-based.html

มีข้อความระบุว่า"หากไม่พบ ServerName หรือ ServerAlias ​​ที่ตรงกันในชุดของโฮสต์เสมือนที่มีที่อยู่ IP และพอร์ตที่ตรงกันมากที่สุดจากนั้นโฮสต์เสมือนรายการแรกที่ตรงกับที่จะใช้" . ดังนั้นในกรณีของคุณหากคุณเข้าถึง "foobar.com" รายการ VirtualHost แรกที่ตรงกับ IP 141.29.495.999 จะถูกใช้โดย httpd

เอกสารเดียวกันกล่าวว่า "เซิร์ฟเวอร์หลายแห่งต้องการเข้าถึงได้มากกว่าหนึ่งชื่อซึ่งเป็นไปได้ด้วยคำสั่ง ServerAlias" ดังนั้นคุณสามารถพิจารณา ServerAlias ​​เพียงแค่เป็นรายการ ServerName เพิ่มเติม

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