ประสพการณ์การตั้ง VirtualHost ด้วย Apache2

จาก OpenTLE Wiki

ข้ามไปที่: ป้ายบอกทาง, ค้นหา

เนื้อหา

บทนำ

เรียบเรียงจาก คำถาม http://www.opentle.org/th/node/4776 เป็นการตั้งค่าให้server ให้เป็นweb hostingรองรับหลายๆโดเมนที่เรียกว่า Virtual Host ด้วย Apache2


ปัญหาที่พบ

ได้ตั้ง Webserver ให้รองรับหลายๆโดเมนที่เรียกว่า Virtual Host ด้วย Apache2 โดยมี Domain สมมุติว่าตั้งชื่อว่า

Domain1.com กับ Domain2.com

โดยใช้ Domain1.com เป็นโดเมนหลัก สมมุติของเซิร์ฟเวอร์ชื่อว่า server ดังนั้นจะมีรูปแบบว่า server.domain1.com config file อยู่ที่ /etc/Apache2/sites-enables/000-default โดยตั้ง config file ดังนี้

NameVirtualHost *:80
<VirtualHost *>
ServerAdmin webmaster@localhost
ServerName domain1.com
DocumentRoot /home/www/hosts/domain1.com/docs
<Directory>
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/www/host/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
# Uncomment this directive if you want to see apache2's
# default start page (in /apache2-default) when you go to / #RedirectMatch ^/$ /apache2-default/
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
</Directory "/usr/lib/cgi-bin/">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature On
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews
FollowSymLinks AllowOverride None
Order deny,allow Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>

Domain2.com มี config file อยู่ที่ /etc/Apache2/sites-enabled/domain2.com.conf

<VirtualHost *>
DocumentRoot "/home/www/hosts/domain2.com/docs"
ServerName domain2.com
<Directory /home/www/host/domain2.com/docs
allow from all
Options +Indexes
</Directory>
</VirtualHost> 


ปัญหาพบว่า พอเรียกเวบในชื่อของ domain2.com จะได้หน้าเวบของ domain1.com ซึ่งทำหน้าที่เป็นเซิร์ฟเวอร์หลักมาขึ้นแทนทั้งหมด

แสดงว่า Web server ที่ต้องการตั้งแบบVirtual Host ไม่ทำงาน


สาเหตุปัญหา

หลังจากได้ลอง และทดสอบจนแน่ใจแล้ว พบว่าปัญหานี้เกิดจาก การเอาconfigไปไว้ ตามคำแนะนำของ Apache2 คือที่ /etc/apache2/site-available/....


การแก้ปัญหา

ต้องเอาค่าที่ตั้ง(config) สำหรับการตั้งแบบ virtual hostไปไว้ที่ apache2.conf หรือ httpd.conf ก็ได้ ตำแหน่งไฟล์อยู่ที่นี่

/etc/apache2/apache2.conf

และ แบบดั้งเดิมก็ที่ httpd.conf ตรงตำแหน่ง

/etc/apache2/httpd.conf

หรือลงเพิ่มได้ทั้ง ๒ ที่ดังข้างบนตามใจชอบ ซึ่งก็เป็นวิธีการตั้ง Subdomain นั่นเอง โดยSubdomain ที่ตั้งต้องไม่ซ้ำกัน โดยแสดงตัวอย่างให้เห็นอย่างชัดเจนว่า

Subdomain พื้นฐานที่ตั้งให้ domain1.com คือ

www.domain1.com กับ domain1.com

Subdomain พื้นฐานที่ตั้งให้ domain2.com คือ

www.domain2.com กับ domain2.com

ถือว่าไม่ซ้ำกัน และจะมีการตั้ง Subdomain ที่ต้องตั้งให้แต่ละโดเมนรวม ๒ แบบ

การตั้งค่าโดเมนตามวิธีนี้ ยังสามารถแก้ปัญหา การเรียกชื่อเว็บที่เรียกได้อย่างใดอย่างหนึ่งด้วย โดยไม่ว่าจะเรียก www.domain.com หรือ domain.com ก็สามารถเรียกได้ครอบคลุมทั้งหมด

เครื่องมือส่วนตัว