Chuyển tới nội dung chính

aaPanel: Khắc Phục Lỗi 502 Bad Gateway

Giới Thiệu

Lỗi 502 Bad Gateway là một trong những sự cố phổ biến nhất mà người dùng có thể gặp phải khi vận hành máy chủ web. Trong môi trường aaPanel, lỗi này thường xuất hiện khi Nginx hoặc Apache (hoạt động như một proxy) không nhận được phản hồi hợp lệ từ máy chủ ngược dòng, mà trong hầu hết các trường hợp chính là PHP-FPM. Điều này có nghĩa là trang web của bạn không thể hiển thị nội dung, gây ảnh hưởng nghiêm trọng đến trải nghiệm người dùng và hoạt động kinh doanh.

Bài viết này sẽ hướng dẫn bạn từng bước cách chẩn đoán và khắc phục lỗi 502 Bad Gateway trên aaPanel, giúp bạn đưa website trở lại hoạt động bình thường một cách nhanh chóng.

📋 Thời gian: 15-30 phút | Độ khó: Cơ bản/Trung bình

Yêu Cầu

Để thực hiện theo hướng dẫn này, bạn cần có:

  • Quyền truy cập vào bảng điều khiển aaPanel của bạn.
  • Quyền truy cập SSH vào máy chủ của bạn (root hoặc người dùng có quyền sudo).
  • Kiến thức cơ bản về lệnh Linux và cách điều hướng hệ thống file.

Các Bước Thực Hiện

Lỗi 502 Bad Gateway thường xuất phát từ các vấn đề liên quan đến PHP-FPM, Nginx/Apache, hoặc tài nguyên hệ thống. Chúng ta sẽ kiểm tra từng phần một.

Bước 1: Kiểm Tra Trạng Thái Dịch Vụ PHP-FPM

PHP-FPM là thành phần xử lý các yêu cầu PHP. Nếu nó không chạy hoặc bị quá tải, Nginx/Apache sẽ không thể nhận được phản hồi, dẫn đến lỗi 502.

  1. Kiểm tra qua aaPanel GUI:

    • Đăng nhập vào aaPanel.
    • Đi tới mục "App Store" (Cửa hàng ứng dụng).
    • Tìm phiên bản PHP mà trang web của bạn đang sử dụng (ví dụ: PHP-7.4).
    • Nhấp vào "Settings" (Cài đặt) bên cạnh phiên bản PHP đó.
    • Kiểm tra trạng thái dịch vụ. Nếu nó không chạy, hãy nhấp vào "Restart" (Khởi động lại).
  2. Kiểm tra và khởi động lại qua SSH:

    • Kết nối SSH vào máy chủ của bạn.
    • Xác định phiên bản PHP bạn đang sử dụng. Bạn có thể kiểm tra trong aaPanel hoặc trong file cấu hình trang web.
    • Kiểm tra trạng thái dịch vụ PHP-FPM:
      # Thay thế 'XX' bằng phiên bản PHP của bạn, ví dụ: php-7.4
      systemctl status php-fpm-XX.service
      # Hoặc đối với một số hệ thống cũ hơn
      service php-fpm-XX status
    • Nếu dịch vụ không hoạt động hoặc gặp lỗi, hãy thử khởi động lại:
      # Thay thế 'XX' bằng phiên bản PHP của bạn
      systemctl restart php-fpm-XX.service
      # Hoặc
      service php-fpm-XX restart
    • ✅ Sau khi khởi động lại, hãy kiểm tra lại trạng thái. Nếu dịch vụ chạy thành công, hãy thử truy cập trang web của bạn.

Bước 2: Kiểm Tra Trạng Thái Dịch Vụ Nginx/Apache

Mặc dù Nginx/Apache ít khi là nguyên nhân trực tiếp gây ra lỗi 502 (thường thì nó sẽ báo lỗi 500 hoặc không thể kết nối), nhưng việc khởi động lại có thể giải quyết các vấn đề cấu hình tạm thời hoặc kết nối.

  1. Kiểm tra qua aaPanel GUI:

    • Trong "App Store", tìm Nginx hoặc Apache (tùy thuộc vào bạn đang sử dụng dịch vụ nào).
    • Nhấp vào "Settings" và kiểm tra trạng thái.
    • Nếu cần, nhấp vào "Restart" (Khởi động lại).
  2. Kiểm tra và khởi động lại qua SSH:

    # Đối với Nginx
    systemctl status nginx
    systemctl restart nginx

    # Đối với Apache
    systemctl status httpd
    systemctl restart httpd
    • ✅ Sau khi khởi động lại, hãy kiểm tra lại trang web.

Bước 3: Kiểm Tra Log Lỗi

Log lỗi là nguồn thông tin quý giá để xác định nguyên nhân gốc rễ của sự cố.

  1. Log Nginx/Apache:

    • Nginx: /www/wwwlogs/error.log hoặc www/wwwlogs/your_domain.com.error.log
    • Apache: /www/wwwlogs/apache_error.log hoặc /var/log/httpd/error_log
    • Sử dứng lệnh tail để xem các lỗi gần đây:
      # Ví dụ cho Nginx
      tail -f /www/wwwlogs/your_domain.com.error.log
      # Ví dụ cho PHP-FPM
      tail -f /www/server/php/XX/var/log/php-fpm.log
    • 💡 Mẹo: Khi xem log, hãy tìm kiếm các từ khóa như "upstream prematurely closed connection", "connect() failed (111: Connection refused)", "No such file or directory", hoặc "out of memory".
  2. Log PHP-FPM:

    • Thường nằm ở /www/server/php/XX/var/log/php-fpm.log (thay XX bằng phiên bản PHP).
    • Kiểm tra log này để xem liệu PHP-FPM có gặp lỗi bộ nhớ, lỗi cấu hình, hoặc lỗi phân tích cú pháp nào không.

Bước 4: Tăng Cấu Hình PHP-FPM (Nếu Lỗi Do Thiếu Tài Nguyên)

Nếu log PHP-FPM báo lỗi "out of memory" hoặc "child process exited", có thể PHP-FPM đang bị quá tải hoặc thiếu tài nguyên.

  1. Qua aaPanel GUI:

    • Đi tới "App Store" -> PHP-XX -> "Settings".
    • Chọn "Performance Tuning" (Điều chỉnh hiệu suất).
    • Tăng các giá trị sau một cách thận trọng:
      • pm.max_children: Số lượng tiến trình con PHP-FPM tối đa.
      • pm.start_servers: Số lượng tiến trình con khởi động ban đầu.
      • pm.min_spare_servers: Số lượng tiến trình con nhàn rỗi tối thiểu.
      • pm.max_spare_servers: Số lượng tiến trình con nhàn rỗi tối đa.
      • memory_limit: Giới hạn bộ nhớ cho mỗi script PHP (thường trong php.ini, có thể truy cập qua "Configuration File").
    • ⚠️ Cảnh báo: Tăng quá nhiều có thể làm cạn kiệt tài nguyên máy chủ. Hãy tăng dần và theo dõi.
    • Sau khi thay đổi, đừng quên "Restart" (Khởi động lại) dịch vụ PHP-FPM.
  2. Kiểm tra tài nguyên hệ thống:

    • Sử dụng lệnh top hoặc free -h qua SSH để kiểm tra mức sử dụng CPU và RAM của máy chủ. Nếu tài nguyên luôn ở mức cao, bạn có thể cần nâng cấp gói máy chủ hoặc tối ưu hóa ứng dụng của mình.
    • Kiểm tra dung lượng đĩa: df -h. Đĩa đầy cũng có thể khiến các dịch vụ không hoạt động đúng cách.

Bước 5: Kiểm Tra Cấu Hình Website và PHP Version

Đôi khi, lỗi 502 có thể do cấu hình PHP không tương thích với trang web hoặc một sự cố trong cấu hình proxy của Nginx/Apache.

  1. Kiểm tra phiên bản PHP của trang web:

    • Trong aaPanel, đi tới "Website".
    • Nhấp vào "Settings" (Cài đặt) của trang web bị lỗi.
    • Kiểm tra "PHP Version" (Phiên bản PHP) đang được sử dụng. Đảm bảo nó là phiên bản đã được cài đặt và đang hoạt động ổn định. Thử chuyển sang một phiên bản PHP khác (nếu có) để kiểm tra xem lỗi có biến mất không.
  2. Kiểm tra cấu hình Nginx/Apache của trang web:

    • Trong "Website Settings", kiểm tra mục "Config" (Cấu hình) hoặc "Proxy" (nếu bạn đã thêm các quy tắc proxy tùy chỉnh).
    • Đảm bảo không có dòng nào bị lỗi cú pháp hoặc trỏ đến một socket/port PHP-FPM không tồn tại.
    • Nếu bạn đã thêm các quy tắc rewrite hoặc proxy tùy chỉnh gần đây, hãy thử comment chúng lại để kiểm tra.

Troubleshooting

  • Lỗi: connect() failed (111: Connection refused) trong log Nginx:

    • Nguyên nhân: Nginx không thể kết nối đến socket hoặc cổng của PHP-FPM. Thường do PHP-FPM không chạy, hoặc cấu hình socket/port trong Nginx và PHP-FPM không khớp.
    • Cách xử lý: Đảm bảo PHP-FPM đang chạy (Bước 1). Kiểm tra file cấu hình Nginx của trang web (/www/server/panel/vhost/nginx/your_domain.conf) và file cấu hình PHP-FPM (/www/server/php/XX/etc/php-fpm.conf hoặc /www/server/php/XX/etc/php-fpm.d/www.conf) để đảm bảo chúng sử dụng cùng một đường dẫn socket (ví dụ: unix:/tmp/php-cgi-XX.sock) hoặc cùng một cổng (ví dụ: 127.0.0.1:9000).
  • Lỗi: upstream prematurely closed connection trong log Nginx:

    • Nguyên nhân: PHP-FPM đã đóng kết nối trước khi gửi phản hồi hoàn chỉnh cho Nginx. Thường do PHP-FPM gặp lỗi nghiêm trọng (ví dụ: lỗi script, hết bộ nhớ, timeout) và bị crash hoặc dừng đột ngột.
    • Cách xử lý: Kiểm tra log PHP-FPM (Bước 3) để tìm lỗi chi tiết. Tăng giới hạn bộ nhớ (memory_limit) và thời gian thực thi (max_execution_time) trong php.ini. Tăng các tham số pm.* của PHP-FPM (Bước 4).
  • Lỗi 502 chỉ xuất hiện trên một trang cụ thể hoặc sau khi cài đặt plugin/theme mới:

    • Nguyên nhân: Một script, plugin hoặc theme bị lỗi hoặc tiêu tốn quá nhiều tài nguyên.
    • Cách xử lý: Thử vô hiệu hóa các plugin hoặc theme mới cài đặt gần đây. Nếu là WordPress, bạn có thể đổi tên thư mục wp-content/plugins qua SSH để vô hiệu hóa tất cả các plugin, sau đó kích hoạt lại từng cái một.
  • aaPanel bị treo hoặc không phản hồi khi truy cập:

    • Nguyên nhân: Bản thân aaPanel cũng là một ứng dụng web. Nếu các dịch vụ web chính (Nginx/Apache, PHP) gặp sự cố nghiêm trọng hoặc máy chủ quá tải, aaPanel cũng có thể bị ảnh hưởng.
    • Cách xử lý: Khởi động lại dịch vụ aaPanel: bt restart. Nếu vẫn không được, khởi động lại toàn bộ máy chủ: reboot.

Kết Luận

Lỗi 502 Bad Gateway trên aaPanel tuy khó chịu nhưng thường có thể được khắc phục bằng cách kiểm tra và điều chỉnh các thành phần chính như PHP-FPM và Nginx/Apache. Bằng cách thực hiện từng bước kiểm tra từ trạng thái dịch vụ, phân tích log lỗi, và tối ưu hóa cấu hình tài nguyên, bạn có thể nhanh chóng xác định và giải quyết vấn đề.

💡 Best Practices:

  • Thường xuyên kiểm tra log lỗi của Nginx, Apache và PHP-FPM để phát hiện sớm các vấn đề.
  • Theo dõi tài nguyên hệ thống (CPU, RAM, Disk I/O) để tránh tình trạng quá tải.
  • Cập nhật PHP và các dịch vụ web lên phiên bản mới nhất để tận dụng các bản vá lỗi và cải thiện hiệu suất.
  • Sao lưu định kỳ dữ liệu và cấu hình máy chủ để có thể khôi phục nhanh chóng khi xảy ra sự cố nghiêm trọng.