Aug. 11
24

วิธีสร้าง Virtual host

การสร้าง 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 ก็ได้นะ ใช้ได้เหมือนกันหรือจะดอทอะไรก็ได้หมด

[code lang="plain"]127.0.0.1 www.kusonsamakorn.local[/code]

virtual-host-1

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]

virtual-host-2

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

[code lang="plain"]Include conf/extra/httpd-vhosts.conf[/code]

virtual-host-3

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

[code lang="plain"]
<Directory "E:/kusonsamakorn">
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Allow from all
</Directory>
[/code]

virtual-host-4

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]

virtual-host-5

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

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

3. บันทึกซะ

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

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

บทความน่าสนใจ

  1. วิธีย้ายที่เก็บเว็บไซต์ สำหรับผู้ลง AppServ
  2. ปัญหา CPU full load เมื่อลง AppServ 2.5.8
  3. ย้าย webroot สำหรับ run php กัน
  4. เดอะ แซ้มพ์ (XAMPP)
  5. วิธีแก้ปัญหา SMTP Error: Could not connect to SMTP host
This entry was posted in PHP and tagged , , , . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

7 Comments

  1. sitti MSIE 8.0 Windows XP
    Posted 25/08/2011 at 10:13 | Permalink

    ขอบพระคุณครับท่าน
    ถึงบางอ้อซะที ไม่ยากอย่างที่คิดเลยครับ

  2. mandmod Firefox 6.0 Windows 7
    Posted 26/08/2011 at 10:54 | Permalink

    เป็นบทความที่ดีน่าจะประยุกใช้ได้นะครับ

    • administrator Firefox 6.0 Windows 7
      Posted 27/08/2011 at 13:48 | Permalink

      ทำใช้ในเครื่องตัวเองก็ดีครับ จะได้ศึกษา บนโฮสต์ที่เขาขายให้คนไปเช่า เขาก็เซ็ต virtual host แบบนี้แหละ
      ถึงบางโฮสต์จะใช้ลีนุก แต่ก็หลักการเดียวกัน

      อีกอย่างบางบริษัทพัฒนาโปรแกรม เขาก็ใช้ระบบนี้เป็นสภาพแวดล้อม ศึกษาไว้ครับ คุ้ม

  3. ArsBeaL Chrome 13.0.782.215 Windows XP
    Posted 29/08/2011 at 08:41 | Permalink

    สอบถามนิดนึงครับ

    ถ้าเกิด ใช้ในวงแลนละครับ ตั้งเครื่องเป็น web server ในวงแลน

    ปกติเรียกก็เรียกผ่านชื่อเครื่อง ถ้าหากทำง Virtual Host เราสามารถเรียกเป็น

    http://www.myproject.local/ จากเครื่องอ่านได้หรือป่าวครับ

    • administrator Firefox 6.0 Windows 7
      Posted 30/08/2011 at 19:57 | Permalink

      ตรงเครื่องเว็บเซิฟเวอร์เราไม่ต้องทำอะไรครับ ให้ทำที่เครื่องลูกข่าย โดยกำหนดในไฟล์โฮสต์ ให้ http://www.myproject.local/ ชี้ไปที่เลขไอพีของเครื่องเว็บเซิฟเวอร์

      ถ้าสมมติเครื่องเว็บเซิฟเวอร์หมายเลข 203.144.1.1 ให้เรากำหนดในไฟล์ host ของเครื่องลูกข่าย ดังนี้
      203.144.1.1 http://www.myproject.local

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

  4. ฅนหัดเขียน Firefox 6.0.2 Windows XP
    Posted 03/10/2011 at 10:33 | Permalink

    ตาสว่างสักทีั

  5. ฅนหัดเขียน Firefox 6.0.2 Windows XP
    Posted 03/10/2011 at 10:42 | Permalink

    ขอบคุณมากๆ ทำให้ได้รู้อะไรบ้างอย่างที่ programmer เข้าไม่บอกกัน แต่เว็บ select2web.com บอกให้รู้และอ่านแล้วเข้าใจ
    จากที่ศึกษามา ไม่มีเว็บไหนอธิบายแบบนี้ ส่วนบอกจะอธิบายเชิงวิชาการมากกว่าหรือภาำษาโปรแกรมทำให้คนขัดเขียนอ่านไม่เข้าใจ แต่นี้เป็นการอธิบายแบบภาษาพูดทำให้เข้าใจ และยังเอาแบบที่เข้าใช้งานในเว็บมาสอนให้ใช้งานจริง ขอบคุณเว็บ select2web.com มากๆ ขอให้เว็บนี้อยู่ไปนานอีกนานๆ ยังเป็นแฟนพันแท้อยู่

Post a Comment

You must be logged in to post a comment.