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