ความเข้าใจในการสร้าง virtualhost ของ apache2 web server บน ubuntu 14.04 server ฉบับ workshop

ถ่ายทอดความเข้าใจในการสร้าง virtualhost ของ apache2 web server บน ubuntu 14.04 server ฉบับ workshop พร้อมตัวอย่างติดตั้ง phpmyadmin และ joomla site เป็น virtualhost

-:เกรินนำ:-
การเปลี่ยนจาก ubuntu 12.04 server ไปเป็น ubuntu 14.04 server เมื่อเร็วๆนี้ ส่งผลให้มีการเปลี่ยนแปลงวิธีการ config virtualhost บน Apache2 web server

เพราะว่า Apache2 web server (2.4.x ขึ้นไป) เช่น 2.4.7 ที่มาพร้อม ubuntu 14.04 server จะมีการจัดการเรื่อง Document root ที่แตกต่างจากเวอร์ชั่นที่ต่ำกว่า เช่น Document root จะอยู่ที่ /var/www/html แทนที่จะเป็น /var/www เหมือนเดิม ดังนั้นเมื่อทำ virtualhost จึงต้องมีการเลือกวางไดเรกทอรีของเว็บเพจที่จะติดตั้ง ตามความคิดเห็นของผมคิดว่าสามารถเลือกวางได้เป็น 2 แบบ
แบบที่ 1 วางไว้ที่ /var/www/html/ หรือ
แบบที่ 2 วางไว้ที่ /var/www/

มาดูกันครับว่าจะต้องทำอย่างไรบ้าง เริ่มต้นที่หลังจากติดตั้ง ubuntu 14.04 server เสร็จ พร้อมทั้งได้ติดตั้ง packages LAMP หากไม่แน่ใจก็ตรวจสอบ/ติดตั้งเพิ่มด้วยคำสั่ง sudo tasksel

ในบทความนี้มีการอ้างถึง editor ที่ใช้แก้ไขไฟล์ชื่อ vi (ผู้เขียนถนัดและชอบ) หากไม่คุ้นเคยวิธีใช้ก็ให้เปลี่ยนเป็น editor ชื่อ nano ซึ่งจะเป็น full screen editor

หากต้องการทดสอบทำตามไปด้วย ให้ดาวน์โหลด LSA-router.ova จาก http://ftp.psu.ac.th/pub/psulab/LSA-II/ แล้วนำไป import เข้าโปรแกรม Oracle VM VirtualBox จากนั้น Start VM LSA-router (IP ที่ใช้คือ 10.0.100.1 เป็นทั้ง NAT router, DNS server และ DHCP server)

แล้วก็สร้าง New VM ขึ้นมา 1 ตัว โดยตั้งค่า Network เป็นแบบ Internal network และมีค่า name คือ intnet พร้อมทั้งติดตั้ง Ubuntu 14.04 server ให้เสร็จ โดยตั้งค่า IP 10.0.100.9

1.แบบใช้ NameVirtualHost

-:การตรวจสอบความพร้อมของ apache2 web server:-
เข้าไปที่ไดเรกทอรี
mama@ubuntu:$ cd /var/www/html/

เริ่มต้น apache2 web server จะมีไฟล์ index.html มาให้
mama@ubuntu:/var/www/html$ ls
index.html

ทดสอบด้วยคำสั่ง w3m ได้
mama@ubuntu:/var/www/html$ w3m http://127.0.0.1
เห็นหน้าเว็บเพจ default แสดงข้อความ
Apache2 Ubuntu Default Page
It work!
กด Ctrl+c เลิกดู

ลองสร้างไฟล์ test.php
mama@ubuntu:/var/www/html$ sudo vi test.php
เพิ่มบรรทัด 1 บรรทัด

<?php phpinfo() ?>

ผลลัพธ์จะมีไฟล์เพิ่มขึ้น
mama@ubuntu:/var/www/html$ ls
index.html  test.php

เมื่อดูข้อมูลด้วยคำสั่ง cat
mama@ubuntu:/var/www/html$ cat test.php
จะเห็นแบบนี้
<?php phpinfo() ?>

ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/var/www/html$ w3m http://127.0.0.1/test.php
เห็นหน้าเว็บเพจ php info

-:เริ่มทดสอบแบบที่ 1:-
แบบ 1 สร้างไดเรกทอรีที่เก็บไฟล์ virtual host ไว้ที่ /var/www/html

จะสร้าง virtual host ชื่อ iserver.example.com

ให้ตรวจสอบ domain name ว่ามีแล้วยัง
mama@ubuntu:$ host iserver.example.com
iserver.example.com has address 10.0.100.9

เข้าไปที่ VM LSA-router (IP 10.0.100.1) ด้วย username: mama มี password: 123456
และเพิ่มค่า domain name ดังนี้
mama@myrouter:~$ sudo vi /var/cache/bind/db.example.com
เพิ่มบรรทัด

iserver.example.com.        IN A     10.0.100.9

แล้ว reload DNS server
mama@myrouter:~$ sudo service bind9 reload

กลับไปที่ VM web server (IP 10.0.100.9)
สร้างที่เก็บไฟล์ของ virtual host ไว้ที่ /var/www/html
mama@ubuntu:/var/www/html$ sudo mkdir iserver.example.com

ผลลัพธ์จะมีไดเรกทอรีเพิ่มขึ้น
mama@ubuntu:/var/www/html$ ls
index.html  iserver.example.com  test.php

สร้างไฟล์ตัวอย่างชื่อ index.php
mama@ubuntu:/var/www/html$ sudo vi iserver.example.com/index.php
ให้มีบรรทัดดังนี้

<?php echo "Hello, world! from iserver.example.com"; ?>

ผลลัพธ์จะมีไฟล์เพิ่มขึ้น
mama@ubuntu:/var/www/html$ ls iserver.example.com/
index.php

เมื่อดูข้อมูลด้วยคำสั่ง cat
mama@ubuntu:/var/www/html$ cat iserver.example.com/index.php
<?php echo “Hello, world! from iserver.example.com”; ?>

ต่อไปเราจะเพิ่ม site ให้ apache2 web server รู้จัก
เข้าไปที่ไดเรกทอรีสำหรับเพิ่ม site
mama@ubuntu:/var/www/html$ cd /etc/apache2/sites-available

จะมีไฟล์ตอนเริ่มต้นแค่นี้
mama@ubuntu:/etc/apache2/sites-available$ ls
000-default.conf  default-ssl.conf

ให้ copy ไฟล์ 000-default.conf เพื่อความสะดวก ชื่อมี .conf ต่อท้ายด้วย
mama@ubuntu:/etc/apache2/sites-available$ sudo cp 000-default.conf iserver.example.com.conf

ผลลัพธ์จะมีไฟล์เพิ่มขึ้น
mama@ubuntu:/etc/apache2/sites-available$ ls
000-default.conf  default-ssl.conf  iserver.example.com.conf

แก้ไขไฟล์ iserver.example.com.conf เพื่อกำหนดค่า virtualhost
mama@ubuntu:/etc/apache2/sites-available$ sudo vi iserver.example.com.conf
แก้ไขเฉพาะบรรทัดข้างล่างนี้

NameVirtualHost iserver.example.com:80
 <VirtualHost iserver.example.com:80>
 ServerName iserver.example.com
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html/iserver.example.com

เพิ่ม site ให้ apache2 web server รู้จัก
mama@ubuntu:/etc/apache2/sites-available$ sudo a2ensite iserver.example.com

สั่ง reload apache2 web server
mama@ubuntu:/etc/apache2/sites-available$ sudo service apache2 reload

ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/etc/apache2/sites-available$ w3m http://iserver.example.com/
เห็นหน้าเว็บเพจ
Hello, world! from iserver.example.com

แต่หากใช้ IP แทนชื่อ จะยังคงเข้าถึงเว็บเพจภายใต้ DocumentRoot /var/www/html
ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/etc/apache2/sites-available$ w3m http://127.0.0.1
ยังคงเห็นหน้าเว็บเพจ default แสดงข้อความ
Apache2 Ubuntu Default Page
It work!

mama@ubuntu:/etc/apache2/sites-available$ w3m http://127.0.0.1/test.php
ยังคงเห็นหน้าเว็บเพจ php info

mama@ubuntu:/etc/apache2/sites-available$ w3m http://127.0.0.1/iserver.example.com
และแถมด้วยเห็นหน้าเว็บเพจของ virtualhost iserver.example.com ด้วย
Hello, world! from iserver.example.com

แต่ถ้าต้องการไม่ให้เข้าถึงเว็บเพจภายใต้ /var/www/html
mama@ubuntu:/etc/apache2/sites-available$ sudo a2dissite 000-default

ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/etc/apache2/sites-available$ w3m http://127.0.0.1/test.php
ผลลัพธ์จะเห็นว่า หาเว็บเพจไม่พบแล้ว
Not Found
The requested URL /test.php was not found on this server.
——————————————————————————-
Apache/2.4.7 (Ubuntu) Server at 127.0.0.1 Port 80

ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/etc/apache2/sites-available$ w3m http://127.0.0.1/iserver.example.com
ผลลัพธ์จะเห็นว่า หาเว็บเพจไม่พบแล้ว
Not Found
The requested URL /iserver.example.com was not found on this server.
——————————————————————————-
Apache/2.4.7 (Ubuntu) Server at 127.0.0.1 Port 80

-:เริ่มทดสอบแบบที่ 2:-
แบบที่ 2 สร้างไดเรกทอรีที่เก็บไฟล์ virtual host ไว้ที่ /var/www

ทำ virtualhost เช่น www.example.com และ
ชี้ DocumentRoot ที่ /var/www/www.example.com

ตรวจสอบว่าเรามี domain name แล้ว
mama@ubuntu:$ host www.example.com
www.example.com is an alias for iserver.example.com.
iserver.example.com has address 10.0.100.9

เข้าไปที่ VM LSA-router (IP 10.0.100.1) ด้วย username: mama มี password: 123456
และเพิ่มค่า domain name ดังนี้
mama@myrouter:~$ sudo vi /var/cache/bind/db.example.com
เพิ่มบรรทัด

www      IN CNAME iserver

แล้ว reload dns server
mama@myrouter:~$ sudo service bind9 reload

กลับไปที่ VM web server (IP 10.0.100.9)
เข้าไปที่ไดเรกทอรี
mama@ubuntu:$ cd /var/www/

สร้างไดเรกทอรีชื่อ www.example.com
mama@ubuntu:/var/www$ sudo mkdir www.example.com

สร้างไฟล์ตัวอย่างของเว็บไซต์
mama@ubuntu:/var/www$ sudo vi www.example.com/index.php
มีข้อความเพียง 1 บรรทัด

<?php echo "WWW Hello, world!"; ?>

ผลลัพธ์จะมีไฟล์เพิ่มขึ้น
mama@ubuntu:/var/www$ ls www.example.com/
index.php

ใช้คำสั่ง cat แสดงข้อมูลในไฟล์
mama@ubuntu:/var/www$ cat www.example.com/index.php
จะเห็น
<?php echo “WWW Hello, world!”; ?>

เข้าไปไดเรกทอรีสำหรับจัดการ config site
mama@ubuntu:/var/www$ cd /etc/apache2/sites-available

ใช้คำสั่ง ls ดูรายชื่อไฟล์
mama@ubuntu:/etc/apache2/sites-available$ ls
000-default.conf  default-ssl.conf  iserver.example.com.conf

สร้างไฟล์สำหรับ config virtual host ชื่อมี .conf ต่อท้ายด้วย
mama@ubuntu:/etc/apache2/sites-available$ sudo cp 000-default.conf www.example.com.conf

แก้ไขไฟล์ www.example.com.conf
mama@ubuntu:/etc/apache2/sites-available$ sudo vi www.example.com.conf
แก้ไขเฉพาะบรรทัดข้างล่างนี้

NameVirtualHost www.example.com:80
 <VirtualHost www.example.com:80>
ServerName www.example.com
ServerAdmin webmaster@localhost
 DocumentRoot /var/www/www.example.com

สั่งให้ apache2 รับ site ใหม่
mama@ubuntu:/etc/apache2/sites-available$ sudo a2ensite www.example.com

สั่ง reload apache2
mama@ubuntu:/etc/apache2/sites-available$ sudo service apache2 reload

ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/etc/apache2/sites-available$ w3m http://www.example.com
จะเห็นหน้าเว็บเพจ
WWW Hello, world!

งานทดสอบเรื่องต่อไป คือ ถ้าต้องใช้ https ด้วย จะทำอย่างไร
ถ้าต้องการใช้ https เราจะต้องเลือก config ให้ใช้ self-signed certificate ที่ apache2 web server ให้มาแล้ว หรือว่า จะซื้อ trusted root certificate ที่มีขายในอินเทอร์เน็ต

เริ่มต้นตรวจสอบ จะพบว่า https ยังใช้งานไม่ได้ ควรที่จะเกิด error ไม่สามารถเข้าถึงได้ เพราะเรายังไม่ได้ enable https บน www.example.com
จะเห็นแบบนี้
mama@ubuntu:/etc/apache2/sites-available$ w3m https://www.example.com
w3m: Can’t load https://www.example.com.

เราสามารถ enable https โดยใช้คำสั่ง
mama@ubuntu:/etc/apache2/sites-available$ sudo a2enmod ssl
mama@ubuntu:/etc/apache2/sites-available$ sudo a2ensite default-ssl
mama@ubuntu:/etc/apache2/sites-available$ sudo service apache2 reload

ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/etc/apache2/sites-available$ w3m https://www.example.com
จะมีคำเตือนในเรื่อง certificate ที่ไม่ถูกต้อง เนื่องจากเป็น self-signed certificate ก็กด Y ไปเรื่อยๆ จะเข้าไปยังเว็บเพจได้
จะเห็นแบบนี้
Apache2 Ubuntu Default Page
It work!

ต่อไปก็จะทำให้ใช้งาน https ได้แบบใช้ self-signed certificate
ให้ copy ไฟล์ www.example.com.conf เป็นอีกไฟล์ให้มีชื่อ ssl ด้วยเพื่อให้จำง่าย
mama@ubuntu:/etc/apache2/sites-available$ sudo cp www.example.com.conf www.example.com-ssl.conf

แก้ไขไฟล์ www.example.com-ssl.conf
mama@ubuntu:/etc/apache2/sites-available$ sudo vi www.example.com-ssl.conf
แก้ไขสองบรรทัดแรกจาก
NameVirtualHost www.example.com:80
<VirtualHost www.example.com:80>
เป็น

NameVirtualHost www.example.com:443
 <VirtualHost www.example.com:443>

และเพิ่ม

SSLEngine on
 SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
 SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

ก่อนบรรทัด
</VirtualHost>
หลังจากนั้น save file

และใช้คำสั่งเพื่อให้ apache2 รับ site ใหม่
mama@ubuntu:/etc/apache2/sites-available$ sudo a2ensite www.example.com-ssl

สั่ง reload apache2
mama@ubuntu:/etc/apache2/sites-available$ sudo service apache2 reload

ถึงตรงนี้เราก็จะสามารถเข้าถึง URL https://www.example.com ได้ตามต้องการ

ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/etc/apache2/sites-available$ w3m https://www.example.com
จะมีคำเตือนในเรื่อง certificate ที่ไม่ถูกต้องอยู่ต่อไป เนื่องจากเป็น self-signed certificate ก็กด Y ไปเรื่อยๆ จะเข้าไปยังเว็บเพจได้
จะเห็นหน้าเว็บเพจ
WWW Hello, world!

[ติดตั้ง phpmyadmin]
บ่อยครั้งที่ผมจะได้รับคำถามว่าต้องการใช้ phpmyadmin เพื่อเข้าไปจัดการ database mysql ก็ขอทดสอบร่วมด้วยซะเลยครับ (ขอขอบคุณอ.ฉัตรชัย จันทร์พริ้ม ผู้ให้ความรู้เรื่องการติดตั้ง phpmyadmin)

สมมติว่า
IP ของ web server คือ 10.0.100.9
MySQL server Administrator คือ root มี password คือ 123456

ใช้คำสั่งติดตั้งดังนี้
mama@ubuntu:~$ sudo apt-get install phpmyadmin
จะมีหน้าต่างให้เลือกข้อมูล
-เลือก apache2 เป็น web server เพื่อที่จะกำหนด config ของ phpmyadmin ให้ใช้งานได้กับ apache2
-เลือกให้ config database กับ dbconfig-common
-ใส่ password ของ MySQL administrator ใส่ตามที่กำหนดไว้
-สำหรับ password ของ phpmyadmin เอง ไม่จำเป็นจะต้องใส่ ตัว script สำหรับติดตั้ง phpmyadmin จะสร้าง random password ให้

ทดสอบด้วยคำสั่ง w3m ได้
mama@ubuntu:~$ w3m http://127.0.0.1/phpmyadmin

ต่อไปทำการกำหนดให้ phpmyadmin สามารถเข้าถึงได้เฉพาะ client ที่กำหนดเท่านั้น

เข้าไปที่ไดเรกทอรี config ของ phpmyadmin
mama@ubuntu:~$  cd /etc/phpmyadmin

เราจะแก้ไข config ของ phpmyadmin ดังนั้นควรจะ copy ไฟล์ดังเดิมเก็บเอาไว้ก่อน
mama@ubuntu:/etc/phpmyadmin$ sudo cp apache.conf apache.conf.orig

แก้ไขไฟล์ apache.conf
mama@ubuntu:/etc/phpmyadmin$ sudo vi apache.conf
ในไฟล์นี้จะกำหนดการเข้าถึง directory /usr/share/phpmyadmin ไว้ดังนี้
<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
<IfModule mod_php5.c>

</IfModule>
</Directory>
ให้เพิ่ม config จำนวน 3 บรรทัดข้างล่างนี้เข้าไป ก่อนบรรทัด </Directory>

Order Deny,Allow
 Deny from All
 Allow from 127.0.0.1 ::1

หลังจาก save ไฟล์แล้วให้ restart ตัว apache2 โดยใช้คำสั่ง
mama@ubuntu:/etc/phpmyadmin$ sudo service apache2 restart

ทดสอบการเข้าถึง phpmyadmin จาก ตัว server เอง
ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/etc/phpmyadmin$ w3m http://127.0.0.1/phpmyadmin
จะได้ผลลัพธ์แสดงหน้าเว็บเพจ phpmyadmin

ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/etc/phpmyadmin$ w3m http://10.0.100.9/phpmyadmin
จะได้ข้อความว่า Forbidden You don’t have permission to access /phpmyadmin on this server

และเมื่อทดสอบการเข้าถึง phpmyadmin จากตัว web browser เครื่องอื่นๆ
(เช่นทดสอบที่ VM linux mint client มี IP 10.0.100.247)
ทดสอบด้วยโปรแกรม Firefox
http://10.0.100.9/phpmyadmin
ก็ควรที่จะได้ข้อความว่า Forbidden You don’t have permission to access /phpmyadmin on this server เช่นกัน

แก้ไขให้สามารถเข้าถึง phpmyadmin ได้จากเครื่อง หรือ net ที่กำหนดเพิ่ม
เช่น ถ้าระบุเป็น 10.0.100.247 ก็เครื่องเดียว แต่ถ้าระบุเป็น 10.0.100. ก็คือทุกเครื่องใน net
mama@ubuntu:/etc/phpmyadmin$ sudo vi apache.conf
เดิม
Allow from 127.0.0.1 ::1
เป็น

Allow from 127.0.0.1 ::1 10.0.100.

สั่ง restart apache2
mama@ubuntu:/etc/phpmyadmin$ sudo service apache2 restart

ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/etc/phpmyadmin$ w3m http://10.0.100.9/phpmyadmin
ก็ควรจะเข้าได้แล้ว

[การสร้าง VirtualHost pma.example.com สำหรับ phpmyadmin]
ก่อนอื่นเราจะต้องแก้ไข DNS ให้สามารถ resolve address ของ pma.example.com ให้ได้ก่อน

เข้าไปที่ VM LSA-router (IP 10.0.100.1) ด้วย username: mama มี password: 123456
และเพิ่มค่า domain name ดังนี้
mama@myrouter:~$ sudo vi /var/cache/bind/db.example.com
โดยเพิ่ม

pma IN CNAME iserver

และ reload bind โดยใช้คำสั่ง
mama@myrouter:~$ sudo rndc reload

และทดสอบโดยการใช้คำสั่ง host
mama@myrouter:~$ host pma.example.com 10.0.100.1
ได้ผลลัพธ์ดังนี้
Using domain server:
Name: 10.0.100.1
Address: 10.0.100.1#53
Aliases:
pma.example.com is an alias for iserver.example.com.
iserver.example.com has address 10.0.100.9

ขั้นตอนถัดไปกลับไปที่ตัว web server
เราจะยกเลิกไม่ให้เข้าถึง phpmyadmin โดยใช้ URL http://10.0.100.9/phpmyadmin

โดยการ disable config ของ phpmyadmin ของ apache2 โดยใช้คำสั่ง
mama@ubuntu:~$ sudo a2disconf phpmyadmin

แล้วสร้าง site config สำหรับ phpmyadmin โดยสร้างเป็น VirtualHost config อันใหม่ขึ้นมา ไป copy จาก config เดิมที่มีอยู่แล้ว โดยใช้คำสั่ง
mama@ubuntu:~$ sudo cp /etc/phpmyadmin/apache.conf /etc/apache2/sites-available/pma.conf

แก้ไขไฟล์ pma.conf
mama@ubuntu:~$ sudo vi /etc/apache2/sites-available/pma.conf
เพิ่มบรรทัดต่อไปนี้ในตอนต้นของไฟล์

NameVirtualHost pma.example.com:80
 <VirtualHost pma.example.com:80>
 ServerName pma.example.com
 DocumentRoot /usr/share/phpmyadmin

และ comment บรรทัด Alias /phpmyadmin /usr/share/phpmyadmin โดยการเพิ่มเครื่องหมาย ‘#’ ไปที่ต้นบรรทัด ดังนี้

# Alias /phpmyadmin /usr/share/phpmyadmin

และเพิ่มบรรทัดเหล่านี้ที่บรรทัดล่างสุด

LogLevel warn
 ErrorLog ${APACHE_LOG_DIR}/pma-error.log
 CustomLog ${APACHE_LOG_DIR}/pma-access.log combined
 </VirtualHost>

และ save ไฟล์

และใช้คำสั่งเพื่อให้ apache2 รับ site ใหม่
mama@ubuntu:~$ sudo a2ensite pma

สั่ง reload apache2
mama@ubuntu:~$ sudo service apache2 reload

ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:~$ w3m http://pma.example.com
ก็ควรจะใช้งานได้

[ติดตั้ง joomla site เป็น ไดเรกทอรีต่อท้ายชื่อ web server]
เมื่อทำมาถึงตอนนี้ ถ้าเราจะสร้าง site อะไรก็ตามที่อยู่ต่อจาก /var/www/html
และจะใช้ URL แบบว่า http://www.example.com/testjoomla อย่างนี้จะทำไม่ได้ เพราะเรานำชื่อ www.example.com ไปทำเป็น site ทดสอบไปแล้ว
เราจะต้องทำบนชื่อ domain name ใหม่อีกชื่อ สมมติให้ server ชื่อ aws.example.com

เข้าไปที่ VM LSA-router (IP 10.0.100.1) ด้วย username: mama มี password: 123456
และเพิ่มค่า domain name ดังนี้
mama@myrouter:~$ sudo vi /var/cache/bind/db.example.com
โดยเพิ่ม

aws IN CNAME iserver

และ reload bind โดยใช้คำสั่ง
mama@myrouter:~$ sudo rndc reload

mama@myrouter:~$ host aws.example.com 10.0.100.1
Using domain server:
Name: 10.0.100.1
Address: 10.0.100.1#53
Aliases:
aws.example.com is an alias for iserver.example.com.
iserver.example.com has address 10.0.100.9

ขั้นตอนถัดไปกลับไปที่ตัว web server แล้วสร้างไฟล์
mama@ubuntu:~$ cd /etc/apache2/sites-available/
mama@ubuntu:/etc/apache2/sites-available$ sudo cp 000-default.conf aws.example.com.conf

แก้ไขไฟล์ aws.example.com.conf
mama@ubuntu:/etc/apache2/sites-available$ sudo vi aws.example.com.conf
แก้ไขเฉพาะบรรทัดเหล่านี้

NameVirtualHost aws.example.com:80
 <VirtualHost aws.example.com:80>
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html

และใช้คำสั่งเพื่อให้ apache2 รับ site ใหม่
mama@ubuntu:/etc/apache2/sites-available$ sudo a2ensite aws.example.com

สั่ง reload apache2
mama@ubuntu:/etc/apache2/sites-available$ sudo service apache2 reload

ตอนนี้ก็สามารถติดตั้ง joomla site เพื่อทดสอบโดยนำ joomla files ไปไว้ที่ /var/www/html/testjoomla เพื่อทึ่จะใช้ URL แบบว่า http://aws.example.com/testjoomla อย่างนี้จะทำได้แล้ว

ทดลองทำขั้นตอนติดตั้ง joomla site (1-7)
1. สร้าง database ที่ต้องการติดตั้ง ตัวอย่าง สร้าง database ชื่อ testdatabase ใช้คำสั่ง
mysql -uroot -p123456 -e “CREATE DATABASE testdatabase CHARACTER SET ‘UTF8’;”

2. กำหนดสิทธิ์การใช้ database testdatabase ให้แก่ user ตัวอย่างสร้าง user ชื่อ mamamysql โดยมีรหัสผ่านว่า mamapass ใช้คำสั่ง
mysql -uroot -p123456 -e “grant all privileges on testdatabase.* to ‘mamamysql’@’localhost’ identified by ‘mamapass’ ;”

3. เตรียมพื้นที่สำหรับติดตั้ง joomla ไว้ที่ /var/www/html/testjoomla ด้วยคำสั่ง
sudo mkdir -p /var/www/html/testjoomla

4. ดาวน์โหลดแฟ้ม joomla 2.5.9 มาเก็บไว้ด้วยคำสั่ง
wget http://ftp.psu.ac.th/pub/joomla/Joomla_2.5.9-Stable-Full_Package.tar.gz -P /tmp
แล้วแตกแฟ้มออกมาเก็บไว้ที่ /var/www/html/testjoomla ด้วยคำสั่ง
sudo tar -zxvf /tmp/Joomla_2.5.9-Stable-Full_Package.tar.gz -C /var/www/html/testjoomla

5. แล้วปรับสิทธิ์เจ้าของ /var/www/html/testjoomla ให้แก่ apache ด้วยคำสั่ง
sudo chown -R www-data.www-data /var/www/html/testjoomla

6. ต่อไปต้องติดตั้งปรับแต่งระบบ joomla ครั้งแรก ไปยัง client (เช่น linux mint client) เปิด browser (firefox) แล้วพิมพ์ http://aws.example.com/testjoomla

ขั้นตอน 1 : Choose language (เลือกภาษา) ให้ click ปุ่ม Next (หรือต่อไป)
ขั้นตอน 2 : Pre-Installation Check(ตรวจสอบระบบก่อนติดตั้ง) ให้ click ปุ่ม Next (หรือต่อไป)
ขั้นตอน 3 : License(ลิขสิทธิ์) ให้ click ปุ่ม Next (หรือต่อไป)
ขั้นตอน 4 : Database Configuration(การตั้งค่าฐานข้อมูลเข้าไปที่ VM LSA-router (IP 10.0.100.1) ด้วย username: mama มี password: 123456
และเพิ่มค่า domain name ดังนี้) ให้ใส่ค่าดังนี้ (อย่าลืมใส่ข้อมูลชิดซ้าย ห้ามมีช่องว่าง)
Database type = mysqli(เลือกที่มี i)
Host Name = localhost
Username = mamamysql
Password = mamapass
Database Name = testdatabase เสร็จแล้ว click Next (หรือต่อไป)
ขั้นตอน 5 : FTP Configuration (ตั้งค่า FTP) ให้ click ปุ่ม Next (หรือต่อไป)
ขั้นตอน 6 : Main Configuration (ตั้งค่าหลักของ เว็บ) ให้ใส่ค่าดังนี้
Site Name = testjoomla
Your Email = mama@aws.example.com
Admin Username = testadmin
Admin Password = 123456
Confirm Admin Password = 123456
อย่าลืม ต้องคลิกปุ่ม Install Sample Data (ติดตั้งข้อมูลตัวอย่าง) แล้วกด Next (หรือ ต่อไป)
ขั้นตอนที่ 7 : Finish (เสร็จสิ้น) (ขั้นตอนสุดท้าย)
คลิกปุ่ม Remove installation folder

7. แล้วปรับสิทธิ์เจ้าของ /var/www/html/testjoomla ให้แก่ user ที่ไม่ใช่ www-data ด้วยคำสั่ง
sudo chown -R mama.mama /var/www/html/testjoomla
sudo chown -R www-data.www-data /var/www/html/testjoomla/images/

ไปที่ client แล้วทดสอบเข้าเว็บไซต์อีกที
http://aws.example.com/testjoomla
http://aws.example.com/testjoomla/administrator/

[ติดตั้ง joomla site เป็น virtualhost]
แต่ถ้าต้องการเปลี่ยนให้ http://aws.example.com คือ jooma site เลย ไม่ต้องมีชื่อไดเรกทอรี testjoomla ต่อท้าย
ก็ให้แก้ไขที่ไฟล์
mama@ubuntu:~$ cd /etc/apache2/sites-available/
mama@ubuntu:/etc/apache2/sites-available$ sudo vi aws.example.com.conf
แก้ไขเฉพาะบรรทัด DocumentRoot
เดิม
DocumentRoot /var/www/html
เปลี่ยนเป็น

DocumentRoot /var/www/html/testjoomla

สั่ง reload apache2
mama@ubuntu:/etc/apache2/sites-available$ sudo service apache2 reload

ตอนนี้ http://aws.example.com คือ joomla site แล้ว

ไปที่ client (เช่น linux mint client) เปิด browser (firefox) แล้วทดสอบเข้าเว็บไซต์อีกที
http://aws.example.com
http://aws.example.com/administrator/

 

2. แบบไม่ใช้ NameVirtualHost

เป็นการทำ virtualhost บน apache2 web server อย่างง่าย

-:การตรวจสอบความพร้อมของ apache2 web server:-
เข้าไปที่ไดเรกทอรี
mama@ubuntu:$ cd /var/www/html/

เริ่มต้น apache2 web server จะมีไฟล์ index.html มาให้
mama@ubuntu:/var/www/html$ ls
index.html

ทดสอบด้วยคำสั่ง w3m ได้
mama@ubuntu:~$ w3m http://127.0.0.1
เห็นหน้าเว็บเพจ default แสดงข้อความ
Apache2 Ubuntu Default Page
It work!
กด Ctrl+c เลิกดู

ลองสร้างไฟล์ test.php
mama@ubuntu:/var/www/html$ sudo vi test.php
เพิ่มบรรทัด 1 บรรทัด

<?php phpinfo() ?>

ผลลัพธ์จะมีไฟล์เพิ่มขึ้น
mama@ubuntu:/var/www/html$ ls
index.html  test.php

เมื่อดูข้อมูลด้วยคำสั่ง cat
mama@ubuntu:/var/www/html$ cat test.php
จะเห็นแบบนี้
<?php phpinfo() ?>

ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/var/www/html$ w3m http://127.0.0.1/test.php
เห็นหน้าเว็บเพจ php info

-:สร้าง virtualhost จะใช้ไฟล์ 000-default.conf ที่ให้มา:-
ความต้องการ
ทำ virtualhost ชื่อ www.example.com ชี้ DocumentRoot ที่ /var/www/www.example.com
และ
ทำ virtualhost ชื่อ www2.example.com ชี้ DocumentRoot ที่ /var/www/www2.example.com
และ

ตรวจสอบว่าเรามี domain name iserver.example.com แล้ว
mama@ubuntu:$ host iserver.example.com
iserver.example.com has address 10.0.100.9

เข้าไปที่ VM LSA-router (IP 10.0.100.1) ด้วย username: mama มี password: 123456
และเพิ่มค่า domain name ดังนี้
mama@myrouter:~$ sudo vi /var/cache/bind/db.example.com
เพิ่มบรรทัด

www        IN CNAME iserver
www2       IN CNAME iserver

แล้ว reload dns server
mama@myrouter:~$ sudo service bind9 reload

กลับไปที่ VM web server (IP 10.0.100.9)
สร้างไดเรกทอรีชื่อ www.example.com
mama@ubuntu:/var/www/html$ sudo mkdir /var/www/www.example.com

สร้างไฟล์ตัวอย่างของเว็บไซต์
mama@ubuntu:/var/www/html$ sudo vi /var/www/www.example.com/index.php
มีข้อความเพียง 1 บรรทัด

<?php echo "WWW Hello, world!"; ?>

สร้างไดเรกทอรีชื่อ www2.example.com
mama@ubuntu:/var/www/html$ sudo mkdir /var/www/www2.example.com

สร้างไฟล์ตัวอย่างของเว็บไซต์
mama@ubuntu:/var/www/html$ sudo vi /var/www/www2.example.com/index.php
มีข้อความเพียง 1 บรรทัด

<?php echo "WWW2 Hello, world!"; ?>

เข้าไปไดเรกทอรีสำหรับจัดการ config site
mama@ubuntu:~$ cd /etc/apache2/sites-available/

ใช้คำสั่ง ls ดูรายชื่อไฟล์
mama@ubuntu:/etc/apache2/sites-available$ ls
000-default.conf  default-ssl.conf

สร้าง virtualhost จะใช้ไฟล์ 000-default.conf ที่ให้มา
mama@ubuntu:/etc/apache2/sites-available$ sudo vi 000-default.conf
[sudo] password for mama:
เพิ่มบรรทัดเหล่านี้ต่อท้ายไฟล์เดิม

<VirtualHost *:80>
        ServerName www.example.com
        DocumentRoot /var/www/www.example.com
</VirtualHost>
<VirtualHost *:80>
        ServerName www2.example.com
        DocumentRoot /var/www/www2.example.com
</VirtualHost>

สั่ง reload apache2
mama@ubuntu:/etc/apache2/sites-available$ sudo service apache2 reload

ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/etc/apache2/sites-available$ w3m http://www.example.com
จะเห็นหน้าเว็บเพจ
WWW Hello, world!

ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/etc/apache2/sites-available$ w3m http://www2.example.com
จะเห็นหน้าเว็บเพจ
WWW2 Hello, world!

ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/etc/apache2/sites-available$ w3m http://iserver.example.com
ยังคงเห็นหน้าเว็บเพจ default แสดงข้อความ
Apache2 Ubuntu Default Page
It work!

mama@ubuntu:/etc/apache2/sites-available$ w3m http://iserver.example.com/test.php
ยังคงเห็นหน้าเว็บเพจ php info

-:ต้องการใช้ https:-

เริ่มต้นตรวจสอบ จะพบว่า https ยังใช้งานไม่ได้ ควรที่จะเกิด error ไม่สามารถเข้าถึงได้ เพราะเรายังไม่ได้ enable https บน iserver.example.com
จะเห็นแบบนี้
mama@ubuntu:/etc/apache2/sites-available$ w3m https://iserver.example.com
w3m: Can’t load https://iserver.example.com.

เราสามารถ enable https โดยใช้คำสั่ง
mama@ubuntu:/etc/apache2/sites-available$ sudo a2enmod ssl
mama@ubuntu:/etc/apache2/sites-available$ sudo a2ensite default-ssl
mama@ubuntu:/etc/apache2/sites-available$ sudo service apache2 reload

ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/etc/apache2/sites-available$ w3m https://iserver.example.com
จะมีคำเตือนในเรื่อง certificate ที่ไม่ถูกต้อง เนื่องจากเป็น self-signed certificate ก็กด Y ไปเรื่อยๆ จะเข้าไปยังเว็บเพจได้
จะเห็นแบบนี้
Apache2 Ubuntu Default Page
It work!

เช่นเดียวกับ 2 คำสั่งนี้ ก็จะได้ผลลัพธ์ไปที่หน้าเดียวกัน
mama@ubuntu:/etc/apache2/sites-available$ w3m https://www.example.com
mama@ubuntu:/etc/apache2/sites-available$ w3m https://www2.example.com

mama@ubuntu:/etc/apache2/sites-available$ sudo vi default-ssl.conf
[sudo] password for mama:
เพิ่มบรรทัดเหล่านี้ต่อท้ายไฟล์เดิม วางไว้ก่อนบรรทัด </IfModule>

       <VirtualHost _default_:443>
                ServerName www.example.com
                ServerAdmin webmaster@localhost
                DocumentRoot /var/www/www.example.com
                SSLEngine on
                SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
                SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
       </VirtualHost>
       <VirtualHost _default_:443>
                ServerName www2.example.com
                ServerAdmin webmaster@localhost
                DocumentRoot /var/www/www2.example.com
                SSLEngine on
                SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
                SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
        </VirtualHost>

</IfModule>

ทดสอบด้วยคำสั่ง w3m
mama@ubuntu:/etc/apache2/sites-available$ w3m https://www.example.com
จะเห็นหน้าเว็บเพจ
WWW Hello, world!

mama@ubuntu:/etc/apache2/sites-available$ w3m https://www2.example.com
จะเห็นหน้าเว็บเพจ
WWW2 Hello, world!

mama@ubuntu:/etc/apache2/sites-available$ w3m https://iserver.example.com
จะหน้าเว็บเพจ default แสดงข้อความ
Apache2 Ubuntu Default Page
It work!

mama@ubuntu:/etc/apache2/sites-available$ w3m https://iserver.example.com/test.php
จะหน้าเว็บเพจ php info

เรื่องราวของการทดสอบ virtualhost ของ apache2 web server บน ubuntu 14.04 server ก็มีเพียงเท่านี้