จากโพส วิธีลง 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 เป็นอันเสร็จเรียบร้อย