Tag: http

  • การสร้าง 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 ได้อย่างถูกต้อง