Hướng dẫn cài đặt và cấu hình máy chủ Web Ubuntu (Apache) bảo mật, tối ưu cho người mới bắt đầu

目次

1. Giới thiệu

Máy chủ Web Ubuntu là gì?

Máy chủ web là hệ thống cung cấp trang web trên Internet. Phần mềm máy chủ web phổ biến bao gồm Apache, Nginx, LiteSpeed, nhưng trên Ubuntu thì Apache được sử dụng rộng rãi nhất.
Ubuntu nhẹ, ổn định và mã nguồn mở nên được ứng dụng rộng rãi từ cá nhân đến doanh nghiệp. Đặc biệt, Ubuntu rất phù hợp để xây dựng môi trường LAMP (Linux, Apache, MySQL/MariaDB, PHP) và vận hành nhiều website, ứng dụng web.

Đối tượng của bài viết này

Bài viết này dành cho người mới bắt đầu tự xây dựng máy chủ web. Hướng dẫn chi tiết cách cài đặt Ubuntu, triển khai Apache, cấu hình Virtual Host, cài chứng chỉ SSL, tối ưu hóa và tăng cường bảo mật máy chủ.

Những gì bạn sẽ học được trong bài viết

  • Cách xây dựng máy chủ web trên Ubuntu (cài đặt và thiết lập cơ bản Apache)
  • Cấu hình Virtual Host và quản lý nhiều website trên một server
  • Cài đặt SSL miễn phí với Let’s Encrypt
  • Tăng cường bảo mật và tối ưu hóa máy chủ web
  • Khắc phục các lỗi phổ biến và cách xử lý

2. Cài đặt Ubuntu và cấu hình cơ bản

Yêu cầu hệ thống cần thiết

Để vận hành Ubuntu làm máy chủ web, bạn nên chuẩn bị các thông số tối thiểu sau:

Hạng mụcYêu cầu tối thiểuYêu cầu đề xuất
Hệ điều hànhUbuntu 22.04 LTSUbuntu 22.04 LTS
CPUTrên 1GHzTrên 2GHz
Bộ nhớ512MB2GB trở lên
Lưu trữ10GB trở lên20GB trở lên
Kết nối mạngKết nối InternetNên dùng đường truyền tốc độ cao

Tải về và cài đặt Ubuntu

Bạn có thể tải Ubuntu từ trang chính thức (https://ubuntu.com/download/server). Tải file ISO và tạo môi trường ảo bằng VirtualBox hoặc VMware, hoặc cài trực tiếp lên server vật lý hoặc VPS.

Các bước cài đặt:

  1. Tạo bộ cài đặt
  • Dùng USB (sử dụng công cụ như Rufus)
  • Mount file ISO vào máy ảo
  1. Cài đặt theo hướng dẫn
  • Chọn ngôn ngữ (ví dụ: “Japanese” nếu muốn dùng tiếng Nhật)
  • Kiểm tra kết nối mạng
  • Đặt tên người dùng, mật khẩu
  • Cài SSH server (có thể cài sau)
  1. Sau khi hoàn tất setup, khởi động lại
  2. Đăng nhập và bắt đầu cấu hình cơ bản

Cấu hình cơ bản sau cài đặt

Các bước cấu hình cần thiết ngay sau khi cài đặt Ubuntu:

  1. Cập nhật các gói lên mới nhất
   sudo apt update && sudo apt upgrade -y

→ Cập nhật bản vá bảo mật và phần mềm.

  1. Thiết lập múi giờ
   sudo timedatectl set-timezone Asia/Tokyo

→ Đặt giờ hệ thống theo JST (hoặc GMT+7 cho Việt Nam: Asia/Ho_Chi_Minh).

  1. Bật tường lửa (firewall)
   sudo ufw enable

→ Bảo vệ khỏi truy cập trái phép.

  1. Cấu hình SSH (quản lý từ xa)
  • Kiểm tra SSH đã bật chưa
    sudo systemctl status ssh
  • Nếu chưa, kích hoạt SSH
    sudo systemctl enable --now ssh

Khi hoàn thành các bước trên, bạn đã sẵn sàng sử dụng Ubuntu làm máy chủ web thực thụ.

3. Cài đặt và cấu hình cơ bản Apache

Apache là gì?

Apache (tên đầy đủ: Apache HTTP Server) là phần mềm máy chủ web mã nguồn mở nổi tiếng, được đánh giá cao về độ ổn định, khả năng mở rộng và bảo mật. Khoảng 30% máy chủ web trên thế giới sử dụng Apache.

Đặc điểm nổi bật:

  • Miễn phí (mã nguồn mở)
  • Cấu trúc module linh hoạt, dễ mở rộng
  • Hỗ trợ SSL/TLS cho website HTTPS
  • Quản lý Virtual Host, chạy nhiều website trên một server

Cài đặt Apache trên Ubuntu

Trên Ubuntu, bạn có thể dễ dàng cài đặt Apache thông qua hệ thống quản lý gói apt.

Cách cài đặt Apache

Chạy lệnh sau để cài Apache:

sudo apt update
sudo apt install apache2 -y

Kiểm tra cài đặt Apache thành công

Sau khi cài đặt, kiểm tra phiên bản Apache:

apache2 -v

Ví dụ kết quả:

Server version: Apache/2.4.52 (Ubuntu)
Server built:   2023-07-01T12:34:56

Nếu xuất hiện thông tin như trên là cài đặt thành công.

Khởi động, dừng và khởi động lại Apache

Quản lý Apache bằng lệnh systemctl.

Khởi động Apache

sudo systemctl start apache2

Khi đó, Apache sẵn sàng xử lý các request web.

Thiết lập tự động khởi động Apache

sudo systemctl enable apache2

Kiểm tra trạng thái Apache

Chạy lệnh sau để kiểm tra trạng thái Apache:

sudo systemctl status apache2

Nếu đang chạy bình thường sẽ hiện thông báo như sau:

● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: active (running) since ...

Khởi động lại hoặc dừng Apache

Để áp dụng thay đổi cấu hình, khởi động lại Apache bằng:

sudo systemctl restart apache2

Dừng Apache tạm thời:

sudo systemctl stop apache2

Kiểm tra hoạt động của Apache

Để kiểm tra Apache hoạt động đúng, hãy truy cập địa chỉ IP của server trên trình duyệt.

1. Xác định địa chỉ IP của server

hostname -I

Hoặc kiểm tra IP public:

curl ifconfig.me

2. Kiểm tra trên trình duyệt web

Dán vào thanh địa chỉ trình duyệt:

http://<Địa-chỉ-IP-server>/

Nếu chạy trên máy cục bộ:

http://localhost/

Bạn sẽ thấy trang mặc định của Apache (/var/www/html/index.html).

Ví dụ trang mặc định:

Apache2 Ubuntu Default Page
It works!

Nếu xuất hiện thông báo này, Apache đã hoạt động chính xác.

Cấu hình tường lửa cho Apache

Trên Ubuntu, sử dụng UFW (Uncomplicated Firewall) để thiết lập tường lửa.
Mặc định, truy cập HTTP (cổng 80) hoặc HTTPS (cổng 443) có thể bị chặn.

Thêm rule firewall cho Apache

sudo ufw allow 'Apache'

Nếu cần cho phép cả HTTPS:

sudo ufw allow 'Apache Full'

Kiểm tra trạng thái tường lửa

sudo ufw status

Ví dụ:

Status: active

To                         Action      From
--                         ------      ----
Apache                     ALLOW       Anywhere
Apache (v6)                ALLOW       Anywhere (v6)

Nếu thấy như trên nghĩa là Apache đã được phép truy cập qua tường lửa.

Tóm tắt

Như vậy, bạn đã cài đặt và cấu hình cơ bản Apache trên Ubuntu thành công.
Các nội dung đã hướng dẫn:

  • Cách cài đặt Apache
  • Thiết lập tự khởi động Apache
  • Kiểm tra hoạt động (truy cập qua trình duyệt)
  • Cấu hình tường lửa cho Apache
  • Giới thiệu file cấu hình cơ bản của Apache

4. Cấu hình Virtual Host (quản lý nhiều website)

Virtual Host là gì?

Virtual Host cho phép một máy chủ Apache vận hành nhiều tên miền (domain) hoặc subdomain khác nhau.
Ví dụ: Chỉ với 1 server bạn có thể cung cấp cả example.comtest.com.

Có 2 loại Virtual Host chính:

  1. Virtual Host dựa trên tên miền (Name-based Virtual Host)
  • Chạy nhiều site trên cùng một địa chỉ IP
  • Đây là cách thiết lập phổ biến nhất
  1. Virtual Host dựa trên IP (IP-based Virtual Host)
  • Gán mỗi site một địa chỉ IP khác nhau
  • Yêu cầu server có nhiều interface mạng/IP

Thông thường, Name-based Virtual Host là lựa chọn phù hợp.

Các bước cấu hình Virtual Host

1. Tạo thư mục cho từng website

Tạo thư mục riêng cho mỗi website:

sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html

2. Thay đổi quyền sở hữu thư mục

Đảm bảo Apache có quyền đọc/ghi:

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. Tạo file HTML tạm để kiểm tra

Tạo file index.html cho từng website:

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. Tạo file cấu hình Virtual Host

Các file cấu hình đặt tại /etc/apache2/sites-available/.

Cấu hình cho example.com

Tạo file:

sudo nano /etc/apache2/sites-available/example.com.conf

Nội dung file:

<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>

Cấu hình cho test.com

sudo nano /etc/apache2/sites-available/test.com.conf

Nội dung:

<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. Kích hoạt Virtual Host

Sau khi tạo xong file cấu hình, bật Virtual Host:

sudo a2ensite example.com.conf
sudo a2ensite test.com.conf

Kiểm tra cấu hình Apache

Kiểm tra lỗi cú pháp:

sudo apachectl configtest

Kết quả xuất ra:

Syntax OK

Nếu không có lỗi, khởi động lại Apache:

sudo systemctl restart apache2

6. Kiểm tra hoạt động local (chỉnh sửa file hosts)

Để test local, chỉnh /etc/hosts trên PC:

sudo nano /etc/hosts

Thêm các dòng sau:

127.0.0.1 example.com
127.0.0.1 test.com

Lưu lại, sau đó truy cập http://example.com/ trên trình duyệt và xác nhận hiện lên “Welcome to example.com”.
Tương tự kiểm tra http://test.com/.

7. Xử lý sự cố (Troubleshooting)

Nếu Virtual Host không hoạt động, kiểm tra các điểm sau:

1. Xem log lỗi của Apache

sudo tail -f /var/log/apache2/error.log

2. Kiểm tra các file cấu hình đã được bật

ls /etc/apache2/sites-enabled/

Nếu thấy file .conf đã bật nghĩa là OK.

3. Kiểm tra cổng Apache

Đảm bảo Virtual Host chạy trên port 80 (HTTP), kiểm tra /etc/apache2/ports.conf:

sudo nano /etc/apache2/ports.conf

Đảm bảo có dòng:

Listen 80

Tóm tắt

Ở phần này, bạn đã biết cách cấu hình Virtual Host trên Ubuntu với Apache.
Các điểm chính:

  • Khái niệm và mục đích Virtual Host
  • Tạo thư mục cho từng website
  • Tạo và bật file cấu hình Virtual Host
  • Kiểm tra hoạt động trên môi trường local
  • Xử lý sự cố khi cấu hình

5. Triển khai SSL/TLS (Bảo mật HTTPS)

SSL/TLS là gì?

SSL (Secure Sockets Layer) và TLS (Transport Layer Security) là các công nghệ mã hóa để đảm bảo truyền tải dữ liệu an toàn trên Internet.

Lợi ích của việc triển khai SSL/TLS

Mã hóa kết nối (giảm nguy cơ bị nghe lén, chỉnh sửa dữ liệu)
Được Google đánh giá SEO tốt hơn (website HTTPS được ưu tiên trên kết quả tìm kiếm)
Tránh cảnh báo bảo mật trình duyệt (HTTP bị báo “không an toàn” trên trình duyệt hiện đại)
Bảo vệ thanh toán online, tài khoản đăng nhập
Hiện nay, TLS (TLS 1.2/1.3) được khuyến nghị, các phiên bản SSL 3.0 trở về trước đã không còn được hỗ trợ.

Lấy chứng chỉ SSL miễn phí bằng Let’s Encrypt

Let’s Encrypt là tổ chức cung cấp chứng chỉ SSL miễn phí (CA: Certificate Authority).
Bạn có thể dùng certbot để xin và cấu hình SSL cho Apache rất dễ dàng.

Cài đặt công cụ Let’s Encrypt (Certbot)

Trước tiên, cài đặt certbot và plugin cho Apache:

sudo apt update
sudo apt install certbot python3-certbot-apache -y

Cấu hình SSL cho Apache tự động

Sử dụng lệnh sau để xin chứng chỉ SSL và tự động cấu hình cho Apache:

sudo certbot --apache -d example.com -d www.example.com

Quá trình thực hiện bao gồm:

  1. Xác thực domain (HTTP-01 Challenge)
  2. Cấp phát chứng chỉ SSL
  3. Tự động cấu hình Apache dùng SSL
  4. Thiết lập chuyển hướng HTTPS

Kiểm tra hoạt động của SSL

Truy cập địa chỉ sau để kiểm tra đã bật HTTPS:

https://example.com/

Nếu thấy biểu tượng ổ khóa trên trình duyệt, chứng chỉ đã hoạt động.

Cấu hình SSL thủ công cho Apache

Nếu muốn cấu hình SSL thủ công mà không dùng certbot --apache, hãy làm theo các bước sau:

1. Kích hoạt module SSL cho Apache

sudo a2enmod ssl
sudo systemctl restart apache2

2. Cấu hình Virtual Host cho SSL

Sửa file /etc/apache2/sites-available/example.com-le-ssl.conf:

sudo nano /etc/apache2/sites-available/example.com-le-ssl.conf

Nội dung ví dụ:

<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. Kích hoạt cấu hình và khởi động lại Apache

sudo a2ensite example.com-le-ssl.conf
sudo systemctl restart apache2

Tự động gia hạn chứng chỉ SSL

Chứng chỉ Let’s Encrypt chỉ có hiệu lực 90 ngày.
Nên cấu hình tự động gia hạn để tránh gián đoạn dịch vụ.

1. Kiểm tra chức năng tự động gia hạn của Certbot

sudo certbot renew --dry-run

2. Kiểm tra lịch tự động gia hạn

Thông thường, cron job tự động đã được cấu hình:

sudo systemctl list-timers | grep certbot

Xử lý sự cố SSL

1. Chứng chỉ SSL chưa hoạt động

Giải pháp: Khởi động lại Apache, kiểm tra cấu hình

sudo systemctl restart apache2
sudo apachectl configtest

2. Hết hạn chứng chỉ SSL

Giải pháp: Gia hạn thủ công

sudo certbot renew --force-renewal

3. Lỗi xác thực Let’s Encrypt

Giải pháp: Kiểm tra firewall

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

Tóm tắt

Ở phần này, bạn đã biết cách cài đặt SSL miễn phí bằng Let’s Encrypt cho Apache.
Các điểm chính:

  • Kiến thức cơ bản về SSL/TLS
  • Cấu hình SSL cho Apache với Let’s Encrypt
  • Cấu hình thủ công SSL
  • Tự động gia hạn chứng chỉ SSL
  • Xử lý sự cố liên quan đến SSL

6. Tăng cường bảo mật máy chủ web

Cấu hình tường lửa (UFW)

Trên Ubuntu, nên dùng UFW (Uncomplicated Firewall) để chặn các kết nối không cần thiết và bảo vệ máy chủ.

Kiểm tra trạng thái tường lửa hiện tại

sudo ufw status

Chỉ mở các cổng cần thiết

Mặc định nên chặn toàn bộ và chỉ mở các port cần thiết:

sudo ufw default deny incoming
sudo ufw default allow outgoing

Các cổng thường mở:

  • SSH (port 22)
  sudo ufw allow 22/tcp
  • HTTP (port 80)
  sudo ufw allow 80/tcp
  • HTTPS (port 443)
  sudo ufw allow 443/tcp

Kích hoạt tường lửa

sudo ufw enable

Tăng cường bảo mật SSH

Nếu giữ mặc định, SSH dễ bị tấn công brute-force, nên cần tăng cường bảo vệ.

Đổi port SSH

sudo nano /etc/ssh/sshd_config

Chỉnh các dòng sau:

Port 2222  # đổi 22 thành 2222 (hoặc số port khác)
PermitRootLogin no  # không cho phép root login
PasswordAuthentication no  # chỉ cho phép xác thực bằng SSH key

Sau khi sửa, khởi động lại SSH:

sudo systemctl restart ssh

Cài đặt Fail2Ban

Fail2Ban tự động chặn IP cố đăng nhập sai nhiều lần vào SSH.

sudo apt install fail2ban -y

Sửa file cấu hình:

sudo nano /etc/fail2ban/jail.local

Thêm:

[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 600

Kích hoạt Fail2Ban:

sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

Cấu hình bảo mật cho Apache

Ẩn thông tin phiên bản Apache

sudo nano /etc/apache2/conf-available/security.conf

Chỉnh các dòng sau:

ServerTokens Prod
ServerSignature Off

Khởi động lại Apache:

sudo systemctl restart apache2

Tắt hiển thị danh sách file thư mục

sudo nano /etc/apache2/apache2.conf

Tìm và xóa Indexes trong:

<Directory /var/www/>
    Options -Indexes +FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Khởi động lại Apache:

sudo systemctl restart apache2

Vô hiệu hóa module Apache không cần thiết

sudo a2dismod autoindex
sudo a2dismod status
sudo systemctl restart apache2

Thêm các security header

Bổ sung các header bảo mật giúp chống tấn công web.

Kích hoạt mod_headers

sudo a2enmod headers
sudo systemctl restart apache2

Cấu hình header bảo mật

Sửa /etc/apache2/sites-available/example.com.conf và thêm vào <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>

Khởi động lại Apache:

sudo systemctl restart apache2

Xử lý sự cố bảo mật

Kiểm tra trạng thái tường lửa

sudo ufw status

Kiểm tra lỗi cấu hình Apache

sudo apachectl configtest

Kết quả:

Syntax OK

Không kết nối được SSH sau khi đổi port

Hãy kết nối SSH với port mới:

ssh -p 2222 user@server-ip

Tóm tắt

Phần này đã hướng dẫn các giải pháp tăng cường bảo mật khi vận hành web server:

  • Cấu hình tường lửa UFW
  • Bảo vệ SSH (đổi port, Fail2Ban)
  • Bảo mật Apache (ẩn thông tin, tắt liệt kê thư mục)
  • Bổ sung security header

7. Tối ưu hiệu suất máy chủ web

Tối ưu cấu hình Apache

Cấu hình mặc định của Apache chưa tối ưu cho mọi trường hợp. Điều chỉnh các thông số sau sẽ giúp tăng hiệu suất xử lý request.

Tối ưu MPM (Multi-Processing Module)

MPM là module xác định cách Apache xử lý request.
Kiểm tra module đang dùng:

apachectl -M | grep mpm

Ví dụ:

mpm_prefork_module (shared)

Nếu đang dùng mpm_prefork, nên chuyển sang mpm_event để tăng tốc:

sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2

Bật KeepAlive

Kích hoạt KeepAlive để trình duyệt tái sử dụng kết nối, giảm số lần handshake.
Sửa file cấu hình:

sudo nano /etc/apache2/apache2.conf

Tìm và chỉnh:

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

Sau đó khởi động lại Apache:

sudo systemctl restart apache2

Tận dụng cache

Dùng cache trình duyệt và cache server để giảm số request lặp lại và tăng tốc độ phản hồi.

Bật mod_expires (cache trình duyệt)

sudo a2enmod expires
sudo systemctl restart apache2

Thêm vào file cấu hình site:

<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>

Khởi động lại Apache:

sudo systemctl restart apache2

Bật mod_cache (cache server)

sudo a2enmod cache cache_disk
sudo systemctl restart apache2

Thêm vào file cấu hình site:

<IfModule mod_cache.c>
    CacheEnable disk /
    CacheRoot /var/cache/apache2/mod_cache_disk
    CacheDefaultExpire 86400
</IfModule>

Khởi động lại Apache:

sudo systemctl restart apache2

Nén dữ liệu khi truyền

Dùng mod_deflate để nén dữ liệu trả về, giảm dung lượng truyền qua mạng.

Bật mod_deflate

sudo a2enmod deflate
sudo systemctl restart apache2

Thêm vào file cấu hình site:

<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>

Khởi động lại Apache:

sudo systemctl restart apache2

Giới hạn tài nguyên

Nên thiết lập giới hạn truy cập để tránh server bị quá tải do nhiều request hoặc tấn công.

Bật mod_ratelimit

sudo a2enmod ratelimit
sudo systemctl restart apache2

Thêm vào file cấu hình site:

<Location />
    SetOutputFilter RATE_LIMIT
    SetEnv rate-limit 200
</Location>

Khởi động lại Apache:

sudo systemctl restart apache2

Xử lý sự cố tối ưu hiệu suất

Nếu phát sinh lỗi sau tối ưu hóa, hãy thực hiện các bước kiểm tra sau.

Kiểm tra log lỗi Apache

sudo tail -f /var/log/apache2/error.log

Kiểm tra mức tải Apache

sudo apachectl status

Theo dõi CPU và RAM của server

top

hoặc:

htop

(Nếu chưa có htop thì cài: sudo apt install htop)

Tóm tắt

Phần này đã hướng dẫn các kỹ thuật tối ưu hiệu suất cho máy chủ web:

  • Tối ưu cấu hình Apache (MPM, KeepAlive)
  • Tận dụng cache (cache trình duyệt & server)
  • Nén dữ liệu (mod_deflate)
  • Giới hạn truy cập (mod_ratelimit)

8. Khắc phục sự cố (Troubleshooting)

Apache không khởi động hoặc bị dừng

Kiểm tra trạng thái Apache

sudo systemctl status apache2

Ví dụ nếu có lỗi:

● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since ...

Nếu Active: failed xuất hiện, nghĩa là có lỗi.

Kiểm tra log lỗi

sudo journalctl -xe
sudo tail -f /var/log/apache2/error.log

Kiểm tra port đang sử dụng

sudo netstat -tulnp | grep ':80'

hoặc:

sudo lsof -i:80

Nếu bị trùng port, chỉnh /etc/apache2/ports.conf về port phù hợp.

Lỗi liên quan đến chứng chỉ SSL

Chứng chỉ SSL hết hạn

sudo certbot renew --force-renewal

AH02572: Failed to configure at least one certificate

Mở file /etc/apache2/sites-available/example.com-le-ssl.conf và kiểm tra các dòng:

SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

Sau khi xác nhận đúng, khởi động lại Apache:

sudo systemctl restart apache2

Website báo lỗi 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

Kiểm tra DocumentRoot trong /etc/apache2/sites-available/example.com.conf:

DocumentRoot /var/www/example.com/public_html

Nếu mod_rewrite chưa bật:

sudo a2enmod rewrite
sudo systemctl restart apache2

500 Internal Server Error

Kiểm tra log lỗi:

sudo tail -f /var/log/apache2/error.log

Thử đổi tên .htaccess để kiểm tra:

mv /var/www/example.com/public_html/.htaccess /var/www/example.com/public_html/.htaccess.bak

Hiệu suất thấp hoặc bị quá tải

Kiểm tra tải Apache

top

hoặc:

htop

Tắt module Apache không cần thiết

sudo a2dismod status
sudo a2dismod autoindex
sudo systemctl restart apache2

Tối ưu cache

sudo a2enmod cache cache_disk

Sự cố mạng

Kiểm tra địa chỉ IP máy chủ

ip a

hoặc:

curl ifconfig.me

Kiểm tra các port đã mở

sudo netstat -tulnp | grep LISTEN

hoặc:

sudo lsof -i :80

Nếu không thấy port 80 (HTTP) hay 443 (HTTPS), kiểm tra lại firewall:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

Tóm tắt

Phần này đã tổng hợp các lỗi thường gặp khi vận hành Web server Ubuntu (Apache) và cách xử lý:

  • Khắc phục Apache không khởi động
  • Sửa lỗi SSL
  • Lỗi 403 / 404 / 500 và cách giải quyết
  • Tối ưu hiệu suất server
  • Kiểm tra kết nối mạng

9. Tổng kết

Những nội dung đã học

Cùng điểm lại các nội dung quan trọng trong từng phần:

PhầnNội dung
1. Giới thiệuKhái niệm cơ bản về Ubuntu Web Server và mục tiêu bài viết
2. Cài đặt và cấu hình UbuntuCài đặt hệ điều hành, cập nhật, thiết lập tường lửa
3. Cài đặt và cấu hình ApacheCài Apache, khởi động, kiểm tra hoạt động
4. Cấu hình Virtual HostQuản lý nhiều website trên một server
5. Triển khai SSL/TLSHTTPS miễn phí bằng Let’s Encrypt
6. Tăng cường bảo mậtCấu hình firewall, bảo mật SSH, bảo mật Apache
7. Tối ưu hiệu suấtCache, nén dữ liệu, cấu hình tối ưu Apache
8. Khắc phục sự cốSửa lỗi Apache, SSL, tối ưu hiệu suất, xử lý sự cố mạng

Bước tiếp theo

Sau khi hoàn thành cấu hình cơ bản Ubuntu Web Server, bạn có thể nâng cao hơn với các kỹ thuật sau:
Cài đặt WordPress, ứng dụng PHP
Cài đặt cơ sở dữ liệu (MySQL/MariaDB)
Kết hợp Nginx làm reverse proxy
Triển khai tự động mở rộng trên Cloud (AWS, GCP, Azure…)
Quản lý log và giám sát server (sử dụng fail2ban, logwatch…)

Các câu hỏi thường gặp (FAQ)

Q1: Nên chọn Nginx hay Apache trên Ubuntu?

A1: Nếu chủ yếu là nội dung tĩnh, nên chọn Nginx; còn nhiều nội dung động (PHP…) thì chọn Apache. Cũng có thể kết hợp Nginx làm reverse proxy cho Apache.

Q2: Có tự động gia hạn chứng chỉ SSL được không?

A2: Có, chỉ cần cài Certbot là tự động gia hạn. Kiểm tra bằng lệnh sudo certbot renew --dry-run và kiểm tra cron.

Q3: Làm sao tăng cường bảo mật cho web server?

A3: Dùng Fail2Ban chống brute-force, ẩn thông tin Apache, tắt module không cần thiết…

Q4: Làm sao tối ưu hiệu suất Apache?

A4: Chọn MPM event/worker, bật cache, nén dữ liệu…

Q5: Tại sao web báo lỗi 403 Forbidden?

A5: Kiểm tra quyền thư mục đã đúng user www-data và phân quyền chmod -R 755.

Tổng kết

Việc xây dựng Ubuntu Web Server cần nhiều bước từ cơ bản đến nâng cao, nhưng khi đã nắm được quy trình, bạn sẽ có một môi trường hosting mạnh mẽ và bảo mật.

🚀 Hãy tham khảo bài viết này để xây dựng, tối ưu và bảo mật máy chủ web Ubuntu một cách chuyên nghiệp! 🚀

侍エンジニア塾