How to fix 504 gateway time out Nginx

Khi nginx được cấu hình giống như proxy server chúng ta có thể gặp lỗi error 504 gateway timeout, trong bài viết này chúng ta tìm hiểu tại sao có lỗi 504 gateway timeout và làm sao để khắc phục lỗi.

504 gateway time out nginx là gì

Lỗi này xảy ra khi Nginx chạy như proxy server, ví dụ apache làm backend và nginx làm front-end, lỗi này có nghia là đã đat tới thời gian phản hồi của server, trong trường hợp của chúng tôi là thời gian phản hồi của php-fpm đã đạt tới, nguyên nhân dẫn tới tình trạng này.

  • PHP script hoặc mã nguồn xử lý bởi php-fpm bị đóng băng, không phản hồi
  • Script chạy trong thời gian dài, nhưng nginx được cấu hình tự reset kết nối nếu máy chủ không phản hồi
  • Server bị quá tải và không thể phục vụ toàn bộ client kết nối

fix lỗi 504 gateway time out Nginx

Đầu tiên chúng ta cần kiểm tra RAM và CPU để xem có quá tải không

free -h
top

Nếu bạn thấy tài nguyên máy chủ hết, bạn cần tối ưu lại hoặc nâng cấp phần cứng server

Trường hợp 2: Nếu script cần thời gian dài hơn để xử lý hoạt động, chúng ta có thể cấu hình nâng thời gian chờ trên nginx. trong trường hợp này cần thêm đoạn cấu hình sau vào block FastCGI trong file nginx.conf

location ~ .php$ {
...
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}

add thêm đoạn sau vào  block server trong nginx.conf nếu bạn sử dụng nginx làm proxy cho apache

proxy_connect_timeout 600; 
proxy_send_timeout 600; 
Proxy_read_timeout 600; 
Send_timeout 600;

Sau khi xong cần reset lại nginx:

systemctl restart nginx

chúng ta có thể theo dõi script nào đang thực thi chậm bằng cách ghi slow log, bằng cách cấu hình sau

sudo vi /etc/php-fpm.d/www.conf
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s

Trong cấu hình trên các script chạy hơn 5s sẽ được add vào log, bạn có thể thay đổi giá trị này theo nhu cầu

bạn sửa file : /etc/php5/fpm/pool.d/www.conf và thêm đoạn sau nếu chưa có (đường dẫn với mỗi phiên bản php sẽ khác nhau bạn cần kiểm tra đúng đường dẫn)

request_terminate_timeout = 300

Trong /etc/php.ini sửa lại phần sau

max_execution_time = 300

Sau khi thao tác xong, bạn cần restart lại php-fpm và nginx để nhận giá trị mới

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *