❤️ AZDIGI chính thức cập nhật hệ thống blog mới hoàn chỉnh. Tuy nhiên có thể một số bài viết bị sai lệch hình ảnh, hãy ấn nút Báo cáo bài viết ở cuối bài để AZDIGI cập nhật trong thời gian nhanh nhất. Chân thành cám ơn.
Bạn đang truy cập website bình thường rồi bất ngờ gặp dòng chữ “504 Gateway Timeout”? Lỗi này khá phổ biến và thường khiến người dùng lẫn quản trị viên bối rối vì không biết vấn đề nằm ở đâu. Trong bài viết này, mình sẽ giải thích lỗi 504 là gì, tại sao nó xảy ra, và hướng dẫn bạn từng bước để khắc phục.

504 Gateway Timeout là gì?
504 Gateway Timeout là một mã trạng thái HTTP thuộc nhóm 5xx (lỗi phía server). Lỗi này xảy ra khi một máy chủ đóng vai trò gateway hoặc proxy không nhận được phản hồi kịp thời từ máy chủ gốc (upstream server).
Nói cho dễ hiểu: trình duyệt của bạn gửi yêu cầu đến server A (ví dụ Nginx hoặc CDN). Server A chuyển tiếp yêu cầu đến server B (ví dụ PHP-FPM, Apache, hoặc một API backend). Nếu server B xử lý quá lâu hoặc không phản hồi, server A sẽ trả về lỗi 504 cho trình duyệt.
Theo định nghĩa chính thức từ IETF (RFC 7231): “The 504 (Gateway Timeout) status code indicates that the server, while acting as a gateway or proxy, did not receive a timely response from an upstream server it needed to access in order to complete the request.” Hiểu đơn giản, mỗi web server đều có một ngưỡng thời gian chờ (timeout). Nếu vượt quá ngưỡng đó mà chưa nhận được dữ liệu, server sẽ trả về lỗi 504 thay vì bắt trình duyệt chờ mãi.
Lỗi 504 khác với lỗi 502 Bad Gateway. Với 502, server A nhận được phản hồi nhưng phản hồi đó không hợp lệ hoặc bị lỗi. Còn với 504, server A hoàn toàn không nhận được phản hồi nào trong thời gian cho phép. Hai lỗi này dù cùng nhóm 5xx nhưng hướng xử lý khác nhau: 502 thường liên quan đến lỗi cấu hình hoặc crash backend, còn 504 liên quan đến timeout và hiệu năng.
Trên trình duyệt, lỗi này có thể hiển thị dưới nhiều dạng:
- 504 Gateway Timeout
- 504 Gateway Time-out – The server didn’t respond in time
- HTTP Error 504
- This page isn’t working – took too long to respond
- A blank white page (một số trường hợp Nginx trả về trang trắng)
Nguyên nhân gây ra lỗi 504 Gateway Timeout

Có khá nhiều nguyên nhân dẫn đến lỗi 504. Dưới đây là những trường hợp phổ biến nhất:
PHP xử lý quá chậm: Nếu website chạy WordPress hoặc các ứng dụng PHP, mà một script PHP chạy quá lâu (vượt quá max_execution_time), server sẽ không kịp trả kết quả cho gateway. Chỗ này hay gặp khi chạy import dữ liệu lớn, backup database, cập nhật hàng loạt sản phẩm WooCommerce, hoặc plugin nặng chạy tác vụ nền.
Truy vấn database chậm: Khi database MySQL/MariaDB phải xử lý các query phức tạp hoặc bảng dữ liệu quá lớn chưa được tối ưu, thời gian phản hồi sẽ tăng lên đáng kể. Ví dụ, một bảng wp_postmeta với hàng triệu row mà không có index phù hợp có thể khiến mỗi lần load trang mất vài giây. Nếu cộng dồn nhiều query chậm, tổng thời gian xử lý vượt quá timeout và lỗi 504 sẽ xuất hiện.
DNS timeout: Hệ thống DNS không phân giải được tên miền đúng cách hoặc phản hồi quá chậm, khiến gateway không tìm được server gốc để chuyển tiếp yêu cầu. Trường hợp này ít phổ biến hơn nhưng vẫn xảy ra, đặc biệt khi bạn vừa thay đổi DNS mà chưa propagate xong.
CDN hoặc proxy gặp sự cố: Nếu bạn dùng Cloudflare hoặc dịch vụ CDN/proxy khác, lỗi 504 có thể đến từ phía CDN khi nó không kết nối được với server gốc. Cloudflare có timeout mặc định là 100 giây cho gói Free, 15 phút cho gói Enterprise. Nếu server gốc phản hồi chậm hơn mức này, Cloudflare sẽ trả về 504.
Server quá tải: Lượng truy cập tăng đột biến, tấn công DDoS, hoặc đơn giản là cấu hình server không đủ tài nguyên (CPU, RAM) để xử lý số lượng request hiện tại. Khi CPU đạt 100% hoặc RAM hết, PHP-FPM không thể spawn thêm worker process, và các request mới sẽ phải xếp hàng chờ cho đến khi timeout.
Firewall chặn nhầm: Tường lửa trên server (iptables, CSF, ModSecurity) có thể chặn nhầm kết nối từ CDN hoặc proxy. Ví dụ, CSF phát hiện nhiều kết nối cùng lúc từ IP range của Cloudflare và tưởng là tấn công, nên tự động block. Kết quả là gateway không nhận được phản hồi từ server gốc.
Cấu hình timeout không đồng bộ: Một điểm hay bị bỏ qua là các lớp trong hệ thống có timeout khác nhau. Ví dụ Nginx timeout 60 giây nhưng PHP-FPM cần 90 giây để hoàn thành. Nginx sẽ trả về 504 trước khi PHP kịp xử lý xong. Quy tắc cần nhớ: timeout của lớp phía trước luôn phải lớn hơn hoặc bằng lớp phía sau.
Cách 1: Reload trang và kiểm tra trạng thái server

Việc đầu tiên cần làm khi gặp lỗi 504 là thử reload lại trang. Nhiều trường hợp lỗi chỉ xảy ra tạm thời do server đang bận xử lý một tác vụ nặng (backup, cron job), và sau vài giây mọi thứ trở lại bình thường.
Nhấn F5 hoặc Ctrl + F5 (hard reload, bỏ qua cache trình duyệt) để thử lại. Nếu vẫn lỗi, hãy thử mở trang từ trình duyệt khác hoặc dùng điện thoại để xác nhận lỗi không phải do mạng cá nhân của bạn.
Bạn cũng nên kiểm tra xem website có đang bị lỗi với tất cả mọi người hay chỉ mình bạn. Dùng các công cụ online như downforeveryoneorjustme.com hoặc isitdownrightnow.com để kiểm tra nhanh.
Nếu bạn là quản trị viên server, hãy SSH vào và kiểm tra nhanh:
# Kiểm tra server có phản hồi không
ping yourdomain.com
# Kiểm tra web server đang chạy không
systemctl status nginx
systemctl status apache2
# Kiểm tra PHP-FPM
systemctl status php8.2-fpm
# Xem tài nguyên server (CPU, RAM)
top -bn1 | head -20
# Kiểm tra error log
tail -50 /var/log/nginx/error.log
Trong error log của Nginx, nếu bạn thấy dòng kiểu:
upstream timed out (110: Connection timed out) while reading response header from upstream
Dòng này xác nhận rằng Nginx đã chờ PHP-FPM (hoặc backend) quá lâu mà không nhận được phản hồi. Từ đây bạn biết hướng xử lý là tối ưu backend hoặc tăng timeout.
Nếu thấy Nginx hoặc PHP-FPM đã dừng, restart lại dịch vụ:
# Restart Nginx
systemctl restart nginx
# Restart PHP-FPM
systemctl restart php8.2-fpm
Với người dùng hosting tại AZDIGI, bạn có thể vào cPanel hoặc DirectAdmin để kiểm tra thông tin tài nguyên, hoặc liên hệ đội ngũ kỹ thuật qua live chat để được hỗ trợ nhanh.
Cách 2: Tắt CDN/proxy tạm thời

Nếu website đang dùng Cloudflare hoặc một dịch vụ CDN/reverse proxy, lỗi 504 có thể đến từ lớp trung gian này. Cách nhanh nhất để xác định là tạm tắt CDN và truy cập trực tiếp vào server gốc.
Với Cloudflare:
- Đăng nhập vào Cloudflare Dashboard
- Vào phần DNS, chuyển icon đám mây cam sang xám (DNS Only) cho record A/CNAME
- Chờ 1-2 phút cho DNS cập nhật, rồi thử truy cập lại website
Hoặc bạn có thể bypass CDN bằng cách sửa file hosts trên máy tính, trỏ domain thẳng về IP server:
# Trên Windows: C:\Windows\System32\drivers\etc\hosts
# Trên macOS/Linux: /etc/hosts
# Thêm dòng này (thay IP và domain thực tế)
103.x.x.x yourdomain.com
Nếu trang load bình thường khi bỏ CDN, vấn đề nằm ở lớp CDN/proxy. Lúc này bạn cần kiểm tra:
- Cloudflare có đang chặn IP server không (kiểm tra mục Security > Events)
- SSL mode có đúng không (nên dùng Full hoặc Full Strict, tránh dùng Flexible)
- Server gốc có chặn IP range của Cloudflare không (whitelist IP Cloudflare trong CSF hoặc iptables)
- Kiểm tra trang cloudflarestatus.com xem Cloudflare có đang gặp sự cố toàn cầu không
Nếu website không dùng CDN mà vẫn bị lỗi 504, bạn có thể bỏ qua bước này và chuyển sang kiểm tra cấu hình timeout phía dưới.
Cách 3: Tăng PHP max_execution_time và timeout

Nhiều trường hợp lỗi 504 xảy ra vì PHP script chạy quá lâu, vượt quá giới hạn timeout. Giải pháp là tăng các giá trị timeout ở cả PHP lẫn web server. Lưu ý rằng bạn cần tăng đồng bộ ở tất cả các lớp (PHP, web server, proxy) để tránh xung đột.
Tăng timeout trong PHP (php.ini):
# Tìm file php.ini đang dùng
php -i | grep "Loaded Configuration File"
# Sửa file php.ini, tìm và thay đổi 2 dòng này
max_execution_time = 300
max_input_time = 300
Giá trị 300 nghĩa là 300 giây (5 phút). Mặc định PHP đặt max_execution_time = 30, khá thấp cho các tác vụ nặng. Bạn có thể tăng lên 120 hoặc 300 tùy nhu cầu.
Nếu dùng hosting có cPanel, bạn vào MultiPHP INI Editor để sửa mà không cần SSH. Chọn domain, tìm max_execution_time và đổi giá trị.
Tăng timeout trong Nginx:
# Thêm vào block http hoặc server trong nginx.conf
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;
# Nếu dùng FastCGI (PHP-FPM)
fastcgi_read_timeout 300;
Tăng timeout trong Apache:
# Thêm vào httpd.conf hoặc .htaccess
Timeout 300
ProxyTimeout 300
Tăng timeout cho PHP-FPM:
# Sửa file pool config, thường ở /etc/php/8.2/fpm/pool.d/www.conf
request_terminate_timeout = 300
Sau khi sửa xong, nhớ restart lại tất cả dịch vụ liên quan:
# Restart Nginx
systemctl restart nginx
# Restart Apache
systemctl restart apache2
# Restart PHP-FPM
systemctl restart php8.2-fpm
Lưu ý: Tăng timeout chỉ là giải pháp tạm. Nếu script PHP thường xuyên chạy lâu hơn 60 giây, bạn nên tìm và tối ưu phần code gây chậm thay vì cứ tăng timeout mãi. Timeout quá cao cũng khiến server dễ bị treo khi có nhiều request đồng thời, vì mỗi request giữ một PHP worker lâu hơn bình thường.
Cách 4: Kiểm tra database và tối ưu WordPress

Database chậm là một trong những nguyên nhân phổ biến nhất gây lỗi 504 trên WordPress. Khi database phải xử lý quá nhiều truy vấn nặng hoặc bảng dữ liệu bị phình to, mỗi request đều mất thêm thời gian, và khi tổng thời gian vượt timeout, lỗi 504 sẽ xảy ra.
Bật query log để tìm truy vấn chậm:
# Thêm vào wp-config.php để ghi log query chậm
define('SAVEQUERIES', true);
# Hoặc bật slow query log trong MySQL/MariaDB
# Thêm vào my.cnf (thường ở /etc/mysql/my.cnf)
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2
Sau khi bật slow query log, chờ một thời gian rồi kiểm tra file log. Các query chạy lâu hơn 2 giây sẽ được ghi lại, giúp bạn biết chính xác query nào cần tối ưu.
Tối ưu database WordPress:
- Xóa post revisions, auto drafts, transients hết hạn bằng plugin WP-Optimize
- Xóa spam comments và trashed posts tích tụ qua thời gian
- Repair và optimize tables qua phpMyAdmin hoặc WP-CLI:
# Tối ưu database bằng WP-CLI
wp db optimize
# Repair tables nếu bị corrupt
wp db repair
# Xóa toàn bộ post revisions
wp post delete $(wp post list --post_type='revision' --format=ids) --force
Kiểm tra plugin gây nặng:
Một số plugin WordPress tạo ra hàng chục truy vấn database mỗi lần load trang. Cách kiểm tra nhanh nhất là tắt hết plugin rồi bật lại từng cái để xác định thủ phạm:
# Tắt tất cả plugin bằng WP-CLI
wp plugin deactivate --all
# Kiểm tra trang có hết lỗi 504 không
# Nếu hết, bật lại từng plugin một
wp plugin activate plugin-name
Nếu không có WP-CLI, bạn có thể đổi tên thư mục wp-content/plugins thành wp-content/plugins_disabled qua File Manager hoặc FTP. WordPress sẽ tự động tắt toàn bộ plugin.
Sử dụng Object Cache:
Nếu server có cài Redis hoặc Memcached, bạn nên bật Object Cache để giảm tải database. Dữ liệu truy vấn thường xuyên sẽ được lưu trong bộ nhớ RAM thay vì phải query MySQL mỗi lần. Điều này giảm đáng kể thời gian xử lý, đặc biệt trên các trang có nhiều dynamic content.
# Kiểm tra Redis đang chạy không
systemctl status redis
# Cài plugin Redis Object Cache trên WordPress
wp plugin install redis-cache --activate
wp redis enable
Nếu bạn đang dùng WordPress Hosting hoặc Business Hosting tại AZDIGI, LiteSpeed Cache và Redis đã được tích hợp sẵn. Bạn chỉ cần kích hoạt plugin LiteSpeed Cache và bật Object Cache trong phần cài đặt là đủ.
Đối với website có lượng truy cập lớn hoặc cần hiệu năng cao hơn, bạn có thể cân nhắc nâng cấp lên Pro Platinum Hosting với tài nguyên CPU, RAM cao hơn và NVMe SSD cho tốc độ đọc/ghi vượt trội.
Câu hỏi thường gặp

Kết luận
Lỗi 504 Gateway Timeout nghe thì phức tạp, nhưng khi đã hiểu bản chất thì việc xử lý không quá khó. Bạn bắt đầu từ bước đơn giản nhất (reload trang, kiểm tra server status) rồi đi sâu dần vào CDN, cấu hình timeout, và tối ưu database.
Nếu bạn gặp lỗi 504 thường xuyên trên WordPress, đa phần nguyên nhân sẽ nằm ở database chưa tối ưu, plugin nặng, hoặc cấu hình timeout quá thấp. Xử lý đúng những điểm này là website sẽ chạy mượt trở lại.
Với server VPS, nhớ kiểm tra cả error log của Nginx/Apache và PHP-FPM log vì chúng thường chỉ thẳng ra nguyên nhân gốc rễ. Còn với shared hosting, cách nhanh nhất là liên hệ nhà cung cấp để họ kiểm tra server-side.
Bạn cũng có thể tham khảo thêm bài Lỗi 500 Internal Server Error và Lỗi 502 Bad Gateway nếu gặp các lỗi server tương tự. Chúc bạn khắc phục thành công!
Có thể bạn cần xem thêm
- Lỗi 502 Bad Gateway: nguyên nhân và cách khắc phục
- Khắc phục lỗi 500 Internal Server Error trên WordPress
- Hướng dẫn cấu hình LiteSpeed Cache cho WordPress đầy đủ trên hosting AZDIGI
- Thiết lập Nginx FastCGI Cache trên NGINX giảm thời gian phản hồi máy chủ
- Hướng dẫn tối ưu WordPress với WP Rocket, Cloudflare APO và Cache Rules
- Cấu hình NGINX FastCGI Cache WordPress trên aaPanel
Về tác giả
Trần Thắng
Chuyên gia tại AZDIGI với nhiều năm kinh nghiệm trong lĩnh vực web hosting và quản trị hệ thống.