Tag: apache 2.4.x

  • เปลี่ยน Certificate!?

    เนื่อง Certificate *.psu.ac.th จาก Comodo เดิมซึ่งกลายเป็น Cert. ที่จัดว่า WEAK แล้ว ทางเจ้าหน้าที่เครือข่ายจึงได้ขอ Cert. ใหม่มา ที่ Strong ขึ้น 🙂 ก็ต้องมานั่งเปลี่ยน Cert. ในเครื่องที่ให้บริการขั้นตอนดังนี้

    • Download Cert. ใหม่มาซึ่งต้องติดต่อขอไปที่ Net@dmin โดยผ่านช่องทางของ help.psu.ac.th
    • ไฟล์ที่จะโหลดมาใช้งานมีทั้งหมด 3 ไฟล์ได้แก่ STAR_psu_ac_th.ca-bundle, STAR_psu_ac_th.crt และ STAR_psu_ac_th_key.key เมื่อดาวน์โหลดมาเสร็จแล้วให้เอาไปแทนที่เก่าได้เลย ในตัวอย่างนี้จะเก็บไว้ที่ /etc/ssl/private
    • ทีนี้ มาดู config เก่าของ apache2

    <IfModule mod_ssl.c>
    <VirtualHost *:443>
    ServerName bahamut.psu.ac.th
    ServerAdmin cc-server-admin@group.psu.ac.th
    DocumentRoot "/var/www/html"
    ErrorLog ${APACHE_LOG_DIR}/bahamut.ssl_error_log
    TransferLog ${APACHE_LOG_DIR}/bahamut.ssl_access_log
    LogLevel warn

    SSLEngine on
    SSLCertificateFile /etc/ssl/private/STAR_psu_ac_th.crt
    SSLCertificateKeyFile /etc/ssl/private/STAR_psu_ac_th.key
    SSLCertificateChainFile /etc/ssl/private/STAR_psu_ac_th.ca-bundle

    RewriteEngine On
    RewriteRule /avl https://licensing.psu.ac.th

    <Directory /var/www/licensing>
    AllowOverride All
    Order deny,allow
    Deny from all
    Allow from 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
    </Directory>
    </VirtualHost>
    </IfModule>

      • จะเห็นว่าไฟล์ชื่อไม่ตรงอยู่ไฟล์หนึ่งคือ STAR_psu_ac_th.key ก็เปลี่ยนชื่อให้ตรง เป็นอันเสร็จ
      • แต่ … เนื่องจากเป็น Cert. ใหม่ เพื่อเพิ่มความแข็งแรง เจ้าหน้าที่เครือข่ายจึงได้กำหนด Passphrase ไว้ด้วย ต้องแก้ไขแฟ้ม /etc/apache2/mods-enabled/ssl.conf ในบรรทัดที่เขียนว่า SSLPassPhraseDialog exec:/usr/share/apache2/ask-for-passphrase ให้แก้ /usr/share/apache2/ask-for-passphrase เป็น /etc/ssl/private/passphrase-script แล้วสร้างแฟ้ม /etc/ssl/private/passphrase-script มีข้อความว่า

    #!/bin/sh
    echo "passphrase ที่ได้รับแจ้งจาก Net@dmin"

      • chmod +x /etc/ssl/private/passphrase-script และทดสอบ script ด้วยว่าผลลัพธ์ที่ได้ตรงกับ passphrase ที่ Net@dmin แจ้งมา
      • restart apache2 ด้วยคำสั่ง sudo service apache2 restart ถ้า passphrase ที่ใส่ไว้ในแฟ้ม passphrase-script ถูกต้องจะ restart สำเร็จ
      • เป็นอันเสร็จ

    สิ่งที่ต้องแก้เพื่อให้ได้ A+ ในการทดสอบกับเว็บ https://www.ssllabs.com/ssltest/analyze.html

    • แก้ไขแฟ้ม /etc/apache2/mods-enabled/ssl.conf โดยแก้ไข/เพิ่ม ข้อความดังต่อไปนี้

    SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:
    RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
    SSLHonorCipherOrder on
    SSLProtocol all -SSLv3 -SSLv2
    SSLCompression off

    • sudo a2enmod headers เพื่อให้ module headers ของ apache2 ทำงาน
    • แก้ไขแฟ้มของไซต์ที่เปิด ssl ไว้ จากตัวอย่างนี้คือ /etc/apache2/sites-enabled/licensing-ssl.conf โดยเพิ่มข้อความว่า
      Header add Strict-Transport-Security "max-age=15768000;includeSubDomains"
    • ตัวอย่าง

    <IfModule mod_ssl.c>
    <VirtualHost *:443>
    ServerName licensing.psu.ac.th
    ServerAdmin cc-server-admin@group.psu.ac.th
    DocumentRoot "/var/www/html/avl"
    ErrorLog ${APACHE_LOG_DIR}/licensing.ssl_error_log
    TransferLog ${APACHE_LOG_DIR}/licensing.ssl_access_log
    LogLevel warn
    SSLEngine on
    Header add Strict-Transport-Security "max-age=15768000;includeSubDomains"
    SSLCertificateFile /etc/ssl/private/STAR_psu_ac_th.crt
    SSLCertificateKeyFile /etc/ssl/private/STAR_psu_ac_th.key
    SSLCertificateChainFile /etc/ssl/private/STAR_psu_ac_th.ca-bundle
    </VirtualHost>
    </IfModule>

    • restart apache2 ด้วยคำสั่ง sudo service apache2 restart
    • ทั้งหมดนี้ทำ บน Ubuntu 14.04.1
    • ผลของการตั้งค่าตามนี้ จะทำให้ผู้ใช้ที่ยังใช้งาน Windows XP และ IE6 ไม่สามารถใช้งานเว็บไซต์ได้
    • จบ ขอให้สนุกครับ

    จุดสังเกตุเมื่อเปลี่ยน certificate แล้ว
    ก่อนเปลี่ยนบน Chrome เบราเซอร์
    https-sharedrive-chrome-before-update-cert

    หลังเปลี่ยนบน Chrome เบราเซอร์
    after

    ที่มา:

    http://www.bauer-power.net/2014/04/how-to-enable-http-strict-transport.html#.VJJ8pXtKW7A

    http://www.hackido.com/2009/10/quick-tip-auto-enter-password-for-your.html

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

  • การสร้าง virtualhost บน Apache2 web server (2.4.x ขึ้นไป)

    ขอเล่าเรื่องการสร้าง virtualhost บน Apache2 web server (2.4.x ขึ้นไป) อย่างง่ายๆ แต่ก็เป็นผลมาจากการเปลี่ยนจาก ubuntu 12.04 server ไปเป็น ubuntu 14.04 server เมื่อเร็วๆนี้

    Apache 2.4.x เช่น 2.4.7 ที่มาพร้อม ubuntu 14.04 server จะมีการจัดการเรื่อง Document root ที่แตกต่างจากเวอร์ชั่นที่ต่ำกว่า เช่น Document root จะอยู่ที่ /var/www/html แทนที่จะเป็น /var/www เหมือนเดิม ดังนั้นเมื่อทำ virtualhost จึงต้องมีการวางไดเรกทอรีไว้ที่ /var/www และทำ virtualhost เช่น www.example.com และชี้ documentroot ที่ /var/www/www.example.com

    มาดูกันครับว่าจะต้องทำอย่างไรบ้าง เริ่มต้นที่หลังจากติดตั้ง ubuntu 14.04 เสร็จแล้ว พร้อมทั้งได้ติดตั้ง packages LAMP หากไม่แน่ใจก็ตรวจสอบด้วยคำสั่ง sudo tasksel
    ในบทความมีการอ้างถึง editor ที่ใช้แก้ไขไฟล์ชื่อ vi หากไม่คุ้นเคยวิธีใช้ก็ให้เปลี่ยนเป็นคำว่า nano จะเป็น full screen editor ใช้ง่ายกว่า

    ตรวจสอบว่าเรามีโดเมนเนมแล้ว (check 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

    เข้าไปที่ไดเรกทอรี
    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

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

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

    ใช้คำสั่งแสดงรายการ จะเห็น
    mama@ubuntu:/etc/apache2/sites-available$ ls
    000-default.conf  default-ssl.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

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

    หากทำอีก site ชื่อ iserver.example.com ก็เลียนแบบด้านบน และเมื่อทดสอบด้วยคำสั่ง w3m
    mama@ubuntu:/etc/apache2/sites-available$ w3m http://iserver.example.com
    ก็จะได้เช่นเดียวกัน (ควรใส่ข้อความให้เกิดความแตกต่าง)
    ISERVER Hello, world!

    ต่อไปคุณต้องคิดต่อเองว่าถ้าต้องใช้ https ด้วยหรือไม่ ถ้าต้องการ จะใช้ self-signed certificate ที่ apache2 ให้มา หรือว่า จะซื้อ 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 โดยใช้คำสั่ง
    sudo a2enmod ssl
    sudo a2ensite default-ssl
    sudo service apache2 reload

    w3m https://www.example.com
    ก็ควรที่จะเชื่อมต่อไปยัง web server ได้ โดยที่จะยังมีคำเตือนในเรื่อง certificate ที่ไม่ถูกต้อง เนื่องจากเป็น self-signed certificate แต่จะเข้าไปยังเว็บเพจได้
    จะเห็นแบบนี้
    Apache2 Ubuntu Default Page
    It work!

    ต่อไปก็จะทำให้ใช้ https ได้แบบใช้ self-signed certificate
    ให้ copy ไฟล์ www.example.com.cof เป็นอีกไฟล์ให้มีชื่อ 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 ใหม่
    sudo a2ensite www.example.com-ssl

    สั่ง reload apache2
    sudo service apache2 reload

    หลังจากนั้นเราก็จะสามารถเข้าถึง URL https://www.example.com ได้อย่างถูกต้อง

  • วิธีตั้งค่า Apache web server 2.4.x แตกต่างจาก 2.2.x

    asf_logo_wide
    เก็บตกจากวันวานเปิดอบรม Workshop Linux System Administration II (WS-LSA2) ที่ศูนย์คอมฯ 2 วัน ผมเตรียมเอกสาร workshop วิธีตั้งค่าหลายๆเรื่องบน ubuntu 12.04 แต่พอดีกับที่ ubuntu 14.04 ออกมาแล้ว จึงนำ ubuntu 14.04 มาให้ผู้เรียนใช้ติดตั้ง มันก็ไม่มีอะไรแตกต่างไปจาก ubuntu 12.04 ตั้งแต่เริ่มต้น installation จนกระทั่งมาถึงเรื่องที่เราจะตั้งค่าเกี่ยวกับ Apache web server ซึ่งทำให้ต้องแก้ไขเอกสารประกอบการสอนกันสดๆตอนนั้นเลย (ฮา)

    เพราะว่า Apache Web Server ที่อยู่ในแผ่น ubuntu 14.04 นั้นเป็นเวอร์ชั่น 2.4.7 ซึ่งมี Default Document Root อยู่ที่ /var/www/html ต่างจาก Apache Web Server เวอร์ชั่นก่อนหน้านี้ (2.2.x) ที่มี Default Document Root อยู่ที่ /var/www เป็นต้น

    พอจะสรุปได้ดังนี้

    Apache Web Server 2.2.x ทำแบบนี้
    1.พื้นที่ default ของ Apache Web Server คือไดเรกทอรี /var/www
    หากจะติดตั้ง Joomla CMS เราจะเตรียมพื้นที่สำหรับติดตั้ง joomla ไว้ที่ไดเรกทอรี /var/www/testjoomla ด้วยคำสั่ง sudo mkdir -p /var/www/testjoomla

    2.website config file จะอยู่ที่ไดเรกทอรี /etc/apache2/sites-available
    จะมีไฟล์ชื่อ default และ default-ssl มาให้
    และหากจะสร้าง VirtualHost pma.example.com เราก็สร้าง config file ที่มีชื่อไฟล์อย่างไรก็ได้ เช่น /etc/apache2/sites-available/pma หลังจากนั้นเราก็ enable VirtualHost นี้ จาก config ที่เราสร้างขึ้นใหม่ โดยการใช้คำสั่ง sudo a2ensite pma แล้วก็สั่ง restart apache

    3.เมื่อเข้าไปดูในไฟล์ default
    DocumentRoot จะอยู่ที่ /var/www

    4.Apache2 config file จะอยู่ที่ /etc/apache2/conf.d
    สมมติว่าต้องการเพิ่มการป้องกัน joomla web server ด้วย config file ชื่อ jce จะต้องทำดังนี้
    สร้างไฟล์ที่จะมีชื่ออย่างไรก็ได้ เช่น /etc/apache2/conf.d/jce แค่นี้ก็ได้แล้ว แล้วก็สั่ง restart apache และเมื่อจะไม่ใช้ config file jce นี้แล้ว ก็แค่ลบไฟล์นี้ทิ้ง

    แต่สำหรับ Apache Web Server 2.4.x วิธีการจะแตกต่างไป ดังนี้
    1.พื้นที่ default ของ Apache Web Server คือไดเรกทอรี /var/www/html
    หากจะติดตั้ง Joomla CMS เราจะต้องเตรียมพื้นที่สำหรับติดตั้ง joomla ไว้ที่ไดเรกทอรี /var/www/html/testjoomla ด้วยคำสั่ง sudo mkdir -p /var/www/html/testjoomla

    2.website config file จะอยู่ที่ไดเรกทอรี /etc/apache2/sites-available
    จะมีไฟล์ชื่อ 000-default และ default-ssl มาให้ (ต่างจาก 2.2.x)
    และหากจะสร้าง VirtualHost pma.example.com เราก็ต้องสร้าง config file ที่มี .conf ต่อท้ายชื่อไฟล์ด้วย เช่น /etc/apache2/sites-available/pma.conf
    หลังจากนั้นเราก็ enable VirtualHost นี้ จาก config ที่เราสร้างขึ้นใหม่ โดยการใช้คำสั่ง
    sudo a2ensite pma แล้วจึงจะสั่ง restart apache สำเร็จ

    3.เมื่อเข้าไปดูในไฟล์ default
    DocumentRoot จะอยู่ที่ /var/www/html

    4.Apache2 config file จะอยู่ที่ไดเรกทอรี /etc/apache2/conf-available และต้องสั่ง enable config file ที่ต้องการใช้งานก่อนจึงจะใช้งานได้ แล้วจะเกิดไฟล์ขึ้นอยู่ที่ไดเรกทอรี /etc/apache2/conf-enabled
    สมมติว่าต้องการเพิ่มการป้องกัน joomla web server ด้วย config file ชื่อ jce จะต้องทำดังนี้ เราต้องตั้งชื่อให้มี .conf ต่อท้ายด้วยคือ /etc/apache2/conf-available/jce.conf
    และใช้คำสั่งเพื่อ enable config file ดังนี้ sudo a2enconf jce แล้วก็สั่ง restart apache จึงจะสำเร็จ และเมื่อจะไม่ใช้ config file นั้น ก็จะต้องสั่งดังนี้ sudo a2disconf jce แล้วก็สั่ง restart apache จึงจะสำเร็จ

    ก็หวังว่าบทความนี้จะเป็น guide ให้แอดมินคิดออกว่า “เอ๊ะ! ทำไมเราตั้งค่าไม่ได้ทั้งๆที่เคยทำได้และทำอยู่บ่อยๆด้วย”

    ขอบคุณครับ