สนับสนุนเว็บ

ผู้เขียน หัวข้อ: คอนฟิกหลายชื่อเว็บไซต์บนเว็บเซิร์ฟเวอร์เครื่องเดียวด้วย Apache VirtualHost  (อ่าน 277 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ นๅยด้ามขวาน

  • ออฟไลน์
  • 49115
    30336
    64866



  • Administrator
  • *****
  • สมัครสมาชิกเมื่อ 17/07/2009
    YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
  • กระทู้ : 49115
  • Like Post : 64866
  • Peny : 30336
  • 16

    • ดูรายละเอียด


  • เข้าใช้งานล่าสุดเมื่อ 8 ชั่วโมงที่แล้ว


คอนฟิกหลายชื่อเว็บไซต์บนเว็บเซิร์ฟเวอร์เครื่องเดียวด้วย Apache VirtualHost

วิธีการหนึ่งสำหรับคนที่ต้องการมีเว็บไซต์บนอินเตอร์เน็ตเป็นของตัวเอง คือใช้บริการ Web Hosting

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

โดยทั่วไป ผู้ให้บริการ Web Hosting อาจมีเซิร์ฟเวอร์เพียงไม่กี่เครื่องเท่านั้น โดยแต่ละเครื่องสามารถคอนฟิกเพื่อให้รองรับจำนวนเว็บไซต์ได้เป็นหลักร้อย หลักพัน หรือเคยได้ยินมาว่าบางที่ ที่ค่าบริการถูกมากๆ มีจำนวนเว็บไซต์ต่อเครื่องถึงหลักหมื่นเลยทีเดียว

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

บทความนี้จะอธิบายวิธีการคอนฟิก Apache VirtualHost บน Fedora 16

ระบบทดสอบ

    Fedora 16
    IP Address: 192.168.5.16

ในที่นี้สมมติว่าเราแก้ไข DNS (หรืออาจแก้ไฟล์ host บนเครื่อง Client) โดยเพิ่มชื่อ 3 เว็บไซต์ ให้ชี้มายัง IP 192.168.5.16

    web1.example.com
    web2.example.com
    web3.example.com

ติดตั้งไฟล์ rpm ของ Apache

ใช้คำสั่ง rpm เพื่อตรวจสอบเวอร์ชั่นที่ติดตั้ง

โค๊ด: [Select]
[root@fc16-64a ~]# rpm -qa | grep httpd
httpd-tools-2.2.21-1.fc16.x86_64
httpd-2.2.21-1.fc16.x86_64

โดยดีฟอลต์การติดตั้งไฟล์ rpm ของ Apache บนลีนุกซ์ ตระกูล RedHat, CentOS, หรือ Fedora จะรองรับแค่ชื่อเว็บไซต์เดียวเท่านั้น
การคอนฟิก VirtualHost บนเว็บเซิร์ฟเวอร์

เริ่มต้น ถ้าต้องการเปิดคุณสมบัติ VirtualHost ต้องแก้ไขคอนฟิกไฟล์ httpd.conf โดยเอาเครื่องหมาย ‘#’ (comment) หน้าออปชั่น NameVirtualHost ออก

วิธีการคอนฟิก VirtualHost ในที่นี้จะอ้างอิงตามชื่อเว็บไซต์ที่เรียกเข้ามา เช่น ถ้า Browser (client)

    ใช้ชื่อ “ServerName” web1.example.com เข้ามา เราต้องการให้เข้าไปอ่านไฟล์เว็บในไดเร็คทอรี “DocumentRoot” /var/www/html/web1.example.com
    แต่ถ้าใช้ชื่อ web2.example.com ให้อ่านไฟล์ใน /var/www/html/web2.example.com
    และถ้าใช้ชื่อ web3.example.com ให้ไปอ่านไฟล์จาก /var/www/html/web3.example.com
    แต่ถ้าใช้ชื่ออื่นๆ หรือใช้ IP Address ของเซิร์ฟเวอร์ ให้อ่านไฟล์ใน /var/www/html/default

ตัวอย่างไฟล์คอนฟิก httpd.conf ที่แก้ไข

โค๊ด: [Select]
[root@fc16-64a ~]# cat /etc/httpd/conf/httpd.conf
...
#
# Use name-based virtual hosting.
#
NameVirtualHost *:80

<VirtualHost *:80>
 ServerName 192.168.5.16
 DocumentRoot /var/www/html/default
 ErrorLog logs/default-error_log
 CustomLog logs/default-access_log common
</VirtualHost>

<VirtualHost *:80>
 ServerName web1.example.com
 DocumentRoot /var/www/html/web1.example.com
 ErrorLog logs/web1.example.com-error_log
 CustomLog logs/web1.example.com-access_log common
</VirtualHost>

<VirtualHost *:80>
 ServerName web2.example.com
 DocumentRoot /var/www/html/web2.example.com
 ErrorLog logs/web2.example.com-error_log
 CustomLog logs/web2.example.com-access_log common
</VirtualHost>

<VirtualHost *:80>
 ServerName web3.example.com
 DocumentRoot /var/www/html/web3.example.com
 ErrorLog logs/web3.example.com-error_log
 CustomLog logs/web3.example.com-access_log common
</VirtualHost>

สร้างไดเร็คทอรี DocumentRoot สำหรับเก็บไฟล์ของชื่อเว็บไซต์ต่างๆ

โค๊ด: [Select]
[root@fc16-64a ~]# mkdir /var/www/html/default
[root@fc16-64a ~]# mkdir /var/www/html/web1.example.com
[root@fc16-64a ~]# mkdir /var/www/html/web2.example.com
[root@fc16-64a ~]# mkdir /var/www/html/web3.example.com

สร้างไฟล์เว็บ index.html ของแต่ละเว็บไซต์

โค๊ด: [Select]
[root@fc16-64a ~]# echo "Hello, default web site" > /var/www/html/default/index.html
[root@fc16-64a ~]# echo "Hello, web1" > /var/www/html/web1.example.com/index.html
[root@fc16-64a ~]# echo "Hello, web2" > /var/www/html/web2.example.com/index.html
[root@fc16-64a ~]# echo "Hello, web3" > /var/www/html/web3.example.com/index.html

ใช้คำสั่ง service restart เพื่อรีสตาร์ตเซอร์วิส httpd ใหม่

โค๊ด: [Select]
[root@fc16-64a ~]# service httpd restart
Restarting httpd (via systemctl): [ OK ]

การคอนฟิก VirtualHost ในที่นี้จะแยก log file ทั้ง access_log และ error_log ตามชื่อเว็บไซต์ด้วย เพื่อสะดวกต่อการตรวจสอบและการทำรายงานการเข้าใช้

โค๊ด: [Select]
[root@fc16-64a httpd]# ls -l
total 4
-rw-r--r--. 1 root root 0 Mar 9 16:34 access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 default-access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 default-error_log
-rw-r--r--. 1 root root 458 Mar 9 16:35 error_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web1.example.com-access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web1.example.com-error_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web2.example.com-access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web2.example.com-error_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web3.example.com-access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web3.example.com-error_log

ทดสอบจาก Browser (client)

ใช้ Browser บนเครื่อง Client เปิดไปที่เว็บไซต์ คุณไม่สามารถมองเห็น links ได้ กรุณา.สมัครสมาชิก หรือ เข้าสู่ระบบ
http://web1.example.com



ผลที่ทดสอบ ก็เข้าไปอ่านไฟล์ใน /var/www/html/web1.example.com/index.html จริง

ลองดู log file ที่เกิดขึ้น จะเห็นว่าเกิด log เฉพาะในโดเมน web1.example.com เท่านั้น

โค๊ด: [Select]
[root@fc16-64a ~]# ls -l /var/log/httpd/
total 12
-rw-r--r--. 1 root root 0 Mar 9 16:34 access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 default-access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 default-error_log
-rw-r--r--. 1 root root 458 Mar 9 16:35 error_log
-rw-r--r--. 1 root root 222 Mar 9 16:36 web1.example.com-access_log
-rw-r--r--. 1 root root 234 Mar 9 16:36 web1.example.com-error_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web2.example.com-access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web2.example.com-error_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web3.example.com-access_log
-rw-r--r--. 1 root root 0 Mar 9 16:34 web3.example.com-error_log

โค๊ด: [Select]
[root@fc16-64a ~]# tail /var/log/httpd/web1.example.com-access_log
192.168.5.101 - - [09/Mar/2012:16:36:06 +0700] "GET / HTTP/1.1" 200 12
192.168.5.101 - - [09/Mar/2012:16:36:06 +0700] "GET /favicon.ico HTTP/1.1" 404 291

โค๊ด: [Select]
[root@fc16-64a ~]# tail /var/log/httpd/web1.example.com-error_log
[Fri Mar 09 16:36:06 2012] [error] [client 192.168.5.101] File does not exist: /var/www/html/web1.example.com/favicon.ico

 

ทดลองอีกครั้งด้วยชื่อเว็บ web2.example.com

 

log file ที่เกิดขึ้น ก็จะไปขึ้นในไฟล์ web2.example.com-access_log และ web2.example.com-error_log ที่คอนฟิกไว้
แต่ถ้าเข้าด้วย IP ของ Server หรือชื่อ ServerName อื่นๆ ที่ไม่ได้คอนฟิก VirtualHost ไว้ ผลที่ได้จะไปเรียก VirtualHost ที่คอนฟิกไว้บนสุด ในที่นี้คือ DocumentRoot /var/www/html/default


เพราะฉะนั้น ลำดับคอนฟิก VirtualHost ในไฟล์ httpd.conf จึงมีความสำคัญ ในกรณีที่ไม่มีชื่อ ServerName ระบุไว้

 
ข้อมูลอ้างอิง
คุณไม่สามารถมองเห็น links ได้ กรุณา.สมัครสมาชิก หรือ เข้าสู่ระบบ
http://spalinux.com/2012/03/configure-multiple-web-site-on-one-web-server-by-apache-virtualhost

LikePost โดย 0 สมาชิก :


 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 
ร่วมขับเคลื่อนโดย