ตั้งค่า Virtual Host ใน Apache เพื่อใช้งาน Domain และ SSL บน Ubuntu

  1. วิธีลง LAMP Stack (Apache, MySQL/MariaDB, PHP) ไปยัง Ubuntu บน EC2
  2. สร้าง MySQL User + Database และจัดการฐานข้อมูลด้วย Adminer
  3. ตั้งค่า Virtual Host ใน Apache เพื่อใช้งาน Domain และ SSL บน Ubuntu
  4. ลง Let’s Encrypt ใน Apache บน Ubuntu เพื่อใช้เว็บ https

จากโพส วิธีลง LAMP Stack (Apache, MySQL, PHP) ไปยัง Ubuntu บน EC2 เมื่อลงโปรแกรมสำหรับเป็นเว็บเซิฟเวอร์เรียบร้อยแล้ว หากจะนำไปใช้งานเป็นเว็บเซิฟเวอร์จริงที่เรียกเว็บผ่านชื่อโดเมน หรือจะมีการลง SSL Certificate ก็ควรจะต้องตั้งค่า Virtual Host ซึ่งมีประโยชน์หลายอย่าง เช่น ทำให้สามารถใช้งานหลายเว็บไซต์บนเซิฟเวอร์ได้ แต่ละเว็บไซต์สามารถมีการตั้งค่าที่แตกต่างกันได้ เป็นต้น

จดและตั้งค่าชื่อโดเมน

ก่อนตั้ง Virtual Host นี้ ควรจะมีชื่อโดเมน หรือ sub domain อยู่แล้ว และตั้งค่า A record ของโดเมนนั้นๆให้ชี้มาที่ IP ของเซิฟเวอร์นี้

เริ่มต้นโดยการคัดลอกไฟล์ default ของ Apache ไปยังไฟล์ใหม่ซึ่งเป็นชื่อเดียวกับโดเมนของเรา โดย

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/DOMAIN_NAME.com.conf

จากนั้นเปิดไฟล์ขึ้นมาเพื่อแก้ไขค่า โดย

sudo vi /etc/apache2/sites-available/DOMAIN_NAME.com.conf

ค่าที่ต้องให้ความสนใจ และใส่เพิ่มเติม ได้แก่

# ตั้งค่าพอร์ท ไม่ต้องแก้ไขหากใช้พอร์ท 80 (web default) เหมือนเดิม
<VirtualHost *:80>

# ชื่อโดเมน
ServerName DOMAIN_NAME.com

# ตั้งชื่อ www หากต้องการให้เข้าผ่าน www.DOMAIN_NAME.com ได้ด้วย
ServerAlias www.DOMAIN_NAME.com

# ตั้งค่าอีเมลล์ของผู้ดูแลเว็บไซต์
ServerAdmin admin@DOMAIN_NAME.com

# เปลี่ยนโฟลเดอร์ที่ใช้เก็บไฟล์เว็บ
DocumentRoot /var/www/DOMAIN_NAME.COM/public

# กรณีต้องการใช้งาน mod_rewrite โดยไฟล์ .htaccess จะต้องตั้งค่าเพิ่ม เช่น
<Directory /var/www/DOMAIN_NAME.COM/public>
    Options FollowSymLinks
    AllowOverride All  
    Require all granted
</Directory>

เมื่อแก้ไขครบถ้วนแล้ว ไฟล์ domain.com.conf จะมีข้อมูลดังต่อไปนี้

<VirtualHost *:80>
    ServerName DOMAIN_NAME.COM
    ServerAlias www.DOMAIN_NAME.com
    ServerAdmin admin@DOMAIN_NAME.COM
    DocumentRoot /var/www/DOMAIN_NAME.COM/public
    <Directory /var/www/DOMAIN_NAME.COM/public>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

เสร็จแล้วจะต้องไปสร้างโฟลเดอร์ที่ใช้เก็บเว็บไซต์ ให้ตรงกับค่า DocumentRoot ก่อน โดยใช้คำสั่ง

sudo mkdir -p /var/www/DOMAIN_NAME.com/public

จากนั้นเปิดใช้งาน mod_rewrite, เปิดใช้งาน Virtual host ใหม่นี้ และ reload apache ด้วยคำสั่ง

sudo a2enmod rewrite

sudo a2ensite DOMAIN_NAME.com.conf

sudo systemctl reload apache2

สามารถทดสอบได้โดยการสร้างไฟล์ HTML ในโฟลเดอร์ DocumentRoot ด้วยคำสั่ง

echo "<html><body><h1>DEMO</h1></body></html>" | sudo tee /var/www/DOMAIN_NAME.com/public/index.html

ทดสอบโดยเปิดเข้าหน้าเว็บที่ http://DOMAIN_NAME.com จะเห็นข้อความ DEMO เป็นอันเสร็จเรียบร้อย