การสร้าง Virtual Host

  • มีประโยชน์ต่อการเขียนโปรแกรมอย่างไร
  • ทำอย่างไร

มีประโยชน์ต่อการเขียนโปรแกรมอย่างไร

สภาพแวดล้อมที่ผมทำ appserv 2.5.10,window 7 ( ไม่ต่างอันใดกับ XP )

โดยปกติเราจะเก็บโปรเจ็ก PHP ของเราไว้ในโฟลเดอร์ C:\AppServ\www โปรเจ็กหนึ่งก็โฟลเดอร์หนึ่ง เวลาทดสอบโค้ดเราก็เบราเซอร์ไปที่ http://localhost/myproject/ รู้สึกเหมือนมันเป็นโฟลเดอร์ย่อย และมันก็เป็นโฟลเดอร์ย่อยจริงๆ

อีกอย่างเวลาที่เราต้องการฟอร์แมตเครื่อง เพื่อลงวินโดวใหม่ เราจะลืมโฟลเดอร์นี้ไม่ได้เลย ต้องแบ็กอัพเสมอ ลืมละก้อชีวิตต้องมีอันเป็นไป

มันมีวิธีอยู่วิธีหนึ่ง ที่จะทำให้ URL จาก http://localhost/myproject/ กลายเป็น http://www.myproject.local/ จะให้มันเป็น .com ไปเลยก็ได้ แต่เพื่อแบ่งแยกให้ชัดเจนระหว่างโปรเจ็กที่ออนไลน์อยู่ กับโปรเจ็กในเครื่องเรา จึงเลือกใช้ .local

จะเห็นว่า URL มันให้ความรู้สึกที่ดีกว่าในยามมอง หรือพิมพ์ง่ายกว่า เพราะ URL มันใกล้เคียงกันระหว่างตัวออนไลน์ กับตัวในเครื่อง

อีกอย่าง ผมเคยเจองานของบางคน ที่เขาเก็บ URL แบบเต็มไว้ในฐานข้อมูล เพื่อกำหนดโปรแกรมเข้าไปยังส่วนต่างๆ  เขาวานให้ช่วยแก้ เราต้องเอาฐานข้อมูลเขามารันในเครื่องเรา มันจะรันไม่ได้ เพราะพาธที่ดึงออกจากฐานข้อมูลมันเป็น http://www.  ส่วนเครื่องเราดันเป็น http://localhost จะแก้พาธที่เขาเก็บไว้ก็เรื่องใหญ่ เราก็ต้องอาศัยการทำ Virtual host ช่วย

อีกอย่าง เอ๊า… ยังไม่หมด เราสามารถรันโปรเจ็กเราจากไดร์ D,E หรือไดรอื่น ที่มันไม่ใช่ไดรฟ์ C ได้เลย

เราจะต้องปรับแต่งไฟล์ทั้งหมด 3 ไฟล์

  1. C:\Windows\System32\drivers\etc\hosts
  2. C:\AppServ\Apache2.2\conf\httpd.conf
  3. C:\AppServ\Apache2.2\conf\extra\httpd-vhosts.conf

ขอเล่าเบื้องหลังการทำงานของระบบ Network สักหน่อย

เมื่อเราเปิดเบราเซอร์ พิมพ์ URL เข้าเว็บบางอย่าง พิมพ์ๆๆๆ เข้าไปในช่องแอดเดรสบาร์ กด Enter ตูม เบราเซอร์จะบอกวินโดว ว่า เฮ้ย… โด้ว ข้าต้องการเนื้อหาเพจนี้ แกไปเอาให้หน่อย วินโดวเมื่อได้รับคำร้องขอ มันก็จะดูว่าหน้าเพจนั้นอยู่ที่เว็บไซต์ไหน จากนั้นวินโดวจะไปเปิดไฟล์  C:\Windows\System32\drivers\etc\hosts ดูว่าเส้นทางมันไปทางไหน (ในไฟล์นี้จะเก็บชื่อ URL คู่กับเลข IP ไว้ ก็เรียนกันมาแล้วว่า เวลาเครื่องคอมพิวเตอร์มันติดต่อกัน มันจะติดต่อกันด้วยตัวเลข)

ถ้าเปิดมาแล้วไม่เจอข้อมูล วินโดวมันจะส่ง คำร้องนั้นกระจายไปในวงแลน ถ้าไม่มีคำตอบอีกมันก็จะส่งต่อไปยัง ผู้ให้บริการอินเตอร์เน็ตที่กำลังเชื่อมต่ออยู่ ขอตัดฉากเดี๋ยวยาว

ถ้าเปิดมาแล้วเจอว่า อยู่ที่เครื่อง 127.0.0.1 อุ๊ย… บ้านตรูเอง (เครื่องเราเองนี่) เมื่อรู้อย่างนั้นแล้ว วินโดวมันจะไปถาม Apache เพื่อให้อาป้าเช (เป็นอาของป้าของไอ้เช)

อาปาเช่จะไปดูในเอกสาร C:\AppServ\Apache2.2\conf\httpd.conf ของตัวเอง ว่าได้โหลดปลักอิน vhost ขึ้นมาหรือเปล่า ถ้าโหลดขึ้นมามันจะไปเปิดเอกสารอีกฉบับหนึ่ง C:\AppServ\Apache2.2\conf\extra\httpd-vhosts.conf เพื่อดูว่าหน้าเพจที่วินโดวต้องการนั้น เก็บไว้บนฮาร์ดดิสก์ ตำแหน่งใด

เมื่อรู้แล้ว มันจะกลับไปดูไฟล์ C:\AppServ\Apache2.2\conf\httpd.conf อีกทีว่า ได้กำหนดสิทธิ์ในการใช้งานโฟลเดอร์ที่เก็บหน้าเพจ ไว้อย่างไร ก็เพื่อความปลอดภัยนั่นแหละจ้า ถ้าในนั้นกำหนดว่าอนุญาติให้ อ่าน/เขียน/ลบ ก็ได้ อาปาเช่ก็จะหยิบเอาหน้าเพจที่วินโดวต้องการ ยื่นให้วินโดว แต่เดี๋ยวก่อน ก่อนยื่นให้ อาปาเช่จะดูอีกทีก่อน ถ้าหน้าเพจมีนามสกุล .php มันจะไปเรียกตัวแปลภาษา PHP ขึ้นมาแปลให้เป็น HTML ก่อน จึงส่งให้วินโดว

เมื่อวินโดวได้รับหน้าเพจมาแล้ว ก็จะส่งต่อให้เบราเซอร์ เบราเซอร์เอามาแสดงผลให้เราดู เป็นอันจบการติดต่อสื่อสารระหว่างกัน

เริ่มสร้าง Virtual Host

แก้ไขไฟล์ hosts กำหนดเส้นทาง

1. เปิดไฟล์ C:\Windows\System32\drivers\etc\hosts ขึ้นมาด้วยโปรแกรม Notepad

2. เพิ่มชื่อเว็บไซต์สมมติเข้าไป ชี้กลับมาที่เครื่องเราเอง ท่านจะใช้ .com ก็ได้นะ ใช้ได้เหมือนกันหรือจะดอทอะไรก็ได้หมด

127.0.0.1		www.kusonsamakorn.local

virtual-host-1

3. บันทึก ซะ

แก้ไขไฟล์ httpd.conf

กำหนดให้โหลดปลักอิน mod_vhost_alias และกำหนดสิทธิ์เข้าใช้งานโฟลเดอร์บนฮาร์ดดิสก์

1. เปิดไฟล์ C:\AppServ\Apache2.2\conf\httpd.conf

2. ลบเครื่องหมาย # ออก อยู่แถวบรรทัด 203

LoadModule vhost_alias_module modules/mod_vhost_alias.so

virtual-host-2

3. ลบเครื่องหมาย # ออก อยู่แถวบรรทัด 561

Include conf/extra/httpd-vhosts.conf

virtual-host-3

4. เพิ่มสิทธิ์ในการเข้าใช้งานโฟลเดอร์ kusonsamakorn บนไดร์ E: ต่อท้ายสุดไฟล์เข้าไปเลย ไม่ต้องกังวล  ผมเก็บโปรเจ็กไว้ในโฟลเดอร์นั้น

<Directory "E:/kusonsamakorn">
    Options Indexes FollowSymLinks MultiViews ExecCGI
    AllowOverride All
    Allow from all
</Directory>

virtual-host-4

5. บันทึก ซะ

แก้ไขไฟล์ httpd-vhosts.conf กำหนดที่เก็บโปรเจ็ก kusonsamakorn บนฮาร์ดดิสก์

1. เปิดไฟล์ C:\AppServ\Apache2.2\conf\extra\httpd-vhosts.conf

2. เพิ่มไอ้นี่ต่อท้ายไฟล์เข้าไป

<VirtualHost *:80>
    ServerAdmin webmaster@kusonsamakorn.local
    DocumentRoot "E:/kusonsamakorn"
    ServerName kusonsamakorn.local
	ServerAlias www.kusonsamakorn.local
    ErrorLog "logs/kusonsamakorn.local-error.log"
    CustomLog "logs/kusonsamakorn.local-access.log" common
</VirtualHost>

virtual-host-5

DocumentRoot : คือที่เก็บไฟล์
ServerName : ชื่อโดเมน ต้องเป็นตัวเดียวกับที่ทำไว้ในไฟล์ hosts นะเฮีย
ServerAlias : ชื่อเสมือนโดเมน มันจะได้เข้าได้ทั้งมี www และ ไม่มี

ถ้าท่านสังเกตเวลาท่านท่องไปตามเว็บไซต์ ท่านจะใช้ www หรือไม่ใช้ก็ได้ เขากำหนดกันอย่างนี้แหละ

3. บันทึกซะ

หลังจากเสร็จสิ้นกระบวนการทั้งหมด ให้รีสต้าร์ทอาปาเช่ไปทีนึง ถ้าใครงงๆ ให้อ่านบทความนี้ วิธีรีสตาร์ท apache

คำเตือน : ก่อนจะฝึกเล่น แนะนำให้ทำแบ็กอัพไฟล์ไว้ก่อนแก้