Apache Virtual Hosts on Ubuntu 20.04
Apache Virtual Hosts on Ubuntu 20.04 เป็นบทความที่เขียนขึ้นมาเพื่ออ้างอิงในการจัดทำ virtual hosts บน Ubuntu เหตุที่ต้องจัดเพื่อลดการเช่าพื้นที่และต้องการทดสอบการทำงาน
ส่วนข้อมูลในการอ้างอิง ได้ทดลองโดยยึดแนวทางในการจัดทำผ่านทาง URL นี้
ขออธิบายในภาพรวมก่อน
Hosting ในการจัดเก็บข้อมูลเว็บไซต์ ได้ใช้วิธีการโดยใช้บริการจาก Digitalocean ลักษณะการทำงานโดยปกติหากเราเช่าพื้นที่ทั่วไป เราแค่เอาข้อมูลเว็บไซต์ขึ้นไปเก็บไว้ยังพื้นที่ที่ทางผู้ให้บริการเตรียมไว้ให้
แต่ในกรณีของ DitgitalOcean มันจะแตกต่างกันตรงที่ เมื่อเราซ์้อบริการแล้ว ทางผู้ให้บริการจะให้เราสร้าง Droplet เมื่อเราสร้างเสร็จ ทางผู้ให้บริการจะสร้าง Server จำลองให้เราพร้อมกับติดตั้ง Linux ให้เรียบร้อย ตามที่เราเลือกในขณะสร้างว่าเราจะใช้ Linus ตัวไหนเป็น OS หรือหากเราไม่ค่อยชำนาญเราอาจจะใช้บริการติดตั้งผ่านทางที่ผู้ให้บริการจัดเตรียมไว้ให้ก็ได้
ในส่วนตัวใช้วิธีการตอนสร้าง Droplete แค่เลือกใช้ Ubuntu อย่างเดียว เหตุผลที่เลือกเพราะ พวก php จะได้เวอร์ชั่นใหม่ว่า Debian แต่การติดตั้งมันคล้ายๆๆกัน
หลังจากนั้น ดำเนินการติดตั้ง lamp แล้วติดตั้ง wordpress แล้วไปจดโดเมน มาผูกกับ droplet ที่เราสร้าง เมื่อดำเนินการเสร็จเรียบร้อย จึงเป็นที่มาของ เว็บไซต์ knupan.com
ต่อมาเนื่องจากเว็บไซต์ดังกล่าว มีสองส่วนรวมกัน นั้นคือ Blog กับ knowledge ปัญหามันตามมา คือ knowledge สร้างจาก pluging และเป็นของฟรี แม้ว่ามันจะใช้งานได้ดี แต่ว่ามันจะมีปัญหาทางด้านการสำรองข้อมูลหรือย้ายข้อมูล
เลยตัดสินใจแยก เป็น 2 เว็บไซต์ ครั้งแรกจะแยก Droplete แต่หากแยกรายเดือนน่าจะเพิ่มขึ้นอีก เลยลองใช้พื้นที่เดิม แต่จดโดเมนใหม่ แล้วทำ virtual host เพื่อทดสอบดู โดยการกำหนดให้
- เว็บไซต์ แรกเป็น Blog อย่างเดียว นั้นคือเว็บ knupan.com
- อีกเว็บไซต์ซื้อ knowledge Theme มาสร้างสำหรับเป็น Wiki หรือ knowledge
สรุปไฟล์คอนฟิกหรือที่เก็บไฟล์
พื้นที่หรือห้องสำหรับเก็บไฟล์ที่เราสร้างเป็นเว็บไซต์ knupan.com
/var/www/knupan/
root@knupan:/var/www/knupan# ls
index.php wp-blog-header.php wp-includes wp-signup.php
license.txt wp-comments-post.php wp-links-opml.php wp-trackback.php
public_html wp-config-sample.php wp-load.php xmlrpc.php
readme.html wp-config.php wp-login.php
wp-activate.php wp-content wp-mail.php
wp-admin wp-cron.php wp-settings.php
ไฟล์คอนฟิกสำหรับปรับแต่งค่าโดยการกำหนดว่า ข้อมูลที่เก็บเว็บไซต์เราอยู่ในไดว์เร็กเตอรีไหน จากตัวอย่างไฟล์คอนฟิกจะอยู่ใน /etc/apache2/sites-available/knupan.conf
การกำหนดในไฟล์ knupan.conf
<VirtualHost *:80>
ServerName knupan.com
ServerAlias www.knupan.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/knupan/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.knupan.com [OR]
RewriteCond %{SERVER_NAME} =knupan.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
สร้างพื้นที่สำหรับจัดเก็บเว็บไซต์ nst-green.name
พื้นที่หรือห้องสำหรับเก็บไฟล์ที่เราสร้างเว็บไซต์ จริงๆๆ แล้วน่าจะเก็บไว้ใน /var/www/nst-green/ ได้ แต่ในตอนทดสอบครั้งแรก เรียกหน้าแล้วไม่ทำงานเลยเอามาวางไว้ใน /var/www/nst-green/public_html แต่หลังจากเอามาวางไว้ในไดว์เร็กเตอรีดังกล่าวแล้ว ยังทดสอบไม่ผ่าน เหตุผลเพราะน่าจะเกิดจากไม่ได้ใช้คำสั่ง
sudo certbot certonly --standalone -d nst-green.name
sudo certbot --apache
แต่หลังจากใช้คำสั่งที่ผ่านมาแล้ว สามารถเรียกหน้าเว็บไซต์ได้ เลยไม่อยากแก้ กับไม่ย้ายข้อมูลเลยยังคงไว้ในไดว์เร็กเตอรีเดิม
/var/www/nst-green/public_html
root@knupan:/var/www/nst-green/public_html# ls
index.php wp-blog-header.php wp-includes wp-signup.php
knupan wp-comments-post.php wp-links-opml.php wp-trackback.php
license.txt wp-config-sample.php wp-load.php xmlrpc.php
readme.html wp-config.php wp-login.php
wp-activate.php wp-content wp-mail.php
wp-admin wp-cron.php wp-settings.php
และได้สร้างไฟว์คอนฟิกขึ้นมาเพื่อแจ้งและกำหนดค่าว่า ข้อมูลที่เก็บเว็บไซต์ไว้อยู่ตรงไหน
vi /etc/apache2/sites-available/nst-green.conf
<VirtualHost *:80>
ServerName nst-green.name
ServerAlias www.nst-green.name
ServerAdmin webmaster@localhost
DocumentRoot /var/www/nst-green/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.nst-green.name [OR]
RewriteCond %{SERVER_NAME} =nst-green.name
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
เปิดค่า nst-green.conf
sudo a2ensite nst-green.conf
ปิดค่า 000-default.conf ซึ่งเป็นค่าเริ่มตั้นหลังจากเราติดตั้ง apache
sudo a2dissite 000-default.conf
ทดสอบว่าที่เราปรับแต่งในไฟล์ nst-green.conf ผิดพลาดตรงไหนบ้างอย่างไร
sudo apache2ctl configtest
สั่ง รีสตาร์ท Apache ในการทำงานในกรณีที่เรามีการปรับแต่งอะไรก็ตาม หลังจากเราปรับแต่งเสร็จ อย่าลืมใช้คำสั่ง รีสตาร์ท Apache ทุกครั้ง
sudo systemctl restart apache2
ขั้นตอนเอาข้อมูลไปเก็บไว้ในที่เรากำหนด โดยใช้คำสั่งตามข้างล่าง หรือไม่เราอาจจะส่งผ่าน FTP ก็ได้
sudo cp -a /tmp/wordpress/. /var/www/nst-green/public_html/
หลังจากนั้นใช้คำสั่งเหล่านี้ประกอบทุกครั้ง
sudo chown -R www-data:www-data /var/www/nst-green/public_html/
sudo find /var/www/nst-green/public_html/ -type d -exec chmod 750 {} \;
sudo find /var/www/nst-green/public_html/ -type f -exec chmod 640 {} \;
systemctl restart apache2
สรุป
ในการกำหนดค่าเพื่อทำ Apache Virtual Hosts on Ubuntu 20.0 มีหลักๆๆ ดังนี้
- กำหนดที่ตั้งหรือที่เก็บของข้อมูลเว็บไซต์ของเรา ส่วนมากจะอยู่ใน /var/www/ ให้เราแยกออกเป็น 2 ไดว์เร็กเตอรี่
- เข้าไปแก้ค่าโดยการกำหนดไฟล์คอนฟิกขึ้นมาใหม่ แล้วกำหนดค่าชี้ให้เห็นเส้นทางว่า เราเก็บไฟล์ข้อมูลเว็บของเราไว้ตรงไหน โดยสร้างไว้ใน /etc/apache2/sites-available/ หากมี 2 เว็บไซต์ ก็ให้กำหนดไว้ 2 ไฟล์ หากมี 3 เว็บไซต์ ก็ให้กำหนดไว้ 3 ไฟล์
- หลังจากนั้นเปิดค่าแล้วเอาข้อมูลไปวางไว้ตามที่เราต้องการ