Category: CMS (Joomla!, Moodle, Wordpress)

  • อย่าเชื่อ Tools จนเกินไป : กรณี joomscan

    ได้ยินหลายคนพูดถึงการใช้งานตรวจสอบ Website โดยเฉพาะ Joomla โดยใช้เครื่องมือที่ชื่อว่า joomscan

    ก็เลยลองติดตั้ง และ ทำการทดสอบกับ Web Server ใน VirtualBox ที่มีช่องโหว่ JCE ที่เจาะได้แน่ๆ เพื่อดูว่าเครื่องมือนี้ทำงานอย่างไร

    2559-10-12-11_14_13-desktop-running-oracle-vm-virtualbox

     

    ทำการโจมตีจาก Kali Linux ไปยังเครื่องเป้าหมาย ด้วย joomscan

    2559-10-12-11_15_33-start

     

    รายงานผลแจ้งว่า joomscan มีการ Update ล่าสุด เมื่อ Oct 22, 2012 นั่นคือเมื่อ 4 ปีที่แล้ว

    2559-10-12-11_06_50-start

    รายผลที่แจ้งช่องโหว่ ที่เจาะได้ มีดังนี้

    2559-10-12-16_46_50-clipboard

    แสดงให้เห็นว่า ด้วย Tools ตัวเดียวอาจจะไม่สามารถมั่นใจได้ว่า ระบบของเราปลอดภัยหรือไม่

    ฝากไว้พิจารณาครับ

     

     

     

  • แก้ไข wordpress post แล้ว update ไม่ได้ แอดมินต้องแก้ไขอย่างไร

    หลังจากย้าย WordPress site ไปลง ubuntu 16.04.1 ก็ได้เตรียมติดตั้งโปรแกรมต่าง ๆ แต่แล้วเมื่อลองจะแก้ไขบล็อก กลับทำไม่ได้ ขึ้นข้อความว่า

    “The sysadmin.psu.ac.th page isn’t working
    sysadmin.psu.ac.th is currently unable to handle this request.
    HTTP ERROR 500”

    เกิดอะไรขึ้นหล่ะ แล้วเราจะต้องทำอย่างไร

    ค้นหาเจอเว็บนี้ ที่บอกเราว่า ให้ลองเปิด DEBUG
    https://wordpress.org/support/topic/http-error-500-internal-server-error-whole-blog-is-down

    “So to understand where the reason of 500 error is I suggest go to wp-config.php in the root of your website and add there two lines:
    define(‘WP_DEBUG’, true);
    @ini_set(‘display_errors’, 1);
    After that you can see exactly place which linked with 500 error.
    After fixing I suggest return it how it was by default (only one line)
    define(‘WP_DEBUG’, false);”

    เมื่อใช้คำสั่งตรวจสอบ error.log ครั้งแรก ไม่เห็นอะไรเพิ่มเติม แต่พบ error 404 ของ plugin ที่ชื่อ WP Like Button ก็ลองปิด plugin นี้ดูเราจึงจะพบ error ก็เห็น error ต่าง ๆ ได้จากคำสั่งข้างล่างนี้

    tail -f /var/log/apache2/error.log

    Fatal error: Uncaught Error: Class ‘DomDocument’ not found in /var/www/wordpress/wp-content/plugins/google-sitemap-plugin/google-sitemap-plugin.php:144

    ค้นหาต่อว่าทำไมจึงขาด DomDocument ก็เจอเว็บนี้
    https://blog.namran.net/2009/03/10/php-fatal-error-class-domdocument-not-found-in-blabla/
    แนะนำว่า

    “the solution turn out to be yum install php-xml”

    ตรวจสอบดู เออนะ ไม่มี php-xml จริง ๆ ด้วย ด้วยคำสั่งนี้
    dpkg -l | grep php-xml
    dpkg -l | grep php7.0-xml

     

    ทีนี้เราก็ติดตั้ง php-xml ด้วยคำสั่ง
    sudo apt install php-xml
    จะได้
    libxslt1.1 php-xml php7.0-xml

    ทำให้สามารถใช้งานได้ปรกติแล้ว ซึ่งในกระบวนการ post และ ppdate post นั้น ได้แก้ไข post ให้แล้ว เพียงแต่ว่ามันไปทำต่อที่ google-sitemap-plugin ไม่สำเร็จจึงแสดงเป็น error ออกมา

    ขอบคุณเพื่อน ๆ ที่ช่วยกันแก้ไขเรื่องนี้ด้วยกันด้วยครับ

  • วิธีตรวจสอบเว็บไซต์ที่โดน Hack #18

    ได้รับแจ้งจาก ThaiCERT ว่ามีเว็บไซต์ภายในโดเมนของมหาวิทยาลัย เผยแพร่ Code อันตราย ดังต่อไปนี้
    2559-08-01 14_13_24-[THAICERT.OR.TH #93507] แจ้งปัญหา พบโปรแกรมหรือซอร์สโค้ดที่ต้องสงสัยบนโดเมน psu.
    จึงเข้าทำการตรวจสอบในเครื่องเว็บเซิร์ฟเวอร์ดังกล่าว พบการวางไฟล์ Backdoor ไว้ดังที่อธิบายใน วิธีตรวจสอบเว็บไซต์ที่โดน Hack #17 แล้ว

    แต่ที่เห็นผิดปรกติ ก็เป็นใน access.log ของ Apache ซึ่งพบว่า มีการเรียกใช้ xmlrpc.php เป็นจำนวนมาก ดังภาพ

    13838385_1246527315359434_1464114410_o

    จากการตรวจสอบ พบว่า xmlrpc.php เป็นช่องทางให้สามารถเรียกใช้ Function ต่างๆผ่านทาง HTTP และเป็นช่องทางให้ App ต่างๆสามารถติดต่อกับ WordPress ได้ แต่ก็เป็นช่องทางให้เกิดการเดารหัสผ่านจำนวนมากได้เช่นกัน (Brute Force Attack) โดยสามารถทดลอง ส่ง XML ที่มีโครงสร้าตามที่ API กำหนด เช่น wp.getUsersBlogs [1][2][3] สามารถดูจำนวน Blog ที่ User คนนั้นๆเขียนขึ้นมา แต่ ต้องระบุ username/password ซึ่งตรงนี้จะเป็นส่วนที่ทำให้เกิดการ Brute Force ได้ ด้วยคำสั่งต่อไปนี้ เป็นการเดารหัสผ่านไปยัง http://localhost/blog/xmlrpc.php


    echo "<methodCall><methodName>wp.getUsersBlogs</methodName><params><param><value> <string>admin</string></value></param>  <param><value><string>password</string></value></param></params></methodCall>" | POST http://localhost/blog/xmlrpc.php

    หากสำเร็จ จะได้คำตอบมาอย่างนี้

    2559-08-01 15_14_21-Clipboard

    หากเป็น WordPress รุ่นต่ำกว่า 4.0 เปิดให้ใช้ system.multicall ซึ่งทำให้สามารถเดารหัสผ่านจำนวนมาก ใน 1 Request ทำให้ระบบตรวจจับได้ยาก ดังนั้น หากไม่จำเป็นต้องใช้ xmlrpc.php ก็สมควรปิดการใช้งานที่ระดับ Apache โดยสร้างไฟล์ /etc/apache2/conf-enabled/xmlrpc.conf มีข้อมูลเป็น


    <FileMatch "xmlrpc\.php$">
    Order Deny,Allow
    Deny from All
    </FileMatch>

    จากนั้น Restart Apache ก็สามารถปิดการทำงานได้
    Reference
    [1] http://www.hackingsec.in/2014/08/wordpress-xml-rpc-brute-force-attack.html#
    [2] http://blog.dewhurstsecurity.com/2012/12/11/introduction-to-the-wordpress-xml-rpc-api.html
    [3] https://codex.wordpress.org/XML-RPC_WordPress_API

  • อัพ PHP 5.2 to 5.3

    ไม่แน่ใจว่าจะเอามะพร้าวมาขายสวนหรือเปล่านะคับ แต่ก็เผื่อว่าบางท่านเจอปัญหาเดียวกันแล้วแก้ไม่ได้สักที (แบบไม่ต้องติดตั้งโปรแกรมใหม่หมด)

    ด้วยตัวเองก่อนหน้านี้ติดตั้ง Apache 2.2 + PHP 5.2 + phpMyAdmin on Windows 8.1 เพื่อใช้งาน Joomla 2.5 แต่เมื่อต้องการจะติดตั้ง Joomla 3 และ Moodle ระบบกลับฟ้องว่าไม่ support PHP 5.2 จะต้องติดตั้ง PHP 5.3.10 ขึ้นไป[1] ด้วยความที่ไม่อยากติดตั้งใหม่ทั้งหมด เลยค้นหาวิธีการอัพ php 5.2 เป็น php 5.3 แต่ก็ไม่ประสบผลสำเร็จ -_-‘ หลายเว็บมีความซับซ้อนและยุ่งยากสำหรับผมมาก แต่ไปเจอมาเว็บนึง[2] ซึ่งมีวิธีการที่ง่ายมากๆ เลยอยากนำมาแชร์ให้สำหรับท่านไหนที่ประสบปัญหาเหมือนอย่างผม

    ขั้นตอนการ upgrade 

    1. เข้าเว็บ http://windows.php.net/downloads/releases/archives/  แล้วคลิกดาวน์โหลด

    php-5.3.29-Win32-VC9-x86.zip

    01

    2. เมื่อดาวน์โหลดไฟล์เสร็จแล้ว ก็ทำการ unzip

    3. เปลี่ยนชื่อโฟลเดอร์ เป็น php5

    4. copy โฟลเดอร์ php5

    5. ไปที่โฟลเดอร์ php5 เวอร์ชั่นก่อนหน้านี้ที่เราเคยติดตั้งไว้ โดยให้ทำการ rename เป็น php5_old    ในที่นี้จะอยู่ที่ C:\AppServ\

    6. past โฟลเดอร์ php5 ที่ได้จากการ ข้อ 2 และ 3

    02

    7. เข้าไปที่ Control Panel > Computer Management> Service เพื่อคลิก restart service ของ Apache2.2  หรือจะคลิกขวาที่ My Computer > Manage > Service ก็ได้เหมือนกันคับ

    03

    8. ทำการทดสอบการใช้งานโดย เปิดเว็บเบราเซอร์ แล้วพิมพ์ url : localhost/phpinfo.php จะปรากฏรายละเอียดเกี่ยวกับ php 5.3.29 ที่เราได้ทำการติดตั้ง

    04

    9. เสร็จสิ้นกระบวนการ ^^

    ปล. Joomla 1.5 และ 2.5 ที่ได้เคยติดตั้งไว้ ก็ยังสามารถใช้งานได้ปกติดีคับ

    Refer :
    [1] http://www.joomla.org/technical-requirements.html
    [2] http://www.websiteadministrator.com.au/articles/install_guides/installing_php535.html

  • วิธีใช้เครื่องมือในการเขียนบล็อกใน wordpress

    how-to-add-new-post-in-wordpress

    ผมได้เขียนคำแนะนำวิธีใช้เครื่องมือในการเขียนบล็อกใน wordpress ไป วันนี้อยากนำมาเล่าสู่กันฟังอีกสักรอบ เพราะว่ามีสมาชิกใหม่ๆเข้ามาร่วมเยอะ

    เคยเขียนเรื่อง “KM เรื่อง การใช้งานสำหรับผู้เขียน wordpress” (http://sysadmin.psu.ac.th/2012/11/16/km-how-to-authoring-in-wordpress/) Posted on November 16, 2012 by วิบูลย์ วราสิทธิชัย

    อันนี้จะเป็นคำแนะนำวิธีการตั้งชื่อ URL Link เป็นภาษาอังกฤษ แม้ว่า เราจะตั้งชื่อเรื่องเป็นภาษาไทย ต้องใช้วิธีการ manual ในการแก้ไข

    ตั้งค่าการเผยแพร่บทความให้อ่านได้เฉพาะสมาชิกที่ login (http://sysadmin.psu.ac.th/2013/01/04/set-post-to-private/) Posted on January 4, 2013 by วิบูลย์ วราสิทธิชัย

    อันนี้จะเป็นคำแนะนำวิธีการซ่อนบทความที่ไม่ต้องการเปิดเผยเนื่องจากเป็นข้อมูลเฉพาะเจาะจงในม.อ. เช่น workshop PSU Passport Authentication อย่างนี้กำหนดค่าให้ login ก่อนจึงอ่านได้

    และวันนี้มีมาเล่าสู่กันฟังเพิ่มเติมครับว่า เราสามารถใส่รูปภาพ เพื่อเป็นรูปแรกสำหรับหน้าบล็อกเรื่องที่เขียนครับ โดยคลิกที่คำว่า Set featured Image อยู่ด้านขวามือข้างล่างหน้าบล็อกที่กำลังเขียน ให้อัปโหลดรูป (ต้องย่อขนาดรูปให้เล็ก ประมาณสัก กว้าง 130px สูง 130px ด้วยเครื่องมือตกแต่งรูปที่ใช้เป็น ก่อนอัปโหลดนะครับ) ขึ้นไปเก็บบน sysadmin.psu.ac.th แล้วคลิกเลือกมาใช้ ลืมบอกไปว่า Featured Image จะโผล่ในหน้าแรก (Home)

    ลองใช้งาน ติดขัดอย่างไรก็สอบถามมานะครับ

     

  • How to Install VCNT Visitorcounter on joomla 3.x

    วิธีติดตั้ง VCNT Visitorcounter on Joomla 3.x

    สวัสดีครับ ในวันนี้ใครที่ใช้ Joomla 3 ที่ยังไม่มีตัวนับสถิติผู้เข้าชม ผมมีตัวนับสถิติ ที่ทำงานง่ายไม่ซับซ้อนมาแนะนำครับ โดยมันมีชื่อว่า VCNT Visitorcounter บางคนอาจจะเคยใช้ Vinaora Visitcounter มาก่อน แต่พอมา joomla 3 นี้ไอ่ตัว Vinaora ยังไม่ได้ทำ plugin มาเผื่อ joomla 3 ใครเผลอเอาไปติดตั้งเว็บของท่านอาจไม่ปรากฏอะไรซักอย่างในหน้าแรกเลยก็เป็นได้นะครับ (อย่าลองเชื่อผม) ตัวนับสถิติที่แนะนำวันนี้ก็ได้แก่  VCNT Visitorcounter ซึ่งดาวน์โหลดได้จาก http://joomla-extensions.kubik-rubik.de/vcnt-visitorcounter#backend-info  เมื่อดาวโหลดมาแล้วก็ทำการติดตั้ง มันจะไปเพิ่มอยู่ใน Module Manager ครับ

    vcnt-counter1และหากจะเข้าไป ปรับแต่งค่าให้ไปที่  Module Manager > VCNT Visitorcounter มันก็จะมีหลาย Tab ให้เราปรับเปลี่ยน ซึ่งเราvcnt-counter2ติดตั้งเสร็จแล้วเลือก Position ให้มัน มันก็จะไปปรากฏหน้าเว็บดังรูปนี้ครับ จบข่าว..

    vcnt-counter3

  • How to use Authentication Ldap in PSU แบบละเอียด

    วิธีใช้งาน Authentication – LDAP บน Joomla ใน มอ. บน Ubuntu Server 12.04.5 LTS แบบละเอียด (ผมคาดว่า version 14.04.1 LTS ก็น่าจะใช้ได้เหมือนกันนะ)

    สวัสดีครับไม่ได้เขียนนาน เพราะยังไม่ได้ศึกษาอะไรเพิ่มเติมมากนักเกี่ยวกับเซิร์ฟเวอร์ในช่วงที่ผ่านๆมาเนื่องจาก ทำงานทั่วไปซะเป็นส่วนใหญ่ พอดีเมื่อวันพุธที่ผ่านมาได้ติดตั้งและทดลองใช้ Ldap plugin บน joomla ให้มัน ยืนยันตัวตนผ่าน PSU Passport เพื่อให้เฉพาะบุคคลภายในมหาวิทยาลัยสามารถอ่านบทความหรือเนื้อหานั้นได้ เช่น พวกรายชื่อ อีเมล์ หรือ วาระการประชุมต่างๆ เริ่มเลยนะครับ

    0.กรอกแบบฟอร์มขอใช้บริการ ldap ให้เรียบร้อย และส่งไปยังศูนย์คอมเพื่อให้เจ้าหน้าที่ จัดทำ Policy ในการเข้าใช้งานให้กับเราก่อน โดยเราจะต้องลงชื่อเครื่องที่จะใช้บริการ ldap และหมายเลข IP Address และลงชื่อเป็นลายลักอักษร

    1. ติดตั้ง open-ssl ก่อนเพื่อที่จะใช้ Protocol https เพื่อเข้ารหัสข้อมูลผ่าน ssl ไม่งั้นเวลาเราใช้ ldap แบบเลือกเซิร์ฟเวอร์เป็น https จะไม่สามารถใช้งานได้ คำสั่งในการติดตั้งคือ apt-get install openssl
    2. ติดตั้ง php5-ldap ก่อน เพื่อจะใช้งาน ldap plugin บน joomla เพราะ joomla เป็น php คำสั่งในการติดตั้งคือ apt-get install php5-ldap ติดตั้งเสร็จแล้วให้ restart service apache ด้วยคำสั่ง service apache2 restart
    3. ติดตั้ง ldap-utils โดยคำสั่ง apt-get install ldap-utils
    4. แก้ไฟล์ /etc/ldap/ldap.conf โดยเพิ่มบรรทัดดังนี้

    TLS_REQCERT never

    1. ทดสอบด้วย ldapsearch ให้ติดตั้ง ldap-utils
    2. ทดสอบด้วยคำสั่ง

    ldapsearch -H “ldaps://xx.xx.xx.xx” -b “dc=psu,dc=ac,dc=th” -x

    (xxx นี่คือ server ldap ที่เราใช้ ถ้าใน มอ.จะเป็น ldaps://dc2.psu.ac.th)

    จะพบผลของการค้นหา

    # search result

    search: 2

    result: 4 Size limit exceeded

    # numResponses: 1004

    # numEntries: 1000

    # numReferences: 3

     

    ถ้าทำได้ครบดังนี้ถือว่าการเตรียมการใช้งาน ldap บนฝั่ง server เสร็จเรียบร้อย

    ————————————————————————————————————————————–

    จากนั้นเปิด joomla ของเรามาและเข้าไปที่ backend เพื่อทำการปรับแต่งค่า

    1. ไปที่ Extensions > Plugin Manager > Authentication – LDAP ของผมใช้ Joomla version 3.x.x จะได้หน้าตาแบบนี้

    Authentication-ldapให้ตั้งค่าให้ตรงตามรูปภาพ โดยสามารถเข้าไปดูรายละเอียดการตั้งค่าต่างๆใน plugin ตัวนี้ได้จาก บทความที่ คุณจัตตุพร ชูช่วย เขียนไว้ครับ http://sysadmin.psu.ac.th/2013/02/07/การเชื่อมต่อ-psu-passport-joomla-ldap/ ซึ่งมีหลากหลายเวอร์ชั่นมากตั้งแต่ Joomla 1.5.xx เป็นต้นมา จนถึง 3.x.x

    1. จากนั้นทดลองไปที่ Menus > และสร้าง Menu สำหรับยืนยันตัวตน และเลือก Menu Item type เป็นLogin Form และจัดปรับให้ Menu ที่เราจะยืนยันตัวตนแสดงในหน้าแรก

    loginmenu3.ทดลองเปิดเว็บและไปที่ Menu ยืนยันตัวตนดูครับจากนั้นลองยืนยันตัวตนดู ก็จะสามารถเข้าสู่ระบบได้เรียบร้อยแล้ว โดยหากเรามี Article ที่กำหนดให้เฉพาะสมาชิกอ่านมันก็จะปรากฏหลังจากที่เราทำการยืนยันตัวตนครับ

    login

    เมื่อใช้งานเสร็จแล้ว และต้องการยกเลิกการยืนยันตัวตน ให้กดที่ Menu เดิมอีกครั้งจะปรากฏปุ่ม ออกจากระบบให้เรากดครับ

    logoutpage

     

    เสร็จสิ้นภารกิจ แนะนำอีก 2 ข้อนะครับ

    1. การเปิดหน้า login เพื่อยืนยันตัวตนเข้าสู่ระบบ มันจะมี Menu ให้สมัครสมาชิกอยู่ด้วยให้เราปิดส่วนนี้ซะกันคนนอกมั่วเข้ามาสมัคร โดยไปที่ System > Global configuration > User Manager และให้เราปิดการรับสมัครสมาชิกดังรูป

    closeregist2.หากต้องการเขียน Article และเปิดให้เฉพาะผู้ใช้งานภาย มอ. เห็น แนะนำให้สร้าง Article หรือ Category และเลือก parent เป็น Menu ที่เราทำเป็น Menu ยืนยันตัวตน เวลาที่ User ใช้งานจะได้มองเห็นเนื้อหา ด้านล่าง Menu ที่เรายืนยันตัวตนเลยจะได้ไม่เสียเวลาไปมองหาไกล

    appear

     

    อ้างอิง

    http://share.psu.ac.th/blog/server-dev/21929

    http://sysadmin.psu.ac.th/2013/02/07/การเชื่อมต่อ-psu-passport-joomla-ldap/

  • วิธีตรวจสอบเว็บไซต์ที่โดน Hack #15

    เทคนิคนี้ ใช้ผ่าน Internet Information Services (IIS) Manager โดยการแก้ไข Request Filtering ในระดับ Web Server เลย โดยดำเนินการตามวิธีการต่อไปนี้

    1. เรียก Command ด้วย การกดปุ่ม Windows + R แล้ว พิมพ์ inetmgr แล้วกดปุ่ม Enter
    2. คลิกเว็บเซิร์ฟเวอร์ของเครื่องที่ต้องการใน Connection Tab (ตัวอย่างในภาพ คลิกที่ WUNCAWEBSEC)
    3. ต่อไป ภายใต้หัวข้อ IIS ให้ Double-Click ที่ Request Filtering
    4. คลิกที่ Rules tab
    5. เพิ่มกฏสำหรับ JCE Bot
      ซึ่ง ไม่ต้องการให้ PHP ทำงานภายใต้ URL ซึ่งมีข้อความว่า “images/stories”
      โดย ไปที่ Action ด้านขวามือ แล้ว คลิกที่ Add Filtering Rules …
      แล้วใส่ข้อมูลตามภาพ แล้วคลิกปุ่ม OK

    1. เพิ่มกฏสำหรับ Upload โฟลเดอร์
      ซึ่ง ไม่ต้องการให้ PHP ทำงานภายใต้ URL ซึ่งมีข้อความว่า “upload”
      โดย ไปที่ Action ด้านขวามือ แล้ว คลิกที่ Add Filtering Rules …
      แล้วใส่ข้อมูลตามภาพ แล้วคลิกปุ่ม OK
    2. ผลที่ได้ใน Rules tab

    ทดสอบผลการทำงาน

    สมมุติเดิมโดนวางไฟล์ Backdoor ไว้ที่

    http://localhost/corin/images/stories/backdoor.php

    แต่เมื่อตั้ง Rules ดังกล่าวแล้ว จะทำให้ Hacker ไม่สามารถเรียกใช้งาน PHP ที่วางไว้ใน images/stories ได้ โดยจะได้ Error เช่นนี้

    วิธีนี้มีข้อดีคือ สามารถป้องกันการใช้งาน PHP ใน images/stories (และใน upload โฟลเดอร์) แต่ยังสามารถเรียกไฟล์ภาพและไฟล์อื่นๆได้ตามปรกติ เช่น

    http://localhost/corin/images/stories/clownspin.gif

    ลองใช้งานดูครับ 😉

  • ความเข้าใจในการสร้าง 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 ก็มีเพียงเท่านี้