วิธีสร้างเซิร์ฟเวอร์เว็บ Ubuntu ที่ปลอดภัยและประสิทธิภาพสูงด้วย Apache (คู่มือครบถ้วน)

目次

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 เป็นเว็บเซิร์ฟเวอร์ แนะนำให้มี สเปคขั้นต่ำ ดังต่อไปนี้:

ItemMinimum RequirementsRecommended Requirements
OSUbuntu 22.04 LTSUbuntu 22.04 LTS
CPU1GHz or higher2GHz or higher
Memory512MB2GB or higher
Storage10GB or more20GB or more
NetworkInternet connectionHigh-speed connection recommended

การดาวน์โหลดและติดตั้ง Ubuntu

คุณสามารถดาวน์โหลด Ubuntu ได้จากเว็บไซต์อย่างเป็นทางการ (https://ubuntu.com/download/server) ดาวน์โหลดไฟล์ ISO แล้วติดตั้งใน เครื่องเสมือนเช่น VirtualBox หรือ VMware หรือบน เซิร์ฟเวอร์หรือ VPS เฉพาะ.

ขั้นตอนการติดตั้ง:

  1. สร้างสื่อการติดตั้ง
  • USB drive (โดยใช้เครื่องมือเช่น Rufus)
  • เมานท์ไฟล์ ISO ในเครื่องเสมือน
  1. ทำตามวิซาร์ดการติดตั้ง
  • เลือกภาษาที่ต้องการ
  • ตรวจสอบการเชื่อมต่อเครือข่าย
  • ตั้งค่าชื่อผู้ใช้และรหัสผ่าน
  • ติดตั้ง SSH server (ตัวเลือก—คุณสามารถติดตั้งภายหลังได้)
  1. รีบูตหลังการติดตั้งเสร็จสิ้น
  2. เข้าสู่ระบบและเริ่มการตั้งค่าเริ่มต้น

การตั้งค่าเริ่มต้นพื้นฐาน

หลังการติดตั้ง ให้ทำขั้นตอนการตั้งค่าเริ่มต้นต่อไปนี้.

  1. Update all packages
    sudo apt update && sudo apt upgrade -y
    

→ ใช้แพตช์ความปลอดภัยและอัปเดตแพคเกจซอฟต์แวร์.

  1. Set the timezone
    sudo timedatectl set-timezone Asia/Tokyo
    

→ ตั้งเวลาในระบบเป็นเวลามาตรฐานญี่ปุ่น (JST).

  1. Enable the firewall
    sudo ufw enable
    

→ เปิดใช้งานไฟร์วอลล์เพื่อปกป้องระบบจากการเข้าถึงโดยไม่ได้รับอนุญาต.

  1. 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:

  1. Name-based Virtual Hosts
  • เว็บไซต์หลายแห่งแบ่งปัน ที่อยู่ IP เดียวกัน
  • วิธีที่พบบ่อยที่สุด
  1. 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

คำสั่งนี้ทำการ:

  1. การตรวจสอบโดเมน (การท้าทาย HTTP-01)
  2. การออกใบรับรอง SSL
  3. การกำหนดค่า SSL ของ Apache อัตโนมัติ
  4. การเปลี่ยนเส้นทางจาก 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 สามารถให้ความเสถียรระยะยาวและประสิทธิภาพที่ยอดเยี่ยม
เราหวังว่าคู่มือนี้จะช่วยคุณสร้างสภาพแวดล้อมเซิร์ฟเวอร์ที่เชื่อถือได้และปลอดภัย.