การสร้าง 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 ก็ได้นะ ใช้ได้เหมือนกันหรือจะดอทอะไรก็ได้หมด
127.0.0.1 www.kusonsamakorn.local |
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 |
3. ลบเครื่องหมาย # ออก อยู่แถวบรรทัด 561
Include conf/extra/httpd-vhosts.conf |
4. เพิ่มสิทธิ์ในการเข้าใช้งานโฟลเดอร์ kusonsamakorn บนไดร์ E: ต่อท้ายสุดไฟล์เข้าไปเลย ไม่ต้องกังวล ผมเก็บโปรเจ็กไว้ในโฟลเดอร์นั้น
<Directory "E:/kusonsamakorn"> Options Indexes FollowSymLinks MultiViews ExecCGI AllowOverride All Allow from all </Directory> |
5. บันทึก ซะ
แก้ไขไฟล์ httpd-vhosts.conf กำหนดที่เก็บโปรเจ็ก kusonsamakorn บนฮาร์ดดิสก์
1. เปิดไฟล์ C:\AppServ\Apache2.2\conf\extra\httpd-vhosts.conf
2. เพิ่มไอ้นี่ต่อท้ายไฟล์เข้าไป
<VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "E:/kusonsamakorn" ServerName kusonsamakorn.local ServerAlias www.kusonsamakorn.local ErrorLog "logs/kusonsamakorn.local-error.log" CustomLog "logs/kusonsamakorn.local-access.log" common </VirtualHost> |
DocumentRoot : คือที่เก็บไฟล์
ServerName : ชื่อโดเมน ต้องเป็นตัวเดียวกับที่ทำไว้ในไฟล์ hosts นะเฮีย
ServerAlias : ชื่อเสมือนโดเมน มันจะได้เข้าได้ทั้งมี www และ ไม่มี
ถ้าท่านสังเกตเวลาท่านท่องไปตามเว็บไซต์ ท่านจะใช้ www หรือไม่ใช้ก็ได้ เขากำหนดกันอย่างนี้แหละ
3. บันทึกซะ
หลังจากเสร็จสิ้นกระบวนการทั้งหมด ให้รีสต้าร์ทอาปาเช่ไปทีนึง ถ้าใครงงๆ ให้อ่านบทความนี้ วิธีรีสตาร์ท apache
คำเตือน : ก่อนจะฝึกเล่น แนะนำให้ทำแบ็กอัพไฟล์ไว้ก่อนแก้
sitti says:
25/08/2554 at 25/08/2554
ขอบพระคุณครับท่าน
ถึงบางอ้อซะที ไม่ยากอย่างที่คิดเลยครับ
mandmod says:
26/08/2554 at 26/08/2554
เป็นบทความที่ดีน่าจะประยุกใช้ได้นะครับ
administrator says:
27/08/2554 at 27/08/2554
ทำใช้ในเครื่องตัวเองก็ดีครับ จะได้ศึกษา บนโฮสต์ที่เขาขายให้คนไปเช่า เขาก็เซ็ต virtual host แบบนี้แหละ
ถึงบางโฮสต์จะใช้ลีนุก แต่ก็หลักการเดียวกัน
อีกอย่างบางบริษัทพัฒนาโปรแกรม เขาก็ใช้ระบบนี้เป็นสภาพแวดล้อม ศึกษาไว้ครับ คุ้ม
soeseo says:
12/11/2555 at 12/11/2555
คุ้มจริงๆครับ
soeseo says:
12/11/2555 at 12/11/2555
เห็นด้วยครับ
ArsBeaL says:
29/08/2554 at 29/08/2554
สอบถามนิดนึงครับ
ถ้าเกิด ใช้ในวงแลนละครับ ตั้งเครื่องเป็น web server ในวงแลน
ปกติเรียกก็เรียกผ่านชื่อเครื่อง ถ้าหากทำง Virtual Host เราสามารถเรียกเป็น
http://www.myproject.local/ จากเครื่องอ่านได้หรือป่าวครับ
administrator says:
30/08/2554 at 30/08/2554
ตรงเครื่องเว็บเซิฟเวอร์เราไม่ต้องทำอะไรครับ ให้ทำที่เครื่องลูกข่าย โดยกำหนดในไฟล์โฮสต์ ให้ http://www.myproject.local/ ชี้ไปที่เลขไอพีของเครื่องเว็บเซิฟเวอร์
ถ้าสมมติเครื่องเว็บเซิฟเวอร์หมายเลข 203.144.1.1 ให้เรากำหนดในไฟล์ host ของเครื่องลูกข่าย ดังนี้
203.144.1.1 http://www.myproject.local
ย้ำไม่จำเป็นต้องตั้งค่าอะไรพิเศษที่เครื่องเว็บเซิฟเวอร์ ให้ไปทำที่เครื่องลูกข่าย ครับผม พอเครื่องลูกข่ายพิมพ์ชื่อเว็บ มันก็จะวิ่งไปที่เครื่องเว็บเซิฟเวอร์ เว็บเซิฟเวอร์ที่ติดตั้งอาปาเช่ไว้แล้วก็จะหยิบ ข้อมูลมาส่งเอง
ฅนหัดเขียน says:
03/10/2554 at 03/10/2554
ตาสว่างสักทีั
ฅนหัดเขียน says:
03/10/2554 at 03/10/2554
ขอบคุณมากๆ ทำให้ได้รู้อะไรบ้างอย่างที่ programmer เข้าไม่บอกกัน แต่เว็บ select2web.com บอกให้รู้และอ่านแล้วเข้าใจ
จากที่ศึกษามา ไม่มีเว็บไหนอธิบายแบบนี้ ส่วนบอกจะอธิบายเชิงวิชาการมากกว่าหรือภาำษาโปรแกรมทำให้คนขัดเขียนอ่านไม่เข้าใจ แต่นี้เป็นการอธิบายแบบภาษาพูดทำให้เข้าใจ และยังเอาแบบที่เข้าใช้งานในเว็บมาสอนให้ใช้งานจริง ขอบคุณเว็บ select2web.com มากๆ ขอให้เว็บนี้อยู่ไปนานอีกนานๆ ยังเป็นแฟนพันแท้อยู่
Nutchapong says:
17/08/2555 at 17/08/2555
สอบถามหน่อยครับว่า ถ้า set ตามตัวอย่างแล้วขึ้น error
“Not Found
The requested URL /northclippingfile was not found on this server.”
จะต้องแก้ไขยังไงครับผม
num says:
15/11/2555 at 15/11/2555
“Not Found
ของผมขึ้นแบบนี้จะต้องแก่ ยังไงคัฟ
num says:
15/11/2555 at 15/11/2555
รอคำตอบยูนะคัฟ
num says:
15/11/2555 at 15/11/2555
Forbidden
You don’t have permission to access / on this server.
Apache/2.2.8 (Win32) PHP/5.2.6 Server at http://www.vrp.local Port 80
แบบนี้คัฟ ต้องแก้ไขอะไรต่อคัฟ พอดีผมสนใจเรื่องนี้อะคัฟ ช่วยหน่อยนะคัฟ
วัชรเมธน์ ชิษณุคุปต์ ศรีเนธิโรทัย says:
16/11/2555 at 16/11/2555
อ่านบทความผมให้ละเอียด แล้วตรวจดูอีกครั้งว่าลืมตรงไหนไปบ้าง บทความนี้ผมรับรองว่าใช้ได้จริง ถ้าทำตามถูกทุกขั้นตอน จะไม่มีอะไรๆ มาขัดขวางคุณเลย ผมรับรอง
num says:
16/11/2555 at 16/11/2555
แก้ Forbidden ได้แล้วคัฟ เข้าเว็บได้ตามปกติ
แต่……………………….. ผมได้ส่ง ลิงค์ ให้เพื่อนเปิด แล้วมันขึ้น Server not found
ซึ่งผมได้ทำดังนี้ แต่ เพื่อนยังเปิดไม่ได้คัฟ
ผมได้สมัคร no-ip
และทำการ forwarding port 80 ไปที่ ip เครื่องของผม เรียบร้อย
แล้วทำการปิด firewall
แต่ยังไม่ได้
* เปิดได้แต่ในเครือข่ายเดียวกันคัฟ คือ วง เดียวกันอะคัฟ*
รบกวนหน่อยนะคัฟ ต้องการศึกษาเรื่องนี้จริงๆๆ
ขอบคุณลวงหน้านะคัฟ
วัชรเมธน์ ชิษณุคุปต์ ศรีเนธิโรทัย says:
19/11/2555 at 19/11/2555
ต้องขออภัยจริงๆ เรื่อง no-ip คงต้องอาศัยท่านอื่นมาตอบละครับ ถ้าผมมีเวลา จะศึกษาเรื่อง no-ip แล้วจะมาเล่าสู่กันฟังครับ
แต่ทั้งนี้ทั้งนั้น ไม่ต้องรอผมนะครับ ไม่รู้จะว่างเมื่อไร
Pootipong says:
24/02/2557 at 24/02/2557
ขอบคุณมากๆ คับ ทำให้กระจ่าง ภาษาโปรแกรมมันยากอยู่แล้วสำหรับมือใหม่ แต่นี้มาทำให้เป็นภาษาพุดทำให้เข้าใจยิ่งขึ้น จากที่ศึกษาหลายเว็บอธิบายก็ยังไม่เข้าใจ เป็นเว็บประจำใจ เข้ามาศึกษาบ่อยต่าม ตามบทความมาตลอด
Krissanawat says:
04/04/2557 at 04/04/2557
ขอบคุณมากครับ
ผมจะหา path ของ hosts เมื่อไหร่ต้องงเข้ามาดูเว็บนี้ทุกที
เวลาเปิดดูตรงๆ เหมือนมันโดนซ่อนไว้ แต่เวลาพิมพ์ path เข้าไปตรงๆ เจอซะอีก
งงเลยครับ
วัชรเมธน์ ชิษณุคุปต์ ศรีเนธิโรทัย says:
05/07/2557 at 05/07/2557
ไฟล์ hosts เขาซ่อนไว้นั่นแหละท่าน เพราะมันเป็นไฟล์สำคัญของระบบ เขาไม่อยากให้เด็กไปเล่น มันสามารถเซ็ตไม่ให้เข้าเว็บใดๆได้เลย ผ่านไฟล์นี้ก็ได้ แบบว่าไม่ว่าเข้าเว็บใด ให้มันกลับมาที่ 127.0.0.1