- 1 1. บทนำ
- 2 2. การติดตั้งและตั้งค่าเบื้องต้น Ubuntu
- 3 3. การติดตั้งและตั้งค่า Apache เบื้องต้น
- 4 4. การตั้งค่า Virtual Host (โฮสต์หลายโดเมน)
- 5 5. การติดตั้ง SSL/TLS (เปิดใช้งาน HTTPS)
- 6 6. การเสริมความปลอดภัยให้เว็บเซิร์ฟเวอร์
- 7 7. การเพิ่มประสิทธิภาพ (Performance Optimization)
- 8 8. การแก้ปัญหา (Troubleshooting)
- 9 9. สรุป
1. บทนำ
Ubuntu Web Server คืออะไร?
เว็บเซิร์ฟเวอร์คือระบบที่ให้บริการเว็บไซต์บนอินเทอร์เน็ต ซอฟต์แวร์เว็บเซิร์ฟเวอร์ยอดนิยม ได้แก่ Apache, Nginx, LiteSpeed แต่บน Ubuntu นั้น Apache ได้รับความนิยมมากที่สุด
Ubuntu เป็นระบบปฏิบัติการที่ มีขนาดเล็ก เสถียร และเป็นโอเพ่นซอร์ส จึงเหมาะทั้งสำหรับผู้ใช้งานทั่วไปและองค์กร โดยเฉพาะการสร้าง LAMP Stack (Linux, Apache, MySQL/MariaDB, PHP) ทำได้ง่ายและเหมาะสำหรับการใช้งานเว็บแอปพลิเคชันและเว็บไซต์ทุกประเภท
ผู้อ่านที่เหมาะกับบทความนี้
บทความนี้เหมาะสำหรับ ผู้เริ่มต้นที่ต้องการสร้างเว็บเซิร์ฟเวอร์บน Ubuntu โดยจะอธิบายวิธีติดตั้ง Ubuntu, ติดตั้ง Apache, ตั้งค่า Virtual Host และ SSL Certificate รวมถึงเทคนิคการปรับแต่งและเสริมความปลอดภัยอย่างละเอียด
สิ่งที่จะได้เรียนรู้จากบทความนี้
- วิธีติดตั้งและตั้งค่า Apache เป็นเว็บเซิร์ฟเวอร์บน Ubuntu
- การตั้งค่า Virtual Host และการจัดการหลายเว็บไซต์ในเครื่องเดียว
- วิธีติดตั้งSSL ฟรีด้วย Let’s Encrypt
- การปรับปรุงความปลอดภัยและเพิ่มประสิทธิภาพของเว็บเซิร์ฟเวอร์
- เทคนิคการแก้ไขปัญหาที่พบบ่อย
2. การติดตั้งและตั้งค่าเบื้องต้น Ubuntu
สเปกขั้นต่ำที่แนะนำ
สำหรับใช้งาน Ubuntu เป็นเว็บเซิร์ฟเวอร์ แนะนำสเปกขั้นต่ำดังนี้
รายการ | ขั้นต่ำ | แนะนำ |
---|---|---|
OS | Ubuntu 22.04 LTS | Ubuntu 22.04 LTS |
CPU | 1GHz ขึ้นไป | 2GHz ขึ้นไป |
RAM | 512MB | 2GB ขึ้นไป |
Storage | 10GB ขึ้นไป | 20GB ขึ้นไป |
Network | เชื่อมต่ออินเทอร์เน็ต | แนะนำเป็นอินเทอร์เน็ตความเร็วสูง |
ดาวน์โหลดและติดตั้ง Ubuntu
Ubuntu สามารถดาวน์โหลดได้จาก https://ubuntu.com/download/server ให้ดาวน์โหลดไฟล์ ISO แล้วติดตั้งผ่าน VirtualBox หรือ VMware (เครื่องเสมือน) หรือจะติดตั้งลงใน เซิร์ฟเวอร์จริงหรือ VPS ก็ได้
ขั้นตอนการติดตั้ง:
- สร้างสื่อสำหรับติดตั้ง (Installation Media)
- ใช้ USB (แนะนำใช้เครื่องมืออย่าง Rufus)
- หรือ mount ไฟล์ ISO บน Virtual Machine
- ดำเนินการติดตั้งตาม Wizard
- เลือกภาษาเป็น “ไทย” หรือที่ต้องการ
- ตรวจสอบการเชื่อมต่อเครือข่าย
- ตั้งชื่อผู้ใช้และรหัสผ่าน
- เลือกติดตั้ง SSH Server (สามารถติดตั้งทีหลังได้)
- หลังติดตั้ง OS เสร็จ ให้รีสตาร์ท
- เข้าสู่ระบบและเริ่มตั้งค่าเบื้องต้น
การตั้งค่าเบื้องต้นหลังติดตั้ง Ubuntu
หลังจากติดตั้ง Ubuntu เสร็จควรตั้งค่าต่อไปนี้ทันที
- อัปเดตแพ็กเกจให้เป็นเวอร์ชันล่าสุด
sudo apt update && sudo apt upgrade -y
→ ติดตั้งแพตช์ความปลอดภัยและอัปเดตซอฟต์แวร์ล่าสุด
- ตั้งค่า Timezone
sudo timedatectl set-timezone Asia/Bangkok
→ ตั้งเวลาเป็นเวลาประเทศไทย (ICT)
- เปิดใช้งาน Firewall
sudo ufw enable
→ เปิด Firewall เพื่อป้องกันการเข้าถึงที่ไม่พึงประสงค์
- ตั้งค่า SSH (สำหรับรีโมต)
- ตรวจสอบว่า SSH ทำงานอยู่หรือไม่
sudo systemctl status ssh
- ถ้ายังไม่ทำงาน ให้เปิดใช้
sudo systemctl enable --now ssh
เมื่อเสร็จสิ้นขั้นตอนเหล่านี้ Ubuntu Server ของคุณก็พร้อมสำหรับการใช้งานเป็นเว็บเซิร์ฟเวอร์แล้ว
3. การติดตั้งและตั้งค่า Apache เบื้องต้น
Apache คืออะไร?
Apache (ชื่อเต็ม: Apache HTTP Server) คือซอฟต์แวร์เว็บเซิร์ฟเวอร์โอเพ่นซอร์สที่ได้รับความนิยมทั่วโลก มีจุดเด่นเรื่องความเสถียร ความยืดหยุ่น และความปลอดภัย มากกว่า 30% ของเซิร์ฟเวอร์ทั่วโลกใช้ Apache
จุดเด่นของ Apache:
- ฟรีและโอเพ่นซอร์ส
- โครงสร้างแบบโมดูล (Module) ติดตั้งส่วนขยายได้ง่าย
- รองรับ SSL/TLS ทำเว็บไซต์ HTTPS ได้
- สามารถสร้างVirtual Host สำหรับโฮสต์หลายเว็บในเครื่องเดียว
ติดตั้ง Apache บน Ubuntu
บน Ubuntu สามารถติดตั้ง Apache ได้ง่าย ๆ ด้วยคำสั่ง apt
ติดตั้ง Apache
sudo apt update
sudo apt install apache2 -y
ตรวจสอบการติดตั้ง
หลังติดตั้ง สามารถตรวจสอบเวอร์ชัน Apache ได้ดังนี้
apache2 -v
ตัวอย่างผลลัพธ์:
Server version: Apache/2.4.52 (Ubuntu)
Server built: 2023-07-01T12:34:56
ถ้าเห็นเวอร์ชันแสดง แสดงว่าติดตั้งเรียบร้อย
สั่งเริ่ม/หยุด/รีสตาร์ท Apache
ควบคุม Apache ด้วยคำสั่ง systemctl
สั่งเริ่ม Apache
sudo systemctl start apache2
Apache จะเริ่มทำงานและรับคำขอเว็บได้ทันที
ตั้งให้ Apache เริ่มอัตโนมัติ
sudo systemctl enable apache2
ตรวจสอบสถานะ Apache
sudo systemctl status apache2
ถ้า Apache ทำงานปกติจะแสดงข้อความ “active (running)”
สั่งรีสตาร์ทหรือหยุด Apache
กรณีตั้งค่าหรืออัปเดต Config ใช้คำสั่งนี้
sudo systemctl restart apache2
หยุดชั่วคราว
sudo systemctl stop apache2
ทดสอบการทำงานของ Apache
หลังติดตั้งให้ลองเข้าดูหน้าเว็บด้วย IP Address ของเซิร์ฟเวอร์
1. ตรวจสอบ IP Address ของเซิร์ฟเวอร์
hostname -I
หรือดู IP ภายนอก
curl ifconfig.me
2. ทดสอบในเว็บเบราว์เซอร์
เปิดเบราว์เซอร์แล้วพิมพ์
http://<IP ของเซิร์ฟเวอร์>/
หรือถ้าทดสอบในเครื่องเดียวกันใช้
http://localhost/
ควรจะเห็นหน้า “Apache2 Ubuntu Default Page” และข้อความ It works!
แสดงว่า Apache ทำงานปกติ
การตั้งค่า Firewall สำหรับ Apache
บน Ubuntu นิยมใช้ UFW (Uncomplicated Firewall) เพื่อจัดการ Firewall หากเพิ่งติดตั้ง Apache ใหม่ อาจต้องเปิดพอร์ต HTTP (80) และ HTTPS (443) เพื่อให้เข้าถึงเว็บได้
อนุญาตให้ Apache ผ่าน Firewall
sudo ufw allow 'Apache'
หรือถ้าต้องการเปิดทั้ง HTTP/HTTPS ใช้
sudo ufw allow 'Apache Full'
ตรวจสอบสถานะ Firewall
sudo ufw status
ตัวอย่างผลลัพธ์:
Status: active
To Action From
-- ------ ----
Apache ALLOW Anywhere
Apache (v6) ALLOW Anywhere (v6)
ถ้าแสดงเช่นนี้แปลว่า Apache เข้าถึงได้จากภายนอก
สรุปเบื้องต้น
คุณได้ ติดตั้ง Apache บน Ubuntu และตั้งค่าพื้นฐานครบแล้ว ต่อไปนี้จะกล่าวถึงวิธีจัดการ Virtual Host สำหรับหลายเว็บไซต์
4. การตั้งค่า Virtual Host (โฮสต์หลายโดเมน)
Virtual Host คืออะไร?
Virtual Host คือ การรันหลายโดเมนหรือเว็บไซต์บน Apache Server เดียวกัน เช่น สามารถให้ example.com
และ test.com
อยู่ในเซิร์ฟเวอร์เดียวได้
ชนิดของ Virtual Host มี 2 แบบ:
- Name-based Virtual Host – หลายโดเมนอยู่บน IP เดียว (เป็นแบบที่นิยมใช้ที่สุด)
- โฮสต์หลายเว็บด้วย IP เดียว
- เหมาะกับเว็บโฮสติ้งทั่วไป
- IP-based Virtual Host – ใช้หลาย IP address ในเซิร์ฟเวอร์เดียว
- แต่ละโดเมนใช้ IP แยกกัน
- เหมาะสำหรับองค์กรหรือบริการเฉพาะ
โดยทั่วไปใช้แบบ Name-based เป็นหลัก
ขั้นตอนการตั้งค่า Virtual Host
1. สร้างโฟลเดอร์สำหรับแต่ละเว็บไซต์
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html
2. เปลี่ยนเจ้าของโฟลเดอร์
sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chown -R www-data:www-data /var/www/test.com/public_html
3. สร้างไฟล์ index.html ทดสอบ
echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/public_html/index.html
echo "<h1>Welcome to test.com</h1>" | sudo tee /var/www/test.com/public_html/index.html
4. สร้างไฟล์ตั้งค่า Virtual Host
ไฟล์จะอยู่ที่ /etc/apache2/sites-available/
ตั้งค่า Virtual Host สำหรับ example.com
sudo nano /etc/apache2/sites-available/example.com.conf
ใส่เนื้อหานี้:
<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
<Directory /var/www/example.com/public_html>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>
ตั้งค่า Virtual Host สำหรับ test.com
sudo nano /etc/apache2/sites-available/test.com.conf
ใส่เนื้อหานี้:
<VirtualHost *:80>
ServerAdmin admin@test.com
ServerName test.com
ServerAlias www.test.com
DocumentRoot /var/www/test.com/public_html
<Directory /var/www/test.com/public_html>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/test.com_error.log
CustomLog ${APACHE_LOG_DIR}/test.com_access.log combined
</VirtualHost>
5. เปิดใช้งาน Virtual Host
sudo a2ensite example.com.conf
sudo a2ensite test.com.conf
ทดสอบ Syntax
sudo apachectl configtest
ถ้าขึ้นว่า Syntax OK
ให้รีสตาร์ท Apache
sudo systemctl restart apache2
6. ทดสอบในเครื่อง (แก้ไข hosts file)
sudo nano /etc/hosts
เพิ่มบรรทัด:
127.0.0.1 example.com
127.0.0.1 test.com
บันทึกไฟล์ จากนั้นลองเข้า http://example.com/
หรือ http://test.com/
ในเบราว์เซอร์ ถ้าเห็นข้อความ Welcome ตามที่ตั้งไว้ แปลว่า Virtual Host ใช้งานได้สำเร็จ
5. การติดตั้ง SSL/TLS (เปิดใช้งาน HTTPS)
SSL/TLS คืออะไร?
SSL (Secure Sockets Layer) และ TLS (Transport Layer Security) คือเทคโนโลยีสำหรับเข้ารหัสข้อมูลเพื่อความปลอดภัยในการรับส่งข้อมูลผ่านอินเทอร์เน็ต
ข้อดีของการติดตั้ง SSL/TLS
- ✅ ข้อมูลถูกเข้ารหัส ลดความเสี่ยงถูกดักฟังหรือเปลี่ยนแปลง
- ✅ ช่วยเพิ่มอันดับ SEO ของ Google (Google ให้ความสำคัญเว็บไซต์ HTTPS)
- ✅ เบราว์เซอร์ไม่แสดงข้อความเตือน “ไม่ปลอดภัย”
- ✅ ปกป้องธุรกรรมออนไลน์และข้อมูลเข้าสู่ระบบ
ปัจจุบันแนะนำให้ใช้ TLS (TLS 1.2/1.3) เท่านั้น (SSL 3.0 เลิกใช้งานแล้ว)
การติดตั้ง SSL ฟรีด้วย Let’s Encrypt
Let’s Encrypt เป็นหน่วยงานออกใบรับรอง SSL ฟรี สามารถติดตั้งบน Apache ได้ง่ายโดยใช้ certbot
ติดตั้ง Certbot
sudo apt update
sudo apt install certbot python3-certbot-apache -y
ตั้งค่า SSL อัตโนมัติบน Apache
ใช้คำสั่งนี้เพื่อขอใบรับรองและตั้งค่าให้ Apache อัตโนมัติ:
sudo certbot --apache -d example.com -d www.example.com
กระบวนการจะประกอบด้วย:
- ยืนยันความเป็นเจ้าของโดเมน
- ออกใบรับรอง SSL
- ตั้งค่า SSL บน Apache
- ตั้งค่า Redirect เป็น HTTPS
ตรวจสอบการใช้งาน SSL
เปิดเบราว์เซอร์แล้วเข้า https://example.com/
ถ้าเห็นไอคอนรูปกุญแจในช่อง URL แสดงว่า HTTPS ทำงานปกติ
ตั้งค่า SSL ด้วยตนเอง (Manual)
ถ้าไม่ใช้ certbot --apache
สามารถตั้งค่าด้วยมือได้ดังนี้:
1. เปิดใช้งานโมดูล SSL
sudo a2enmod ssl
sudo systemctl restart apache2
2. แก้ไขไฟล์ Virtual Host สำหรับ SSL
sudo nano /etc/apache2/sites-available/example.com-le-ssl.conf
เนื้อหาตัวอย่าง:
<VirtualHost *:443>
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
<Directory /var/www/example.com/public_html>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>
3. เปิดใช้และรีสตาร์ท Apache
sudo a2ensite example.com-le-ssl.conf
sudo systemctl restart apache2
การตั้งค่าอัปเดตใบรับรองอัตโนมัติ
ใบรับรอง Let’s Encrypt มีอายุ 90 วัน ควรตั้งค่าให้ต่ออายุอัตโนมัติ
1. ทดสอบการต่ออายุด้วย certbot
sudo certbot renew --dry-run
2. ตรวจสอบตารางเวลาอัปเดต
sudo systemctl list-timers | grep certbot
แก้ปัญหา SSL ที่พบบ่อย
1. Apache ไม่โหลดใบรับรอง
sudo systemctl restart apache2
sudo apachectl configtest
2. ใบรับรองหมดอายุ
sudo certbot renew --force-renewal
3. ไม่ผ่านการยืนยัน Let’s Encrypt
ตรวจสอบ Firewall ให้เปิดพอร์ต 80/443:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
สรุป
- พื้นฐาน SSL/TLS
- ตั้งค่า SSL ฟรีด้วย Let’s Encrypt และ Apache
- การอัปเดตใบรับรองอัตโนมัติ
- แก้ไขปัญหาทั่วไปเกี่ยวกับ SSL
6. การเสริมความปลอดภัยให้เว็บเซิร์ฟเวอร์
การตั้งค่า Firewall (UFW)
บน Ubuntu แนะนำให้ใช้ UFW (Uncomplicated Firewall) เพื่อบล็อกการเข้าถึงที่ไม่จำเป็น
ตรวจสอบสถานะปัจจุบันของ Firewall
sudo ufw status
อนุญาตเฉพาะพอร์ตที่จำเป็น
sudo ufw default deny incoming
sudo ufw default allow outgoing
- SSH (พอร์ต 22)
sudo ufw allow 22/tcp
- HTTP (พอร์ต 80)
sudo ufw allow 80/tcp
- HTTPS (พอร์ต 443)
sudo ufw allow 443/tcp
เปิดใช้งาน Firewall
sudo ufw enable
เสริมความปลอดภัย SSH
SSH เป็นเป้าหมายการโจมตีแบบ brute-force จึงควรปรับแต่งเพื่อความปลอดภัย
เปลี่ยนพอร์ต SSH และปิด root login
sudo nano /etc/ssh/sshd_config
แก้ไขค่า:
Port 2222 # เปลี่ยนจาก 22 เป็นพอร์ตอื่น
PermitRootLogin no # ไม่อนุญาต root login
PasswordAuthentication no # ปิด password login ใช้ SSH key แทน
บันทึกแล้วรีสตาร์ท SSH:
sudo systemctl restart ssh
ติดตั้ง Fail2Ban เพื่อป้องกัน SSH
sudo apt install fail2ban -y
ตั้งค่า:
sudo nano /etc/fail2ban/jail.local
เพิ่มบรรทัดนี้:
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 600
เปิดใช้งานและเริ่ม Fail2Ban:
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
เสริมความปลอดภัย Apache
ซ่อนข้อมูลเวอร์ชัน Apache
sudo nano /etc/apache2/conf-available/security.conf
ตั้งค่าต่อไปนี้:
ServerTokens Prod
ServerSignature Off
sudo systemctl restart apache2
ปิด Directory Listing
sudo nano /etc/apache2/apache2.conf
ค้นหาและลบ Indexes
ในบรรทัดนี้:
<Directory /var/www/>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
sudo systemctl restart apache2
ปิดใช้งาน Apache Modules ที่ไม่จำเป็น
sudo a2dismod autoindex
sudo a2dismod status
sudo systemctl restart apache2
เพิ่ม Security Headers
เปิดใช้ mod_headers
sudo a2enmod headers
sudo systemctl restart apache2
เพิ่ม Header ในไฟล์ Virtual Host
sudo nano /etc/apache2/sites-available/example.com.conf
เพิ่มใน <VirtualHost>
:
<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
sudo systemctl restart apache2
สรุป
- การตั้งค่า UFW (Firewall)
- ป้องกัน SSH (เปลี่ยนพอร์ต/ใช้ Fail2Ban)
- เสริมความปลอดภัย Apache (ซ่อนเวอร์ชัน, ปิด directory listing, เพิ่ม security header)
7. การเพิ่มประสิทธิภาพ (Performance Optimization)
ปรับจูน Apache ให้เร็วขึ้น
การตั้งค่าปรับจูนช่วยให้ Apache ทำงานได้เร็วขึ้นและรองรับโหลดสูง
เลือก MPM (Multi-Processing Module) ที่เหมาะสม
apachectl -M | grep mpm
ถ้าเป็น mpm_prefork_module
สามารถเปลี่ยนเป็น mpm_event
เพื่อประสิทธิภาพสูงขึ้นได้
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2
เปิดใช้งาน KeepAlive
sudo nano /etc/apache2/apache2.conf
เพิ่มหรือแก้ไขบรรทัด:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
sudo systemctl restart apache2
ตั้งค่า Cache
เปิดใช้ mod_expires
(Browser Cache)
sudo a2enmod expires
sudo systemctl restart apache2
เพิ่มในไฟล์ Virtual Host:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>
sudo systemctl restart apache2
ใช้ Server Cache (mod_cache
)
sudo a2enmod cache cache_disk
sudo systemctl restart apache2
เพิ่มใน Virtual Host:
<IfModule mod_cache.c>
CacheEnable disk /
CacheRoot /var/cache/apache2/mod_cache_disk
CacheDefaultExpire 86400
</IfModule>
sudo systemctl restart apache2
บีบอัดข้อมูลด้วย mod_deflate
sudo a2enmod deflate
sudo systemctl restart apache2
เพิ่มใน Virtual Host:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
sudo systemctl restart apache2
จำกัด Request ด้วย mod_ratelimit
sudo a2enmod ratelimit
sudo systemctl restart apache2
เพิ่มใน Virtual Host:
<Location />
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 200
</Location>
sudo systemctl restart apache2
สรุป
- จูน Apache (เลือก MPM/KeepAlive/Cache/บีบอัดข้อมูล/จำกัด request)
- ช่วยให้เว็บโหลดไว รองรับผู้ใช้จำนวนมากขึ้น
8. การแก้ปัญหา (Troubleshooting)
Apache ไม่สามารถเริ่มทำงานหรือหยุดเอง
ตรวจสอบสถานะ Apache
sudo systemctl status apache2
หากขึ้น Active: failed
แปลว่ามีข้อผิดพลาดเกิดขึ้น
ดูบันทึกข้อผิดพลาด (Error Log)
sudo journalctl -xe
sudo tail -f /var/log/apache2/error.log
ตรวจสอบพอร์ตที่ใช้งาน
sudo netstat -tulnp | grep ':80'
sudo lsof -i:80
ถ้ามีโปรแกรมอื่นใช้พอร์ต 80 ให้เปลี่ยนพอร์ตหรือหยุดโปรแกรมนั้น
ปัญหาเกี่ยวกับ SSL Certificate
ใบรับรอง SSL หมดอายุ
sudo certbot renew --force-renewal
ข้อผิดพลาด AH02572: Failed to configure at least one certificate
เปิดไฟล์ /etc/apache2/sites-available/example.com-le-ssl.conf
แล้วตรวจสอบ:
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
ถ้าถูกต้องแล้วให้รีสตาร์ท Apache
sudo systemctl restart apache2
เว็บไซต์แสดงข้อผิดพลาด 403, 404, 500
403 Forbidden
sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 755 /var/www/example.com/public_html
404 Not Found
ตรวจสอบว่า DocumentRoot
ถูกต้อง:
DocumentRoot /var/www/example.com/public_html
ถ้า mod_rewrite
ยังไม่ได้เปิด:
sudo a2enmod rewrite
sudo systemctl restart apache2
500 Internal Server Error
ดู error log:
sudo tail -f /var/log/apache2/error.log
หรือเปลี่ยนชื่อไฟล์ .htaccess
ชั่วคราวเพื่อทดสอบ
mv /var/www/example.com/public_html/.htaccess /var/www/example.com/public_html/.htaccess.bak
ปัญหาด้านประสิทธิภาพ (Performance)
เช็คโหลด Apache
top
htop
ถ้า htop
ไม่มี ให้ติดตั้งด้วย sudo apt install htop
ปิด Apache Modules ที่ไม่ใช้
sudo a2dismod status
sudo a2dismod autoindex
sudo systemctl restart apache2
ตั้งค่า Cache ให้เหมาะสม
sudo a2enmod cache cache_disk
ปัญหาเครือข่าย (Network)
เช็ค IP Address
ip a
curl ifconfig.me
เช็คว่าพอร์ตถูกเปิด
sudo netstat -tulnp | grep LISTEN
sudo lsof -i :80
ถ้าพอร์ต 80/443 ไม่ขึ้น ให้ตรวจสอบ Firewall ว่าอนุญาตแล้ว
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
สรุป
- วิธีแก้ปัญหา Apache ไม่เริ่มทำงาน
- วิธีแก้ปัญหา SSL
- การแก้ไข error 403 / 404 / 500
- ปรับจูนและตรวจสอบประสิทธิภาพ
- ตรวจสอบการเชื่อมต่อ Network
9. สรุป
สิ่งที่ได้เรียนรู้จากบทความนี้
หัวข้อ | เนื้อหา |
---|---|
1. บทนำ | แนวคิดพื้นฐานของ Ubuntu Web Server และเป้าหมายของบทความ |
2. การติดตั้งและตั้งค่า Ubuntu | วิธีติดตั้งอัปเดต และตั้งค่า Firewall |
3. การติดตั้ง Apache | วิธีติดตั้งและตรวจสอบการทำงานของ Apache |
4. Virtual Host | วิธีโฮสต์หลายเว็บไซต์ในเครื่องเดียว |
5. SSL/TLS | การเปิด HTTPS ด้วย Let’s Encrypt |
6. ความปลอดภัย | การตั้งค่า Firewall, SSH, Apache ให้ปลอดภัย |
7. ปรับประสิทธิภาพ | การใช้ Cache, การบีบอัดข้อมูล และจูน Apache |
8. การแก้ปัญหา | วิธีรับมือกับข้อผิดพลาดทั่วไป |
ขั้นตอนต่อไป
เมื่อเซิร์ฟเวอร์ Ubuntu Web Server พร้อมใช้งานแล้ว คุณสามารถเรียนรู้หัวข้อขั้นสูงต่อไปนี้เพื่อสร้างระบบที่สมบูรณ์ยิ่งขึ้น เช่น
- ✅ ติดตั้ง WordPress หรือ PHP Application
- ✅ ติดตั้งฐานข้อมูล MySQL / MariaDB
- ✅ ทำ Reverse Proxy (Nginx + Apache)
- ✅ สร้างระบบออโต้สเกลบน AWS, GCP, Azure
- ✅ ตั้งค่า Log Monitoring (fail2ban, logwatch ฯลฯ)
คำถามที่พบบ่อย (FAQ)
Q1: ควรเลือก Nginx หรือ Apache บน Ubuntu?
A1: ถ้าเน้น Static Content ให้ใช้ Nginx ถ้า Dynamic Content (เช่น PHP) ให้ใช้ Apache หรือใช้ร่วมกันก็ได้ (Nginx reverse proxy หน้า Apache)
Q2: SSL Certificate อัปเดตอัตโนมัติได้หรือไม่?
A2: หากติดตั้ง Certbot สามารถตั้ง cron job ให้ต่ออายุอัตโนมัติได้ ตรวจสอบด้วย sudo certbot renew --dry-run
Q3: จะเสริมความปลอดภัย Web Server ได้อย่างไร?
A3: ใช้ Fail2Ban ป้องกัน brute-force, ซ่อนเวอร์ชัน Apache, ปิดโมดูลที่ไม่จำเป็น
Q4: จะเพิ่มประสิทธิภาพ Apache อย่างไร?
A4: ปรับ MPM, ใช้ cache, เปิดการบีบอัดข้อมูล (mod_deflate)
Q5: เว็บไซต์ขึ้น 403 Forbidden เพราะอะไร?
A5: ตรวจสอบ owner เป็น www-data
และสิทธิ์ 755 ด้วย chmod -R 755
สรุปสุดท้าย
การติดตั้ง Ubuntu Web Server ครอบคลุมตั้งแต่พื้นฐานจนถึงเทคนิคขั้นสูง เมื่อเข้าใจหลักการเหล่านี้แล้ว คุณจะสามารถสร้างระบบที่ปลอดภัยและมีประสิทธิภาพได้
🚀 ขอให้บทความนี้ช่วยให้คุณสร้างและดูแลเว็บเซิร์ฟเวอร์ได้อย่างมืออาชีพ! 🚀