- 1 1. บทนำ
- 2 2. การติดตั้ง Ubuntu และการตั้งค่าเริ่มต้น
- 3 3. การติดตั้งและกำหนดค่า Apache
- 4 4. ตั้งค่า Virtual Hosts (จัดการหลายเว็บไซต์)
- 5 5. แนะนำ SSL/TLS (เปิดใช้งาน HTTPS)
- 6 6. การเพิ่มความปลอดภัยให้กับเว็บเซิร์ฟเวอร์
- 7 7. การปรับประสิทธิภาพ
- 8 8. การแก้ไขปัญหา
- 9 9. สรุป
1. บทนำ
Ubuntu Web Server คืออะไร?
เว็บเซิร์ฟเวอร์คือระบบที่ให้บริการเว็บไซต์ผ่านอินเทอร์เน็ต ซอฟต์แวร์เว็บเซิร์ฟเวอร์ที่เป็นที่นิยมรวมถึง Apache, Nginx, และ LiteSpeed แต่ตัวเลือกที่ใช้กันมากที่สุดบน Ubuntu คือ Apache.
Ubuntu มีคุณสมบัติ เบา, เสถียร, และเป็นซอร์สเปิด ทำให้เป็นที่นิยมในหมู่บุคคลและบริษัทต่าง ๆ โดยเฉพาะอย่างยิ่งเหมาะสำหรับการทำงานใน สภาพแวดล้อม LAMP (Linux, Apache, MySQL/MariaDB, PHP) ซึ่งเป็นพื้นฐานของเว็บไซต์และแอปพลิเคชันหลายแห่ง.
บทความนี้เหมาะกับใคร
คู่มือนี้ออกแบบมาสำหรับ ผู้เริ่มต้นที่สร้างเว็บเซิร์ฟเวอร์เป็นครั้งแรก โดยอธิบายวิธีการเปิดเว็บเซิร์ฟเวอร์บน Ubuntu, การติดตั้ง Apache, การกำหนดค่า virtual hosts และใบรับรอง SSL, รวมถึงการทำการปรับประสิทธิภาพและเพิ่มความปลอดภัย.
สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้างเว็บเซิร์ฟเวอร์บน Ubuntu (การติดตั้งและกำหนดค่า Apache)
- วิธีตั้งค่า virtual hosts และจัดการหลายเว็บไซต์
- วิธีติดตั้ง SSL ฟรีด้วย Let’s Encrypt
- วิธีใช้ การเสริมความปลอดภัยและการปรับประสิทธิภาพ
- ขั้นตอนการแก้ไขปัญหาทั่วไปและวิธีแก้
2. การติดตั้ง Ubuntu และการตั้งค่าเริ่มต้น
ข้อกำหนดระบบขั้นต่ำ
เพื่อใช้ Ubuntu เป็นเว็บเซิร์ฟเวอร์ แนะนำให้มี สเปคขั้นต่ำ ดังต่อไปนี้:
| Item | Minimum Requirements | Recommended Requirements |
|---|---|---|
| OS | Ubuntu 22.04 LTS | Ubuntu 22.04 LTS |
| CPU | 1GHz or higher | 2GHz or higher |
| Memory | 512MB | 2GB or higher |
| Storage | 10GB or more | 20GB or more |
| Network | Internet connection | High-speed connection recommended |
การดาวน์โหลดและติดตั้ง Ubuntu
คุณสามารถดาวน์โหลด Ubuntu ได้จากเว็บไซต์อย่างเป็นทางการ (https://ubuntu.com/download/server) ดาวน์โหลดไฟล์ ISO แล้วติดตั้งใน เครื่องเสมือนเช่น VirtualBox หรือ VMware หรือบน เซิร์ฟเวอร์หรือ VPS เฉพาะ.
ขั้นตอนการติดตั้ง:
- สร้างสื่อการติดตั้ง
- USB drive (โดยใช้เครื่องมือเช่น Rufus)
- เมานท์ไฟล์ ISO ในเครื่องเสมือน
- ทำตามวิซาร์ดการติดตั้ง
- เลือกภาษาที่ต้องการ
- ตรวจสอบการเชื่อมต่อเครือข่าย
- ตั้งค่าชื่อผู้ใช้และรหัสผ่าน
- ติดตั้ง SSH server (ตัวเลือก—คุณสามารถติดตั้งภายหลังได้)
- รีบูตหลังการติดตั้งเสร็จสิ้น
- เข้าสู่ระบบและเริ่มการตั้งค่าเริ่มต้น
การตั้งค่าเริ่มต้นพื้นฐาน
หลังการติดตั้ง ให้ทำขั้นตอนการตั้งค่าเริ่มต้นต่อไปนี้.
- Update all packages
sudo apt update && sudo apt upgrade -y
→ ใช้แพตช์ความปลอดภัยและอัปเดตแพคเกจซอฟต์แวร์.
- Set the timezone
sudo timedatectl set-timezone Asia/Tokyo
→ ตั้งเวลาในระบบเป็นเวลามาตรฐานญี่ปุ่น (JST).
- Enable the firewall
sudo ufw enable
→ เปิดใช้งานไฟร์วอลล์เพื่อปกป้องระบบจากการเข้าถึงโดยไม่ได้รับอนุญาต.
- Configure SSH (for remote management)
- ตรวจสอบว่า SSH เปิดอยู่หรือไม่
sudo systemctl status ssh - หากปิดอยู่ ให้เปิดใช้งาน
sudo systemctl enable --now ssh
หลังจากทำขั้นตอนเหล่านี้เสร็จแล้ว เซิร์ฟเวอร์ Ubuntu ของคุณพร้อมที่จะตั้งค่าเป็นเว็บเซิร์ฟเวอร์ที่ทำงานเต็มรูปแบบ.
3. การติดตั้งและกำหนดค่า Apache
Apache คืออะไร?
Apache (Apache HTTP Server) เป็นเว็บเซิร์ฟเวอร์แบบเปิดที่มีชื่อเสียงด้านความเสถียร, ความสามารถในการขยาย, และคุณลักษณะความปลอดภัยที่แข็งแกร่ง ประมาณ 30% ของเซิร์ฟเวอร์ทั่วโลกใช้ Apache.
คุณลักษณะสำคัญ:
- ฟรีและเป็นซอร์สเปิด
- สถาปัตยกรรมโมดูลาร์ เพื่อการขยายที่ง่าย
- รองรับ SSL/TLS สำหรับการกำหนดค่า HTTPS
- Virtual hosts สำหรับโฮสต์หลายเว็บไซต์
การติดตั้ง Apache
บน Ubuntu สามารถติดตั้ง Apache ได้อย่างง่ายดายโดยใช้ตัวจัดการแพคเกจ apt.
ติดตั้ง Apache
รันคำสั่งต่อไปนี้เพื่อทำการติดตั้ง 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
การจัดการ Apache ทำโดยใช้คำสั่ง systemctl.
เริ่ม Apache
sudo systemctl start apache2
Apache จะเริ่มรับคำขอเว็บจากนี้
เปิดการเริ่มต้นอัตโนมัติ
sudo systemctl enable apache2
ตรวจสอบสถานะ Apache
ใช้คำสั่งนี้เพื่อตรวจสอบว่า Apache กำลังทำงานอยู่หรือไม่:
sudo systemctl status apache2
ตัวอย่างผลลัพธ์:
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since ...
เริ่มต้นใหม่หรือหยุด Apache
เริ่มต้น Apache ใหม่หลังจากแก้ไขการตั้งค่าคอนฟิกเกอร์:
sudo systemctl restart apache2
เพื่อหยุด Apache ชั่วคราว:
sudo systemctl stop apache2
ยืนยันการทำงานของ Apache
เพื่อยืนยันว่า Apache กำลังทำงานอย่างถูกต้อง เข้าถึงที่อยู่ IP ของเซิร์ฟเวอร์。
1. ตรวจสอบที่อยู่ IP ของเซิร์ฟเวอร์ของคุณ
hostname -I
หรือตรวจสอบ IP ภายนอก:
curl ifconfig.me
2. ยืนยันในเว็บเบราว์เซอร์
ป้อนสิ่งต่อไปนี้ในเบราว์เซอร์ของคุณ:
http://<your-server-ip>/
สำหรับการตั้งค่าท้องถิ่น:
http://localhost/
คุณควรเห็นหน้าหลักเริ่มต้นของ Apache (/var/www/html/index.html).
ตัวอย่างหน้าหลักเริ่มต้น:
Apache2 Ubuntu Default Page
It works!
หากข้อความนี้ปรากฏ Apache กำลังทำงานอย่างถูกต้อง。
ตั้งค่าฟายร์วอลล์
Ubuntu ใช้ UFW (Uncomplicated Firewall) เพื่อจัดการกฎฟายร์วอลล์.
หลังจากติดตั้ง Apache การเข้าถึงภายนอกจาก HTTP (พอร์ต 80) และ HTTPS (พอร์ต 443) อาจยังถูกบล็อกอยู่。
อนุญาตให้ Apache ผ่านฟายร์วอลล์
sudo ufw allow 'Apache'
เพื่ออนุญาต HTTPS ด้วย:
sudo ufw allow 'Apache Full'
ตรวจสอบสถานะฟายร์วอลล์
sudo ufw status
ตัวอย่างผลลัพธ์:
Status: active
To Action From
-- ------ ----
Apache ALLOW Anywhere
Apache (v6) ALLOW Anywhere (v6)
หากสิ่งนี้ปรากฏ การรับส่งข้อมูล Apache ได้รับอนุญาตผ่านฟายร์วอลล์。
สรุป
จนถึงตอนนี้ คุณได้ ติดตั้ง Apache บน Ubuntu และเสร็จสิ้นขั้นตอนการตั้งค่าที่จำเป็น.
ประเด็นสำคัญที่ครอบคลุม:
- วิธีติดตั้ง Apache
- วิธีเริ่มต้นและเปิดใช้งาน Apache
- วิธีตรวจสอบการทำงานของ Apache ในเบราว์เซอร์
- วิธีตั้งค่ากฎฟายร์วอลล์ UFW
- ภาพรวมของไฟล์คอนฟิกเกอร์พื้นฐานของ Apache
4. ตั้งค่า Virtual Hosts (จัดการหลายเว็บไซต์)
Virtual Hosts คืออะไร?
Virtual hosts ช่วยให้คุณ โฮสต์โดเมนหลายโดเมน (หรือซับโดเมน) บนเซิร์ฟเวอร์ Apache เดียว.
ตัวอย่างเช่น เซิร์ฟเวอร์เดียวสามารถโฮสต์ทั้ง example.com และ test.com。
มีสองประเภทของ virtual hosts:
- Name-based Virtual Hosts
- เว็บไซต์หลายแห่งแบ่งปัน ที่อยู่ IP เดียวกัน
- วิธีที่พบบ่อยที่สุด
- IP-based Virtual Hosts
- แต่ละเว็บไซต์ใช้ ที่อยู่ IP ที่แตกต่างกัน
- ต้องการอินเทอร์เฟซเครือข่ายหลายตัวบนเซิร์ฟเวอร์เดียว
ในกรณีส่วนใหญ่ name-based virtual hosts จะถูกใช้。
ขั้นตอนในการตั้งค่า Virtual Hosts
1. สร้างไดเรกทอรีที่จำเป็น
สร้าง ไดเรกทอรีแยกต่างหาก สำหรับแต่ละเว็บไซต์:
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html
2. เปลี่ยนเจ้าของไดเรกทอรี
ให้แน่ใจว่า Apache สามารถอ่านไฟล์ได้โดยตั้งเจ้าของเป็น www-data:
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. สร้างไฟล์ HTML พลาสโฮลเดอร์
สร้างไฟล์ 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
ไฟล์คอนฟิกเกอร์ 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 Hosts
หลังจากสร้างไฟล์การกำหนดค่าแล้ว ให้เปิดใช้งาน virtual hosts ด้วยคำสั่ง a2ensite:
sudo a2ensite example.com.conf
sudo a2ensite test.com.conf
ทดสอบการกำหนดค่าของ Apache
ตรวจสอบข้อผิดพลาดของไวยากรณ์:
sudo apachectl configtest
ตัวอย่างผลลัพธ์:
Syntax OK
หากไม่มีข้อผิดพลาด ให้รีสตาร์ท Apache:
sudo systemctl restart apache2
6. ตรวจสอบในเครื่อง (แก้ไขไฟล์ hosts)
เพื่อทดสอบ virtual hosts ในเครื่อง ให้แก้ไขไฟล์ hosts ของ PC ของคุณ.
sudo nano /etc/hosts
เพิ่มบรรทัดต่อไปนี้:
127.0.0.1 example.com
127.0.0.1 test.com
บันทึกไฟล์ แล้วเปิดเบราว์เซอร์และเยี่ยมชม:
http://example.com/
คุณควรเห็น “Welcome to example.com”.
เช่นเดียวกัน หากเยี่ยมชม:
http://test.com/
ควรแสดง “Welcome to test.com”.
7. การแก้ไขปัญหา Virtual Hosts
หาก virtual hosts ไม่ทำงานอย่างถูกต้อง ให้ตรวจสอบต่อไปนี้:
1. ตรวจสอบบันทึกข้อผิดพลาดของ Apache
sudo tail -f /var/log/apache2/error.log
2. ยืนยันว่าไฟล์การกำหนดค่าได้ถูกเปิดใช้งาน
ls /etc/apache2/sites-enabled/
หากไฟล์ .conf ที่ถูกต้องแสดงอยู่ แสดงว่า virtual hosts กำลังทำงานอยู่.
3. ตรวจสอบการตั้งค่าพอร์ตของ Apache
ตรวจสอบว่าพอร์ต 80 (HTTP) ได้รับการกำหนดค่า:
sudo nano /etc/apache2/ports.conf
ตรวจสอบให้แน่ใจว่ามีบรรทัดต่อไปนี้อยู่:
Listen 80
สรุป
ส่วนนี้อธิบาย วิธีการกำหนดค่า virtual hosts ใน Apache บน Ubuntu.
ข้อสรุปสำคัญ:
- แนวคิดและวัตถุประสงค์ของ virtual hosts
- การสร้างไดเรกทอรีสำหรับแต่ละเว็บไซต์
- การสร้างและเปิดใช้งานไฟล์การกำหนดค่า virtual host
- วิธีการทดสอบในเครื่องโดยใช้ไฟล์ hosts
- การแก้ไขปัญหาที่พบบ่อย
5. แนะนำ SSL/TLS (เปิดใช้งาน HTTPS)
SSL/TLS คืออะไร?
SSL (Secure Sockets Layer) และ TLS (Transport Layer Security) เป็นเทคโนโลยีการเข้ารหัสที่ใช้เพื่อให้การสื่อสารบนอินเทอร์เน็ตเป็นปลอดภัย.
ประโยชน์ของการเปิดใช้งาน SSL/TLS
✅ เข้ารหัสการสื่อสาร (ลดความเสี่ยงของข้อมูลที่ถูกดักฟังหรือแก้ไข)
✅ ปรับปรุงอันดับ SEO ของ Google (เว็บไซต์ HTTPS จะได้รับการจัดลำดับความสำคัญสูงกว่า)
✅ ป้องกันการเตือนความปลอดภัยของเบราว์เซอร์ (เว็บไซต์ HTTP จะแสดงข้อความ “Not Secure”)
✅ ปกป้องข้อมูลการเข้าสู่ระบบและการทำธุรกรรมออนไลน์
ปัจจุบันแนะนำให้ใช้ TLS (TLS 1.2 / 1.3) และเวอร์ชัน SSL เก่ากว่า (SSL 3.0 และก่อนหน้า) ถูกยกเลิกการใช้งานแล้ว.
การรับใบรับรอง SSL ฟรีด้วย Let’s Encrypt
Let’s Encrypt เป็น Certificate Authority (CA) ที่ให้บริการใบรับรอง SSL ฟรี
โดยใช้ certbot คุณสามารถออกใบรับรองได้อย่างง่ายดายและกำหนดค่าให้กับ Apache.
ติดตั้ง Let’s Encrypt Client (Certbot)
ติดตั้ง certbot ซึ่งเป็นไคลเอนต์อย่างเป็นทางการของ Let’s Encrypt:
sudo apt update
sudo apt install certbot python3-certbot-apache -y
ทำการกำหนดค่า SSL ของ Apache อัตโนมัติ
คุณสามารถกำหนดค่า Apache อัตโนมัติด้วยคำสั่งต่อไปนี้:
sudo certbot --apache -d example.com -d www.example.com
คำสั่งนี้ทำการ:
- การตรวจสอบโดเมน (การท้าทาย HTTP-01)
- การออกใบรับรอง SSL
- การกำหนดค่า SSL ของ Apache อัตโนมัติ
- การเปลี่ยนเส้นทางจาก HTTP ไปยัง HTTPS (ไม่บังคับ)
ตรวจสอบการทำงานของ SSL
เข้าถึง URL ด้านล่างเพื่อยืนยันว่า HTTPS ถูกเปิดใช้งานแล้ว:
https://example.com/
หากเบราว์เซอร์ของคุณแสดง ไอคอนแม่กุญแจ, SSL ได้รับการใช้งานอย่างสำเร็จ.
การกำหนดค่า SSL สำหรับ Apache ด้วยตนเอง
หากคุณไม่ต้องการใช้ certbot --apache คุณสามารถกำหนดค่า SSL ด้วยตนเองได้
1. เปิดโมดูล SSL ของ Apache
sudo a2enmod ssl
sudo systemctl restart apache2
2. กำหนดค่า Virtual Host ของ SSL
แก้ไขไฟล์กำหนดค่า SSL /etc/apache2/sites-available/example.com-le-ssl.conf:
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. เปิดใช้งานการกำหนดค่า SSL และรีสตาร์ท Apache
sudo a2ensite example.com-le-ssl.conf
sudo systemctl restart apache2
การต่ออายุอัตโนมัติของใบรับรอง SSL
ใบรับรอง Let’s Encrypt มีอายุการใช้งาน 90 วัน. เพื่อหลีกเลี่ยงการต่ออายุด้วยตนเอง ให้กำหนดการอัปเดตอัตโนมัติ
1. ทดสอบการต่ออายุอัตโนมัติของ Certbot
sudo certbot renew --dry-run
2. ตรวจสอบตารางการต่ออายุ
ตารางการต่ออายุอัตโนมัติของ Certbot ถูกเก็บไว้ที่ /etc/cron.d/certbot.
sudo systemctl list-timers | grep certbot
การแก้ไขปัญหา SSL
1. ใบรับรอง SSL ไม่ได้ถูกนำไปใช้
วิธีแก้: รีสตาร์ท Apache และตรวจสอบการกำหนดค่า
sudo systemctl restart apache2
sudo apachectl configtest
2. ใบรับรองหมดอายุแล้ว
sudo certbot renew --force-renewal
3. ข้อผิดพลาดการตรวจสอบของ Let’s Encrypt
วิธีแก้: ตรวจสอบกฎไฟร์วอลล์
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
สรุป
ส่วนนี้อธิบายวิธี ติดตั้งและกำหนดค่า SSL ฟรีโดยใช้ Let’s Encrypt.
ประเด็นสำคัญ:
- พื้นฐานของ SSL/TLS
- การกำหนดค่า Apache ด้วย Let’s Encrypt
- การกำหนดค่า SSL ด้วยตนเอง
- การต่ออายุใบรับรองอัตโนมัติ
- การแก้ไขปัญหา SSL
6. การเพิ่มความปลอดภัยให้กับเว็บเซิร์ฟเวอร์
การกำหนดค่าไฟร์วอลล์ (UFW)
Ubuntu ใช้ UFW (Uncomplicated 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
เปิดใช้งานไฟร์วอลล์
sudo ufw enable
การเสริมความปลอดภัยของ SSH
SSH เป็นเป้าหมายทั่วไปของการโจมตีแบบ brute-force หากปล่อยให้ใช้การตั้งค่าเริ่มต้น. เสริมความปลอดภัยโดยการกำหนดค่าที่เหมาะสม
เปลี่ยนพอร์ตของ SSH
sudo nano /etc/ssh/sshd_config
แก้ไขบรรทัดเหล่านี้:
Port 2222 # Change from 22 to any unused port
PermitRootLogin no # Disable root login
PasswordAuthentication no # Disable password login (use SSH keys only)
รีสตาร์ท SSH:
sudo systemctl restart ssh
ติดตั้ง Fail2Ban
Fail2Ban ปกป้องเซิร์ฟเวอร์ของคุณโดยการแบนที่อยู่ IP ชั่วคราวที่พยายามล็อกอิน 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
ปิดการแสดงรายการไดเรกทอรี
sudo nano /etc/apache2/apache2.conf
ค้นหาบล็อกไดเรกทอรีและอัปเดต:
<Directory /var/www/>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
รีสตาร์ท Apache:
sudo systemctl restart apache2
ปิดโมดูล Apache ที่ไม่จำเป็น
sudo a2dismod autoindex
sudo a2dismod status
sudo systemctl restart apache2
การเพิ่มหัวข้อความปลอดภัย
หัวข้อความปลอดภัยช่วยปกป้องเว็บไซต์ของคุณจากการโจมตีเช่น cross-site scripting และ clickjacking.
เปิดใช้งาน mod_headers
sudo a2enmod headers
sudo systemctl restart apache2
เพิ่มหัวข้อความปลอดภัย
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>
รีสตาร์ท Apache:
sudo systemctl restart apache2
การแก้ไขปัญหา
ตรวจสอบการตั้งค่าไฟร์วอลล์
sudo ufw status
ตรวจสอบการกำหนดค่า Apache สำหรับข้อผิดพลาด
sudo apachectl configtest
ตัวอย่างผลลัพธ์:
Syntax OK
ไม่สามารถเชื่อมต่อผ่าน SSH หลังจากเปลี่ยนพอร์ต
หาก SSH ไม่เชื่อมต่อหลังจากเปลี่ยนพอร์ต ให้ระบุพอร์ตใหม่เมื่อเชื่อมต่อ:
ssh -p 2222 user@server-ip
สรุป
ส่วนนี้อธิบาย วิธีเสริมความปลอดภัยของเว็บเซิร์ฟเวอร์ของคุณ.
ประเด็นสำคัญ:
- กำหนดกฎไฟร์วอลล์ UFW
- การรักษาความปลอดภัย SSH (เปลี่ยนพอร์ต, Fail2Ban)
- การเสริมความปลอดภัย Apache (ซ่อนข้อมูลเวอร์ชัน, ปิดการแสดงรายการ)
- การเพิ่มหัวข้อความปลอดภัย
7. การปรับประสิทธิภาพ
ปรับแต่ง Apache
การกำหนดค่า Apache เริ่มต้นอาจไม่ให้ประสิทธิภาพที่ดีที่สุด โดยการปรับเปลี่ยนต่อไปนี้ คุณสามารถบรรลุ ประสิทธิภาพที่สูงขึ้นอย่างมาก.
การปรับแต่ง MPM (Multi-Processing Module)
MPM (Multi-Processing Module) กำหนดวิธีที่ Apache จัดการคำขอ.
ตรวจสอบ MPM ปัจจุบัน:
apachectl -M | grep mpm
ตัวอย่างผลลัพธ์:
mpm_prefork_module (shared)
หาก mpm_prefork_module ถูกเปิดใช้งาน การสลับไปใช้ mpm_event สามารถปรับปรุงประสิทธิภาพได้.
เปลี่ยน MPM:
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2
เปิดใช้งาน KeepAlive
KeepAlive (การเชื่อมต่อที่คงอยู่) ทำให้ไคลเอนต์สามารถใช้การเชื่อมต่อที่มีอยู่ซ้ำได้ ลดภาระการร้องขอ.
แก้ไขไฟล์การกำหนดค่า:
sudo nano /etc/apache2/apache2.conf
ยืนยันการตั้งค่าดังต่อไปนี้:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
รีสตาร์ท Apache:
sudo systemctl restart apache2
การใช้แคช
โดยการใช้แคชของเบราว์เซอร์และแคชฝั่งเซิร์ฟเวอร์ คุณสามารถ ลดการร้องขอที่ไม่จำเป็นและปรับปรุงความเร็วการตอบสนองอย่างมาก.
เปิดใช้งาน mod_expires (แคชเบราว์เซอร์)
sudo a2enmod expires
sudo systemctl restart apache2
เพิ่มดังต่อไปนี้ในไฟล์ /etc/apache2/sites-available/example.com.conf:
<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>
รีสตาร์ท Apache:
sudo systemctl restart apache2
เปิดใช้งาน mod_cache (แคชเซิร์ฟเวอร์)
sudo a2enmod cache cache_disk
sudo systemctl restart apache2
เพิ่มสิ่งต่อไปนี้ลงในไฟล์ /etc/apache2/sites-available/example.com.conf:
<IfModule mod_cache.c>
CacheEnable disk /
CacheRoot /var/cache/apache2/mod_cache_disk
CacheDefaultExpire 86400
</IfModule>
รีสตาร์ท Apache:
sudo systemctl restart apache2
เปิดการบีบอัด
ใช้ mod_deflate เพื่อบีบอัดข้อมูลเว็บไซต์และลดขนาดการถ่ายโอน
เปิดใช้งาน mod_deflate
sudo a2enmod deflate
sudo systemctl restart apache2
เพิ่มสิ่งต่อไปนี้ลงในไฟล์ /etc/apache2/sites-available/example.com.conf:
<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>
รีสตาร์ท Apache:
sudo systemctl restart apache2
การจำกัดทรัพยากร
เพื่อเตรียมรับมือกับการจราจรหนักหรือการเข้าถึงที่อาจเป็นอันตราย, ตั้งค่า การจำกัดทรัพยากร ด้วยโมดูลของ Apache
เปิดใช้งาน mod_ratelimit
sudo a2enmod ratelimit
sudo systemctl restart apache2
เพิ่มสิ่งต่อไปนี้ลงในไฟล์ /etc/apache2/sites-available/example.com.conf:
<Location />
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 200
</Location>
รีสตาร์ท Apache:
sudo systemctl restart apache2
การแก้ไขปัญหาประสิทธิภาพ
ตรวจสอบบันทึกข้อผิดพลาดของ Apache
sudo tail -f /var/log/apache2/error.log
ตรวจสอบสถานะการโหลดของ Apache
sudo apachectl status
ตรวจสอบการใช้ CPU และหน่วยความจำ
top
หรือ
htop
หาก htop ยังไม่ได้ติดตั้ง:
sudo apt install htop
สรุป
ส่วนนี้อธิบายวิธี เพิ่มประสิทธิภาพการทำงานของเว็บเซิร์ฟเวอร์
ประเด็นสำคัญ:
- ปรับแต่ง Apache (การเพิ่มประสิทธิภาพ MPM และการตั้งค่า KeepAlive)
- ใช้แคช (แคชของเบราว์เซอร์และแคชของเซิร์ฟเวอร์)
- การบีบอัดข้อมูลด้วย mod_deflate
- การควบคุมทรัพยากรด้วย mod_ratelimit
8. การแก้ไขปัญหา
Apache ไม่สามารถเริ่มทำงาน
หาก Apache ไม่สามารถเริ่มทำงานได้, สาเหตุที่พบบ่อยที่สุดคือข้อผิดพลาดในการกำหนดค่า
1. ตรวจสอบข้อความข้อผิดพลาด
sudo systemctl status apache2
2. ทดสอบการกำหนดค่า
sudo apachectl configtest
หากผลลัพธ์มี “Syntax error”, ให้ตรวจสอบเส้นทางหรือการตั้งค่าที่ระบุในข้อความข้อผิดพลาด
3. รีสตาร์ท Apache
sudo systemctl restart apache2
ไม่สามารถเข้าถึงเซิร์ฟเวอร์
หากไม่สามารถเข้าถึงเซิร์ฟเวอร์ผ่านเบราว์เซอร์, ให้ตรวจสอบรายการต่อไปนี้
1. ตรวจสอบการตั้งค่าไฟร์วอลล์
sudo ufw status
ตรวจสอบให้แน่ใจว่าพอร์ต 80 และ 443 ถูกอนุญาต
2. ตรวจสอบสถานะของ Apache
sudo systemctl status apache2
3. ตรวจสอบที่อยู่ IP ของเซิร์ฟเวอร์
hostname -I
Virtual Hosts ไม่ทำงาน
หาก virtual hosts ไม่ทำงานตามที่คาดหวัง, ให้ตรวจสอบการกำหนดค่าอีกครั้ง
1. ยืนยันว่าไฟล์ Virtual Host ถูกเปิดใช้งาน
ls /etc/apache2/sites-enabled/
หากไฟล์ .conf ของคุณไม่แสดงในรายการ, ให้เปิดใช้งานมัน:
sudo a2ensite example.com.conf
sudo systemctl restart apache2
2. ตรวจสอบการแก้ไขชื่อโฮสต์
หากทำการทดสอบในเครื่องท้องถิ่น, ให้ตรวจสอบว่าไฟล์ /etc/hosts มีเนื้อหาดังต่อไปนี้:
127.0.0.1 example.com
3. ตรวจสอบเส้นทาง DocumentRoot
เส้นทางที่ไม่ถูกต้องมักทำให้เกิดปัญหา virtual host
DocumentRoot /var/www/example.com/public_html
ปัญหาใบรับรอง SSL
1. HTTPS ไม่ทำงาน
ยืนยันว่า SSL ถูกเปิดใช้งาน:
sudo apachectl -M | grep ssl
เปิดใช้งานหากจำเป็น:
sudo a2enmod ssl
sudo systemctl restart apache2
2. ใบรับรองหมดอายุ
sudo certbot renew
3. การตรวจสอบ Let’s Encrypt ล้มเหลว
การตรวจสอบ HTTP ต้องการให้พอร์ต 80 เปิดอยู่.
sudo ufw allow 80/tcp
sudo systemctl restart apache2
ประสิทธิภาพเว็บไซต์ช้า
1. ตรวจสอบโหลดของเซิร์ฟเวอร์
top
2. ตรวจสอบบันทึกของ Apache
sudo tail -f /var/log/apache2/access.log
3. ยืนยันการตั้งค่าแคช
ตรวจสอบให้แน่ใจว่า mod_expires, mod_cache และ mod_deflate ถูกเปิดใช้งาน.
ข้อผิดพลาดด้านสิทธิ์ (403 Forbidden)
ข้อผิดพลาดนี้มักบ่งชี้ว่าการอนุญาตไฟล์หรือไดเรกทอรีไม่ถูกต้อง.
1. ตรวจสอบความเป็นเจ้าของไดเรกทอรี
sudo chown -R www-data:www-data /var/www/example.com
2. ตรวจสอบการอนุญาตไดเรกทอรี
sudo chmod -R 755 /var/www/example.com
การตรวจสอบบันทึกข้อผิดพลาด
ควรตรวจสอบบันทึกข้อผิดพลาดเสมอระหว่างการแก้ปัญหา:
sudo tail -f /var/log/apache2/error.log
สรุป
ส่วนนี้ได้ให้ วิธีการแก้ไขปัญหาที่พบบ่อย กับเว็บเซิร์ฟเวอร์ Ubuntu ของคุณ
จุดสำคัญ:
- ข้อผิดพลาดการเริ่มต้น Apache และการตรวจสอบการกำหนดค่า
- ปัญหาไฟร์วอลล์และเครือข่าย
- ปัญหาการกำหนดค่า Virtual host
- ข้อผิดพลาดและการต่ออายุใบรับรอง SSL
- การแก้ไขปัญหาประสิทธิภาพและสิทธิ์
9. สรุป
ในบทความนี้ เราอธิบายวิธี สร้างสภาพแวดล้อมเว็บเซิร์ฟเวอร์ที่สมบูรณ์บน Ubuntu ด้วย Apache พร้อมการเสริมความปลอดภัย การเพิ่มประสิทธิภาพ และเทคนิคการแก้ไขปัญหา.
โดยทำตามคู่มือนี้ คุณสามารถดำเนินการ เว็บเซิร์ฟเวอร์ที่เสถียร ปลอดภัย และมีประสิทธิภาพสูง ที่เหมาะกับโครงการส่วนบุคคลและแอปพลิเคชันระดับธุรกิจ.
✔ จุดสำคัญที่ครอบคลุมในคู่มือนี้
- การติดตั้ง Ubuntu และการกำหนดค่าระบบเบื้องต้น
- การติดตั้งและกำหนดค่า Apache
- การตั้งค่า virtual hosts เพื่อจัดการหลายเว็บไซต์
- การเปิดใช้งาน HTTPS ด้วยใบรับรอง SSL ฟรีจาก Let’s Encrypt
- การเสริมความปลอดภัยของเซิร์ฟเวอร์ (UFW, การเสริมความแข็งแกร่งของ SSH, การตั้งค่า Apache)
- การปรับปรุงประสิทธิภาพ (แคช, การบีบอัด, การปรับแต่ง MPM)
- การแก้ไขปัญหาที่พบบ่อย ระหว่างการทำงานของเซิร์ฟเวอร์
✔ สิ่งที่คุณสามารถทำได้หลังจากเสร็จสิ้นคู่มือนี้
- โฮสต์หลายเว็บไซต์บนเซิร์ฟเวอร์ Ubuntu เดียว
- รับประกันการสื่อสารที่ปลอดภัยด้วย SSL/TLS สมัยใหม่
- ปรับปรุงความเร็วและความน่าเชื่อถือของเว็บไซต์ด้วยแคชและการบีบอัด
- วินิจฉัยและแก้ไขปัญหาอย่างรวดเร็วโดยใช้บันทึกของ Apache และเครื่องมือระบบ
✔ ขั้นตอนต่อไปที่แนะนำ
- ติดตั้ง PHP และ MySQL/MariaDB เพื่อสร้างสภาพแวดล้อม LAMP เต็มรูปแบบ
- ปรับใช้ WordPress หรือ CMS อื่น
- ดำเนินการโซลูชันการสำรองข้อมูลอัตโนมัติ
- พิจารณาใช้บริการคลาวด์ (AWS, GCP, Azure ฯลฯ)
ด้วยการกำหนดค่าและการบำรุงรักษาที่เหมาะสม เว็บเซิร์ฟเวอร์ Ubuntu สามารถให้ความเสถียรระยะยาวและประสิทธิภาพที่ยอดเยี่ยม
เราหวังว่าคู่มือนี้จะช่วยคุณสร้างสภาพแวดล้อมเซิร์ฟเวอร์ที่เชื่อถือได้และปลอดภัย.


