Saturday, December 25, 2010

ประสพการณ์การตั้ง VirtualHost ด้วย 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 ก็สามารถเรียกได้ครอบคลุมทั้งหมด


จาก
http://wiki.opentle.org/%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B8%AA%E0%B8%9E%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%93%E0%B9%8C%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87_VirtualHost_%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2_Apache2

0 comments:

Post a Comment

 
Design by GURU