Skip to content

Lỗi 502 Bad Gateway

Giới thiệu

Lỗi 502 Bad Gateway là một mã trạng thái HTTP cho biết rằng một máy chủ (thường là reverse proxy hoặc gateway) đã nhận được phản hồi không hợp lệ từ máy chủ upstream mà nó đang cố gắng truy cập.

Nguyên nhân phổ biến

1. Server Backend không phản hồi

  • Application server (PHP-FPM, Node.js, Python) bị crash hoặc không chạy
  • Database server không kết nối được
  • Timeout khi xử lý request

2. Vấn đề với Reverse Proxy

  • Nginx hoặc Apache cấu hình sai upstream
  • Timeout settings quá ngắn
  • Buffer size không đủ

3. Tài nguyên hệ thống

  • RAM đã hết
  • CPU overload
  • Disk space đầy

4. Network Issues

  • Firewall chặn kết nối
  • DNS không phân giải đúng
  • Port không mở

Cách khắc phục

Kiểm tra Application Server

Qua FlashPanel (Khuyên dùng)

  1. Vào FlashPanel
  2. Chọn Server của bạn
  3. Vào tab Applications
  4. Kiểm tra trạng thái trong danh sách ứng dụng:
    • Active: Ứng dụng đang chạy bình thường
    • Inactive: Ứng dụng đã dừng hoặc có vấn đề
  5. Nếu trạng thái là Inactive, click vào ứng dụng để xem chi tiết và khởi động lại

Qua Command Line

PHP-FPM

bash
# Kiểm tra trạng thái PHP-FPM
sudo systemctl status php8.2-fpm
sudo systemctl status php-fpm

# Xem logs
sudo tail -f /var/log/php8.2-fpm.log
sudo tail -f /var/log/php-fpm/error.log

# Restart service
sudo systemctl restart php8.2-fpm

Node.js / PM2

bash
# Kiểm tra processes
pm2 list
pm2 status

# Xem logs
pm2 logs

# Restart
pm2 restart all

Kiểm tra Nginx

Qua FlashPanel (Khuyên dùng)

  1. Truy cập vào site của bạn trong FlashPanel
  2. Vào tab Nginx
  3. Bấm vào nút Error Log để xem error log
  4. Kiểm tra các lỗi liên quan đến upstream connections hoặc timeouts

Qua Command Line

bash
# Test cấu hình
sudo nginx -t

# Xem logs
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/access.log

# Restart Nginx
sudo systemctl restart nginx

Cấu hình Nginx timeout

nginx
http {
    # Tăng timeout settings
    proxy_connect_timeout 600;
    proxy_send_timeout 600;
    proxy_read_timeout 600;
    send_timeout 600;
    
    # Tăng buffer size
    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;
}

server {
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_read_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_connect_timeout 300;
    }
}

Kiểm tra tài nguyên hệ thống

bash
# Kiểm tra RAM
free -h

# Kiểm tra CPU
top
htop

# Kiểm tra disk space
df -h

# Kiểm tra processes
ps aux | grep php-fpm
ps aux | grep nginx
ps aux | grep node

Kiểm tra kết nối

bash
# Test kết nối đến upstream
telnet localhost 9000  # PHP-FPM
telnet localhost 3000  # Node.js app

# Kiểm tra port đang lắng nghe
sudo netstat -tulpn | grep LISTEN
sudo ss -tulpn | grep LISTEN

# Test DNS
nslookup domain.com
dig domain.com

Debug Laravel Application

Kiểm tra Laravel logs

bash
tail -f storage/logs/laravel.log

Tăng PHP memory limit

ini
# php.ini
memory_limit = 512M
max_execution_time = 300

Kiểm tra PHP-FPM pool config

ini
; /etc/php/8.2/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500

Checklist nhanh

  1. ✅ Kiểm tra application server đang chạy
  2. ✅ Kiểm tra logs (nginx, php-fpm, application)
  3. ✅ Kiểm tra tài nguyên hệ thống (RAM, CPU, Disk)
  4. ✅ Kiểm tra cấu hình timeout
  5. ✅ Kiểm tra kết nối network
  6. ✅ Restart các services cần thiết

Tools hữu ích

  • htop: Monitor CPU và RAM real-time
  • iotop: Monitor disk I/O
  • nethogs: Monitor bandwidth per process
  • tcpdump: Analyze network traffic
  • strace: Debug system calls
  • lsof: List open files và network connections