วันอาทิตย์ที่ ๑๕ กรกฎาคม พ.ศ. ๒๕๕๐

Virtual Host บน Apache ง่ายนิดเดียว

การให้บริการด้านข้อมูลข่าวสาร ก็คงหลีกหนีไม่ได้เรื่องของการทำเว็บไซต์เพื่อเผยแพร่ข่าวสาร การมี Domain name ก็เพื่อแปลงชื่อ Host ไปเป็น IP ในกรณีที่ ไม่มีชื่อ Domain ก็คงจะใช้วิธีอ้างอิงผ่าน IP Address กัน เช่น http://192.168.1.4 ก็จะเข้าเว็บไซต์ที่วางไว้ที่เครื่องหมายเลข IP 192.168.1.4 แต่ถ้าต้องการให้ IP นี้สามารถวางได้หลายเว็บไซต์แล้ว ก็ต้องทำ Virtual Host กันหล่ะ ซึ่งหลาย ๆ ชื่อเช่น www.myweb.com, webboard.myweb.com, elearning.myweb.com ซึ่งสมมุติว่าให้มันมี IP เดียวกัน เราก็จะสามารถให้ผู้ใช้เข้าดูเว็บผ่านแต่ละ host นี้ได้ โดยการเข้าแต่ละ host ก็จะไปดึงข้อมูลจากคนละ directory มา นี่คือ Virtual Host ครับ ซึ่งวิธีง่าย ๆ ในการให้ Apache ทำงานได้อย่างนี้ได้ ก็ต้องมีความเข้าใจเรื่อง DNS บ้าง ศึกษาได้จาก BIND The Most Poppular Domain Name Server ครับ วิธีการก็ไม่ยาก

1. ไปเพิ่มชื่อ host ลงใน Domain ของเรา ตามวิธีการของการติดตั้งและตั้งค่า Domain Name Server ข้างบน ดังตัวอย่างนี้จะใช้ชื่อ host ว่า "testdrive.aon-nok.com" ซึ่งจะเป็น CName ของ "ns1.aon-nok.com" จาก zone ไฟล์ตัวอย่างที่เพิ่มเข้าไป
$TTL 3600        ; 1 hour
aon-nok.com. IN SOA ns1.aon-nok.com. root.ns1.aon-nok.com. (
20070628 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ; Minimum
)

IN A 192.168.0.1

; ชื่อของ โดเมนเนม Server
IN NS ns1.aon-nok.com.

; ชื่อ host ของ mail exchang สำหรับ รับส่งเมล์
IN MX 10 mail.aon-nok.com.

; ชื่อ host ต่าง ๆ ภายใน Domain ของเราที่ต้องการ map กับ IP ใด ๆ
localhost IN A 127.0.0.1
ns1 IN A 192.168.0.2
mail IN A 192.168.0.3
mx IN A 192.168.0.4

; ชื่อเสมือน หรือ ชื่อปลอม
www IN CNAME ns1.aon-nok.com.
webboard IN CNAME ns1.aon-nok.com.
testdrive IN CNAME ns1.aon-nok.com
หลังจากแก้ไขไฟล์นี้ และ save เสร็จเรียบร้อย ก็สั่ง reload โดเมนด้วยคำสั่ง
#rndc reload (คำสั่งสำหรับ โหลด zone ไฟล์ ใหม่ ดูรายละเอียดคำสั่ง rndc ด้วย man rndc)
2. หลังจากเพิ่ม host ลงไปใน zone ไฟล์เรียบร้อยแล้ว เราก็จะมาแก้ไขค่า config ของ Apache กันสักเล็กน้อย อันดับแรก แก้ไขไฟล์ /usr/local/etc/apache22/httpd.conf
ค้นหาบรรทัด

# Virtual hosts
#Include etc/apache22/extra/httpd-vhosts.conf

ให้ลบ # ออกจากบรรทัดที่ 2 เพื่อเปิดการใช้งาน Virtual Host ดังนี้

# Virtual hosts

Include etc/apache22/extra/httpd-vhosts.conf

เสร็จแล้วก็ Save
3. หลังจากนั้นก็ แก้ไขไฟล์ /usr/local/etc/apache22.extra/httpd-vhosts.conf ซึ่งจะมีค่านี้อยู่แล้ว
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /www/docs/dummy-host.example.com
ServerName dummy-host.example.com
ServerAlias www.dummy-host.example.com
ErrorLog /var/log/dummy-host.example.com-error_log
CustomLog /var/log/dummy-host.example.com-access_log common
</VirtualHost>

<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot /www/docs/dummy-host2.example.com
ServerName dummy-host2.example.com
ErrorLog /var/log/dummy-host2.example.com-error_log
CustomLog /var/log/dummy-host2.example.com-access_log common
</VirtualHost>
ก็แก้ไขดังนี้
<VirtualHost *:80>
ServerAdmin webmaster@aon-nok.com
DocumentRoot /usr/local/www/apache22/reserved.aon-nok.com
ServerName reserved.aon-nok.com
ErrorLog /var/log/reserved.aon-nok.com-error_log
CustomLog /var/log/reserved.aon-nok.com-access_log common
</VirtualHost>

<VirtualHost *:80>
ServerAdmin webmaster@aon-nok.com
DocumentRoot /usr/local/www/apache22/testdrive.aon-nok.com
ServerName testdrive.aon-nok.com
ErrorLog /var/log/testdrive.aon-nok.com-error_log
CustomLog /var/log/testdrive.aon-nok.com-access_log common
</VirtualHost>
4. คำอธิบาย Virtual Host ชุดที่ 1 จะมีไว้สำหรับเป็น Default ของ เว็บไซต์ เช่นกรณีที เข้าผ่าน ip เว็บไซต์นี้ก็จะโชว์ แต่ถ้าเรียกด้วย testdrive.aon-nok.com ก็จะเข้าไปเรียกเว็บไซต์ที่ /usr/local/www/apache22/testdrive.aon-nok.com ตามที่เรากำหนดใน DocumentRoot ครับ อธิบายนิดนึง
ServerAdmin : กำหนด Email ของผู้เป็นเจ้าของ
DocumentRoot : ต้องสร้าง Directory เพื่อเก็บไฟล์ของเว็บไซต์แล้วกำหนดไว้ที่นี่
ServerName : เป็นชื่อ Host ที่ต้องการ
ErrorLog : เลือกว่าจะเก็บไฟล์สถานะของการ error ไว้ที่ไหน
CustomLog : เลือกว่าจะเก็บไฟล์ access log ไว้ที่ไหน
5. หลังจากนั้นก็ลอง Restart Apache ก็จะใช้งานได้ครับ
หวังว่าคงเป็นแนวทางในการใช้งานไม่มากก็น้อยนะครับ

๓ ความคิดเห็น:

มะขาม กล่าวว่า...

ติดตามตลอด
เพิ่มคุณภาพมาเรื่อยๆน่ะ
อ้อ ขอให้ระมัดระวัง ความถูกต้องทางวิชาการด้วยน่ะ

เยี่ยมครับ ได้ไอเดียทันควัน

Aphorist กล่าวว่า...

ขอบคุณครับ ผมพยายามหา reference จาก เว็บต่างประเทศบ่อย ๆ แปลผิดแปรถูกก็ขออภัยด้วยครับ

Aphorist กล่าวว่า...

แก้ที่ผิดนะครับ

3. หลังจากนั้นก็ แก้ไขไฟล์ /usr/local/etc/apache22.extra/httpd-vhosts.conf ซึ่งจะมีค่านี้อยู่แล้ว

เป็น /usr/local/etc/apache22/extra/httpd-vhosts.conf เพราะว่า . กับ / มันอยู่ใกล้กันเหลือเกิน