
การสร้าง 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 ไฟล์
- C:\Windows\System32\drivers\etc\hosts
- C:\AppServ\Apache2.2\conf\httpd.conf
- 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 ก็ได้นะ ใช้ได้เหมือนกันหรือจะดอทอะไรก็ได้หมด
[code lang="plain"]127.0.0.1 www.kusonsamakorn.local[/code]
3. บันทึก ซะ
แก้ไขไฟล์ httpd.conf
กำหนดให้โหลดปลักอิน mod_vhost_alias และกำหนดสิทธิ์เข้าใช้งานโฟลเดอร์บนฮาร์ดดิสก์
1. เปิดไฟล์ C:\AppServ\Apache2.2\conf\httpd.conf
2. ลบเครื่องหมาย # ออก อยู่แถวบรรทัด 203
[code lang="plain"]LoadModule vhost_alias_module modules/mod_vhost_alias.so[/code]
3. ลบเครื่องหมาย # ออก อยู่แถวบรรทัด 561
[code lang="plain"]Include conf/extra/httpd-vhosts.conf[/code]
4. เพิ่มสิทธิ์ในการเข้าใช้งานโฟลเดอร์ kusonsamakorn บนไดร์ E: ต่อท้ายสุดไฟล์เข้าไปเลย ไม่ต้องกังวล ผมเก็บโปรเจ็กไว้ในโฟลเดอร์นั้น
[code lang="plain"]
<Directory "E:/kusonsamakorn">
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Allow from all
</Directory>
[/code]
5. บันทึก ซะ
แก้ไขไฟล์ httpd-vhosts.conf กำหนดที่เก็บโปรเจ็ก kusonsamakorn บนฮาร์ดดิสก์
1. เปิดไฟล์ C:\AppServ\Apache2.2\conf\extra\httpd-vhosts.conf
2. เพิ่มไอ้นี่ต่อท้ายไฟล์เข้าไป
[code lang="plain"]
<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>
[/code]
DocumentRoot : คือที่เก็บไฟล์
ServerName : ชื่อโดเมน ต้องเป็นตัวเดียวกับที่ทำไว้ในไฟล์ hosts นะเฮีย
ServerAlias : ชื่อเสมือนโดเมน มันจะได้เข้าได้ทั้งมี www และ ไม่มี
ถ้าท่านสังเกตเวลาท่านท่องไปตามเว็บไซต์ ท่านจะใช้ www หรือไม่ใช้ก็ได้ เขากำหนดกันอย่างนี้แหละ
3. บันทึกซะ
หลังจากเสร็จสิ้นกระบวนการทั้งหมด ให้รีสต้าร์ทอาปาเช่ไปทีนึง ถ้าใครงงๆ ให้อ่านบทความนี้ วิธีรีสตาร์ท apache
คำเตือน : ก่อนจะฝึกเล่น แนะนำให้ทำแบ็กอัพไฟล์ไว้ก่อนแก้












7 Comments
ขอบพระคุณครับท่าน
ถึงบางอ้อซะที ไม่ยากอย่างที่คิดเลยครับ
เป็นบทความที่ดีน่าจะประยุกใช้ได้นะครับ
ทำใช้ในเครื่องตัวเองก็ดีครับ จะได้ศึกษา บนโฮสต์ที่เขาขายให้คนไปเช่า เขาก็เซ็ต virtual host แบบนี้แหละ
ถึงบางโฮสต์จะใช้ลีนุก แต่ก็หลักการเดียวกัน
อีกอย่างบางบริษัทพัฒนาโปรแกรม เขาก็ใช้ระบบนี้เป็นสภาพแวดล้อม ศึกษาไว้ครับ คุ้ม
สอบถามนิดนึงครับ
ถ้าเกิด ใช้ในวงแลนละครับ ตั้งเครื่องเป็น web server ในวงแลน
ปกติเรียกก็เรียกผ่านชื่อเครื่อง ถ้าหากทำง Virtual Host เราสามารถเรียกเป็น
http://www.myproject.local/ จากเครื่องอ่านได้หรือป่าวครับ
ตรงเครื่องเว็บเซิฟเวอร์เราไม่ต้องทำอะไรครับ ให้ทำที่เครื่องลูกข่าย โดยกำหนดในไฟล์โฮสต์ ให้ http://www.myproject.local/ ชี้ไปที่เลขไอพีของเครื่องเว็บเซิฟเวอร์
ถ้าสมมติเครื่องเว็บเซิฟเวอร์หมายเลข 203.144.1.1 ให้เรากำหนดในไฟล์ host ของเครื่องลูกข่าย ดังนี้
203.144.1.1 http://www.myproject.local
ย้ำไม่จำเป็นต้องตั้งค่าอะไรพิเศษที่เครื่องเว็บเซิฟเวอร์ ให้ไปทำที่เครื่องลูกข่าย ครับผม พอเครื่องลูกข่ายพิมพ์ชื่อเว็บ มันก็จะวิ่งไปที่เครื่องเว็บเซิฟเวอร์ เว็บเซิฟเวอร์ที่ติดตั้งอาปาเช่ไว้แล้วก็จะหยิบ ข้อมูลมาส่งเอง
ตาสว่างสักทีั
ขอบคุณมากๆ ทำให้ได้รู้อะไรบ้างอย่างที่ programmer เข้าไม่บอกกัน แต่เว็บ select2web.com บอกให้รู้และอ่านแล้วเข้าใจ
จากที่ศึกษามา ไม่มีเว็บไหนอธิบายแบบนี้ ส่วนบอกจะอธิบายเชิงวิชาการมากกว่าหรือภาำษาโปรแกรมทำให้คนขัดเขียนอ่านไม่เข้าใจ แต่นี้เป็นการอธิบายแบบภาษาพูดทำให้เข้าใจ และยังเอาแบบที่เข้าใช้งานในเว็บมาสอนให้ใช้งานจริง ขอบคุณเว็บ select2web.com มากๆ ขอให้เว็บนี้อยู่ไปนานอีกนานๆ ยังเป็นแฟนพันแท้อยู่