Khi học hosting, VPS, WordPress hoặc PHP, bạn sẽ sớm gặp thuật ngữ Apache, thường đi kèm cPanel hoặc một dòng log lỗi khó hiểu. Bài này giải thích rõ Apache là gì, dùng để làm gì, hoạt động ra sao, khác gì Nginx và Tomcat, khi nào nên dùng, kèm cách cài đặt và […]
Khi học hosting, VPS, WordPress hoặc PHP, bạn sẽ sớm gặp thuật ngữ Apache, thường đi kèm cPanel hoặc một dòng log lỗi khó hiểu. Bài này giải thích rõ Apache là gì, dùng để làm gì, hoạt động ra sao, khác gì Nginx và Tomcat, khi nào nên dùng, kèm cách cài đặt và xử lý lỗi thường gặp.
Contents
Apache là phần mềm web server mã nguồn mở, tên đầy đủ là Apache HTTP Server, do Apache Software Foundation duy trì. Apache nhận request HTTP/HTTPS trên một cổng mạng (thường là 80 và 443), rồi trả về nội dung website tương ứng: HTML, CSS, JavaScript, hình ảnh, hoặc dữ liệu do PHP xử lý.
Apache chỉ là phần mềm, được cài lên VPS hoặc cloud server, tương tự cách Nginx hay LiteSpeed cũng có thể cài lên đó. Ba điểm sau hay bị gộp nhầm với Apache:

Apache vẫn phổ biến, nhưng không còn là web server dẫn đầu thị phần. Theo W3Techs, Apache chiếm 23,4% thị phần toàn cầu tính đến tháng 7/2026, trong khi Nginx đã soán ngôi từ năm 2021 và hiện giữ khoảng 32-33%. Khoảng cách này mở rộng dần theo từng năm.
Con số đó không có nghĩa Apache đang bị đào thải, mà có nghĩa thị trường web server đã phân mảnh theo thế mạnh riêng của từng bên:
Đây chính là lý do đáng học Apache không nằm ở thị phần, mà ở xác suất bạn chạm vào nó. Nếu bạn làm web, backend hoặc vận hành hạ tầng tại Việt Nam, khả năng cao bạn sẽ phải đọc log Apache, sửa VirtualHost hoặc gỡ lỗi rewrite URL trên một server nào đó, dù công ty bạn có chọn Apache từ đầu hay không.

Ở dạng cơ bản nhất, Apache phục vụ file tĩnh: HTML, CSS, JavaScript, hình ảnh, file tải xuống. Khi người dùng truy cập example.com/about, Apache tìm file tương ứng trong thư mục cấu hình (DocumentRoot) và trả về nguyên bản, không qua xử lý logic nào thêm.
Apache thường đi cùng PHP và MySQL/MariaDB, tạo thành bộ LAMP: Linux, Apache, MySQL/MariaDB, PHP. Đây là stack phổ biến cho WordPress, website doanh nghiệp nhỏ, blog và landing page, vì được hỗ trợ sẵn trên hầu hết gói shared hosting và cPanel tại Việt Nam.
Apache cũng làm được reverse proxy, chuyển tiếp request đến một ứng dụng backend khác qua mod_proxy, và dùng VirtualHost để chạy nhiều domain trên cùng một server. Ví dụ một server chạy ba domain cùng lúc:
Đây là cách phần lớn shared hosting và VPS nhiều website vận hành cùng lúc mà không cần một server riêng cho từng domain.
Khi trình duyệt gửi request https://example.com/about, Apache xử lý theo trình tự sau:
Với request tới trang tĩnh, bước 5 kết thúc gần như ngay lập tức: Apache đọc file từ đĩa và trả về. Bottleneck (nếu có) nằm ở tốc độ đĩa và số kết nối đồng thời, không nằm ở logic xử lý.

Với WordPress hoặc website PHP, Apache không tự xử lý logic. Apache chuyển request sang PHP, PHP truy vấn database (MySQL/MariaDB) để lấy dữ liệu, dựng HTML, rồi trả kết quả ngược lại cho Apache để gửi về trình duyệt. Tóm gọn bốn bước: Apache nhận request, PHP xử lý logic, database lưu và trả dữ liệu, trình duyệt hiển thị kết quả cuối cùng.
Cách Apache giao tiếp với PHP có hai kiểu phổ biến: qua module mod_php nhúng thẳng vào tiến trình Apache, hoặc qua PHP-FPM chạy như tiến trình riêng biệt. Phần “Ưu điểm và nhược điểm” bên dưới sẽ nói rõ vì sao lựa chọn này ảnh hưởng trực tiếp đến tốc độ site.
Bốn thành phần dưới đây quyết định phần lớn việc Apache chạy đúng hay sai, nhanh hay chậm, an toàn hay lộ dữ liệu:
VirtualHost cho phép một server chạy nhiều website hoặc domain cùng lúc, mỗi domain trỏ tới một thư mục mã nguồn riêng:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example
</VirtualHost>
ServerName khai báo domain, DocumentRoot khai báo thư mục chứa mã nguồn tương ứng. Cấu hình sai VirtualHost, ví dụ trùng ServerName giữa hai khối, là nguyên nhân phổ biến khiến một domain vô tình hiển thị nội dung của domain khác.

Apache mở rộng tính năng qua module thay vì sửa lõi. Bốn module hay dùng nhất:
mod_ssl: hỗ trợ HTTPS.mod_rewrite: rewrite URL, WordPress permalink phụ thuộc module này.mod_proxy: reverse proxy.mod_headers: cấu hình HTTP header bảo mật.Chỉ bật module thật sự cần, vì mỗi module đang chạy là một bề mặt tấn công tiềm ẩn thêm.
.htaccess cho phép cấu hình theo từng thư mục mà không cần sửa file config chính. Nhờ vậy, .htaccess phổ biến trên shared hosting, nơi người dùng không có quyền truy cập cấu hình gốc. WordPress dùng .htaccess để rewrite URL đẹp (permalink).
Tiện lợi này có mặt trái: mỗi request tới thư mục có .htaccess, Apache phải đọc lại file đó từ đĩa, tốn thêm một vòng I/O so với cấu hình đặt thẳng trong file chính. Trên site tải cao hoặc có quyền truy cập server, chuyển nội dung .htaccess vào cấu hình VirtualHost chính giúp giảm độ trễ.
Apache ghi hai loại log quan trọng: access log ghi lại mọi request truy cập, error log ghi lại lỗi phát sinh. Khi website báo lỗi 403, 404, 500, hoặc rewrite không hoạt động, error log là nơi cần kiểm tra đầu tiên, trước khi đoán nguyên nhân hoặc tìm kiếm ngẫu nhiên trên mạng.
Apache ra đời từ năm 1995 và vẫn giữ được vị trí quan trọng sau hơn ba thập kỷ nhờ những điểm mạnh cụ thể:
Phần lớn nhược điểm dưới đây là vấn đề cấu hình có thể sửa, không phải giới hạn cố định của phần mềm:
|
Tiêu chí |
Apache |
Nginx |
|
Bản chất |
Web server linh hoạt, mạnh về module |
Web server/reverse proxy mạnh về xử lý nhiều kết nối |
|
.htaccess |
Có hỗ trợ |
Không dùng theo kiểu Apache |
|
Static file |
Tốt |
Rất mạnh |
|
Reverse proxy |
Có hỗ trợ |
Rất phổ biến |
|
PHP/WordPress |
Phổ biến, dễ gặp trên hosting |
Thường dùng với PHP-FPM |
|
Phù hợp |
Shared hosting, WordPress, PHP, cần .htaccess |
Traffic cao, static file, reverse proxy, microservices |
Khoảng cách hiệu năng giữa hai bên phụ thuộc loại tải, không cố định. Với static file và số kết nối đồng thời lớn, Nginx dùng kiến trúc event-driven nên một worker xử lý được hàng nghìn kết nối cùng lúc mà không cần tạo thêm tiến trình hay luồng, trong khi Apache theo kiến trúc process/thread-per-connection truyền thống tốn RAM hơn khi tải tăng. Với nội dung động qua PHP-FPM, khoảng cách này thu hẹp đáng kể so với khi Apache chạy mod_php mặc định, theo phân tích của DeployHQ.
Nói cách khác, câu hỏi đúng không phải “Apache hay Nginx nhanh hơn”, mà là “tải của bạn thiên về static file/kết nối đồng thời (chọn Nginx) hay thiên về logic PHP/cần .htaccess cho shared hosting (chọn Apache)”. Nhiều hệ thống dùng cả hai: Nginx đứng trước làm reverse proxy và phục vụ static file, Apache đứng sau xử lý PHP hoặc website legacy.
|
Tiêu chí |
Apache HTTP Server |
Apache Tomcat |
|
Bản chất |
Web server |
Servlet container / application server nhẹ |
|
Thường dùng cho |
Website tĩnh, PHP, WordPress, reverse proxy |
Ứng dụng Java Servlet/JSP |
|
Hệ sinh thái |
Web hosting, LAMP, PHP |
Java web application |
|
Có thay thế nhau hoàn toàn không? |
Không |
Không |
Cả hai đều thuộc Apache Software Foundation và đều mang chữ “Apache” trong tên, đây là nguồn gốc của phần lớn nhầm lẫn giữa hai dự án. Nhưng chúng giải quyết bài toán khác nhau: Apache HTTP Server phục vụ website tĩnh, PHP, WordPress; Apache Tomcat chạy ứng dụng Java Servlet/JSP. Một website WordPress dùng Apache HTTP Server, một ứng dụng Java doanh nghiệp dùng Tomcat, còn ứng dụng Spring Boot hiện đại thường có embedded server riêng, với Apache hoặc Nginx chỉ đứng trước làm reverse proxy.
Bảy tình huống dưới đây phù hợp với Apache:
Ngược lại, sáu tình huống sau nên cân nhắc Nginx, LiteSpeed hoặc Caddy thay vì Apache:
Việc cài Apache gồm ba bước: cài package đúng với hệ điều hành đang dùng, để service tự khởi động cùng máy, và kiểm tra lại xem Apache đã thực sự chạy chưa. Bỏ qua bước kiểm tra cuối là lý do phổ biến nhất khiến người cài tưởng đã xong nhưng web vẫn không truy cập được.
Chạy lần lượt bốn lệnh sau, mỗi lệnh làm đúng một việc:
sudo apt update: cập nhật danh sách package mới nhất từ kho phần mềm, nên chạy trước để tránh cài bản Apache cũ.sudo apt install apache2 -y: cài Apache, cờ -y để tự động xác nhận “yes” khi được hỏi, không cần gõ tay.sudo systemctl enable apache2: đặt Apache tự khởi động mỗi khi server khởi động lại, không cần bật tay lần sau.sudo systemctl start apache2: khởi động Apache ngay lập tức.Chạy đủ bốn lệnh này không có nghĩa là xong, vì lệnh chạy không báo lỗi chưa chắc Apache đã hoạt động đúng. Bước “Kiểm tra Apache đã chạy chưa” bên dưới mới là bước xác nhận thật.

Trên các bản phân phối họ RHEL (CentOS, RHEL, Rocky Linux, AlmaLinux), package và service Apache đều mang tên httpd thay vì apache2. Đây là điểm dễ gây nhầm nếu quen dùng Ubuntu trước đó: cùng là “cài Apache” nhưng tên lệnh khác hẳn.
sudo dnf install httpd -y
sudo systemctl enable httpd
sudo systemctl start httpd
Ba lệnh này làm đúng ba việc tương ứng với bản Ubuntu ở trên: cài package httpd, đặt tự khởi động cùng hệ thống, và khởi động ngay. Riêng bước apt update không cần vì dnf (trình quản lý package của RHEL) tự kiểm tra bản mới nhất khi cài.
Đây là bước xác nhận cài đặt thành công, nên làm ngay sau khi cài thay vì bỏ qua. Cách nhanh nhất là kiểm tra service trước, rồi thử gọi request từ chính server, cuối cùng mới truy cập từ bên ngoài để chắc chắn.
Trước tiên, kiểm tra xem service Apache có đang chạy không:
systemctl status apache2
# hoặc, nếu dùng CentOS/RHEL:
systemctl status httpd
Kết quả trả về có dòng Active:, đây là dòng cần nhìn vào. Nếu thấy active (running) màu xanh, Apache đã chạy đúng, có thể sang bước tiếp theo. Nếu thấy failed hoặc inactive, Apache chưa khởi động được, và bước xem log lỗi bằng journalctl -xe sẽ cho biết nguyên nhân cụ thể trước khi thử lại.
Khi service đã chạy, gọi thử một request ngay từ server để xem Apache có phản hồi không:
curl http://localhost
Nếu lệnh này trả về một đoạn mã HTML, thường là trang mặc định của Apache, nghĩa là Apache đang lắng nghe và phản hồi đúng trên máy local. Đây là dấu hiệu tốt, nhưng vẫn chưa xác nhận được người dùng bên ngoài có truy cập được hay không.
Bước cuối là mở trình duyệt trên máy tính cá nhân và nhập địa chỉ IP của server, ví dụ http://123.45.67.89. Nếu thấy trang mặc định “Apache2 Default Page” hoặc tương tự, server đã cài đặt và mở cổng thành công.
Trường hợp hai bước đầu đều báo Apache đang chạy tốt, nhưng bước cuối lại không truy cập được từ bên ngoài, nguyên nhân gần như chắc chắn nằm ở firewall hoặc security group của nhà cung cấp VPS/cloud đang chặn cổng 80/443, chứ không phải do Apache. Đây cũng là nguyên nhân phổ biến nhất khiến người mới cài tưởng mình đã làm sai, trong khi Apache đã chạy đúng ngay từ đầu và chỉ cần mở cổng tường lửa là xong.
Phần lớn lỗi Apache có một điểm chung: nguyên nhân thật thường nằm trong error log, không phải trong phỏng đoán ban đầu. Vì vậy trước khi sửa bất kỳ file cấu hình nào, hãy đọc kỹ thông báo lỗi và mở error log để xác định đúng chỗ hỏng, tránh sửa nhầm sang phần không liên quan.

Lỗi này thường xuất hiện ngay khi khởi động Apache lần đầu, với thông báo dạng “Address already in use”. Nghĩa là một chương trình khác đã chiếm cổng 80 hoặc 443 trước khi Apache kịp dùng. Ba nguyên nhân thường gặp:
Kiểm tra chương trình nào đang chiếm cổng bằng lệnh sau:
sudo lsof -i :80
sudo lsof -i :443
Kết quả trả về sẽ hiện tên chương trình đang dùng cổng đó (cột COMMAND) và mã tiến trình (cột PID). Nếu là chương trình không cần thiết, dừng nó bằng sudo systemctl stop <tên-service> rồi khởi động lại Apache. Nếu là Nginx và bạn cần dùng cả hai, đổi Apache sang cổng khác (ví dụ 8080) trong file cấu hình VirtualHost thay vì tắt hẳn Nginx.
Lỗi 403 Forbidden nghĩa là Apache đã nhận được request nhưng từ chối trả nội dung, thường vì một trong bốn nguyên nhân sau:
Cách xử lý nhanh nhất là mở error log trước, thường nằm ở /var/log/apache2/error.log trên Ubuntu hoặc /var/log/httpd/error_log trên CentOS, để xem dòng lỗi cụ thể thay vì đoán. Sau khi biết đúng nguyên nhân, kiểm tra quyền thư mục bằng lệnh ls -la tại đúng đường dẫn website. Đa số trường hợp chỉ cần sửa lại quyền thư mục về đúng user chạy Apache, thường là www-data trên Ubuntu, là lỗi biến mất.
Đây là lỗi chung chung nhất, Apache dùng khi có sự cố nhưng không xác định được lỗi cụ thể là gì. Bốn nguyên nhân thường gặp:
Vì lỗi 500 quá chung chung để đoán, luôn mở error log trước tiên. Error log sẽ chỉ đúng dòng code hoặc file cấu hình gây lỗi, giúp tiết kiệm thời gian thay vì thử sửa từng khả năng một.
Rewrite URL không hoạt động
Lỗi này thường gặp khi cấu hình permalink đẹp cho WordPress (ví dụ example.com/bai-viet thay vì example.com/?p=123) nhưng URL vẫn báo lỗi 404. Ba nguyên nhân chính:
Trên Ubuntu, bật module rewrite bằng hai lệnh sau, sau đó restart Apache để cấu hình có hiệu lực:
sudo a2enmod rewrite
sudo systemctl restart apache2
Mười hai điểm sau nên kiểm tra định kỳ, không chỉ một lần lúc cài đặt:

Tóm lại, chọn Apache khi bạn chạy WordPress, PHP truyền thống, cần .htaccess hoặc dùng shared hosting/cPanel, những nơi Apache vẫn là mặc định và có cộng đồng hỗ trợ lớn nhất. Cân nhắc Nginx, LiteSpeed hoặc Caddy khi hệ thống cần xử lý lượng kết nối đồng thời rất cao hoặc reverse proxy tối ưu.
Với VPS, WordPress hoặc PHP, Apache vẫn là lựa chọn đáng hiểu và đáng dùng.
Có. Apache HTTP Server là phần mềm mã nguồn mở, miễn phí hoàn toàn, do Apache Software Foundation duy trì và không thu phí license.
Không. Apache là phần mềm web server chạy trên server, còn hosting là dịch vụ hoặc môi trường lưu trữ cung cấp server đó cho bạn thuê.
Có. Apache là lựa chọn phổ biến để chạy WordPress, thường kết hợp với PHP và MySQL/MariaDB trong bộ LAMP. Nên dùng PHP-FPM thay vì mod_php để tối ưu hiệu năng.
Không. Apache HTTP Server là web server phục vụ website tĩnh/PHP, còn Apache Tomcat là servlet container dùng cho ứng dụng Java Servlet/JSP, hai hệ sinh thái khác nhau.
Không có câu trả lời tuyệt đối. Apache phù hợp với PHP, WordPress, .htaccess, shared hosting. Nginx phù hợp với reverse proxy, static file và hệ thống nhiều kết nối đồng thời, theo benchmark của DeployHQ.
Có, nếu use case phù hợp. Apache vẫn đáng dùng cho WordPress, PHP, shared hosting, VPS cá nhân và hệ thống cần .htaccess, miễn là cấu hình PHP-FPM và MPM Event thay vì mặc định cũ.