Lỗi 502 bad gateway? Cách fix lỗi 502 trên web

Nguyên nhân của lỗi 502 bad gateway. Cách sửa lỗi 502 bad gateway? Em có làm một webiste server bằng nginx nhưng khi chạy web thì bị lỗi 502 ah. Mọi người hướng dẫn em sửa lỗi 502 bad gateway nginx với ah. em sử dụng nginx với php-fpm để dựng web.

Câu hỏi của vào 14/03/2018   danh mục: Thủ Thuật.
2 Trả lời

    Error 502 Bad Gateway là một mã trạng thái của http. Nó có nghĩa là một máy chủ nào đó trên internet nhận được một giá trị rỗng của từ một máy chủ khác. 502 bad gateway xuất hiện ở tất cả trên trình duyệt web và tất cả thiết bị.

    Trên mỗi website có thể tối ưu hoá lỗi 502 khác nhau. Do đó bạn có thể thấy được nhiều đoạn thông báo lỗi khác nhau trên cùng một lỗi.

    Một số thông báo mã lỗi 502

    • 502 Bad Gateway
    • 502 Service Temporarily Overloaded
    • Error 502
    • Temporary Error (502)
    • 502 Proxy Error
    • 502 Server Error: “The server encountered a temporary error and could not complete your request”
    • HTTP 502
    • 502. That’s an error
    • Bad Gateway: The proxy server received an invalid response from an upstream server
    • HTTP Error 502 – Bad Gateway

    Nguyên nhân xuất hiện lỗi 502 Bad Gateway

    Nguyên nhân chính dẫn đến lỗi Bad Gateway chính là việc một máy chủ online trên internet không thể xử lý kịp luồn dữ liệu kết nối tới server gây nên trình trạng overload và không trả về giá trị của máy chủ yêu cầu. Nhưng đôi khi nó lỗi do trình duyệt web hoặc là mạng internet của chính bạn.

    Xữ lý lỗi 502 phía client

    1. Tải lại đường dẫn một lần nữa bằng cách nhấn vào F5 hoặc Ctrl + F5 trên bàn phím. Bạn cũng có thể nhấn vào nút reload/refresh trên trình duyệt
    2. Tắt hết trình duyệt web đi và mở lại trình duyệt web và hãy truy cập lại lần nữa.
    3. Xoá Cache trình duyệt web cũng có thể hết lỗi 502 nhé. Đôi khi file cache hết hạn hoặc bi lỗi được lưu lại trong trình duyệt cũng có thể gây ra trạng thái lỗi 502
    4. Xoá cookies trên trình duyệt web của bạn.
    5. Mở trình duyệt của bạn với chết độ Safe Mode để truy cập lại website. Khi bạn chạy trình duyệt với chế độ Safe Mode có nghĩa là bạn đang chạy trình duyệt ở chế độ mặc định không sử dụng bất cứ tiện ít mở rộng nào khác.
    6. Nếu đã thử các cách nêu trên vẫn không truy cập được trang web. Bạn hãy sử dụng trình duyệt khác để truy cập website đó thử. Đôi khi do trình duyệt bạn có vấn đề.
    7. Restart lại máy tính của bạn.
    8. Restart lại modem mạng nhà bạn.
    9. Thay đổi DNS trên máy tính của bạn. Có thể lỗi 502 của bạn đang gặp phải chính là lỗi do DNS server mà bạn đang dùng, hãy thay đổi DNS server khác thử nhé.
    10. Liên hệ với người quản trị website mà bạn muốn truy cập thông qua email, fanpage hoặc các phương tiện truyền thông khác có thể

    Bạn đã thử tất cả các lỗi phía trên vẫn không thể truy cập được thì chắc rằng lỗi 502 bad gateway nằm ở phía máy chủ. Bạn hãy chờ quản trị website đó sửa lỗi và truy cập lại sau nhé.

    Phần xử lý lỗi ở trên server mình hướng dẫn ở phần trả lời kế tiếp nhé.

    Giáo SưĐã trả lời vào 16/03/2018

      Mình sẽ hướng dẫn các bạn sửa lỗi 502 Bad Gateway Nginx nhé.

      Thỉnh thoảng khi cấu hình server web chúng ta thường thấy lỗi 502 bad gateway với nginx. Bạn sẽ tìm thấy được lỗi chi tiết trong phần logs của server web. Mã http thì cũng giống như mình đã nêu ở phần trên

      Nguyên nhân chính dẫn đến lỗi 502 bad gateway nginx

      Nginx làm proxy cho apache website service

      Nếu bạn dùng Nginx làm proxy cho Apache. Khi Apache chết hoặc xữ lý không kịp luồn dữ liệu (overload ) sẽ xảy ra lỗi 502. Sửa lỗi này bạn chỉ cần restart lại Apache server để web server của bạn thoát ra khỏi tình trạng overload tiến trình. Sau đó bạn hãy xem lại cấu hình web của để tối ưu hoá nó nhé.

      Lệnh restart Apache

      /etc/init.d/httpd restart

      Bạn chưa start php-fpm

      Khi bạn kết hợp Nginx với Php-fpm. Nếu php-fpm của bạn chưa chạy thì sẽ xảy ra lỗi 502. Kiểm tra php-fpm có chạy hay không bạn sử dụng bên dưới.

      ps -aux | grep php-fpm

      Nếu kết quả hiển thị giống hình bên dưới thì có nghĩa là php-fpm đã chạy. Bạn hãy tìm hiểu thêm những lỗi được liệt kê phía bên dưới.

      root@web1:/var/log/nginx# ps -aux | grep php-fpm
      root 31191 0.0 1.7 133628 18108 ? Ss 20:41 0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
      web1 31193 0.0 0.5 133628 5956 ? S 20:41 0:00 php-fpm: pool www
      web1 31194 0.0 0.5 133628 5956 ? S 20:41 0:00 php-fpm: pool www

      Nếu php-fpm không chạy bạn hãy start php-fpm nhé.

      Lệnh start php-fpm

      service php5-fpm start hoặc /etc/init.d/php5-fpm start

      Php-fpm không chạy

      Nếu php-fpm lỗi không chạy được thì cũng sẽ xuất hiện lỗi 502 bad gateway. Bạn có thể kiểm tra log server thể biết chi tiết lỗi

      root@web1:/var/log/nginx# tailf /var/log/nginx/error.log
      2018/03/16 10:55:30 [crit] 28451#24551: *6 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client:113.161.32.10, server: hoidaptructuyen.vn,request: "GET /test.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "hoidaptructuyen.vn"
      2018/03/16 10:55:50 [crit] 28451#24551: *8 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client:113.161.32.10, server: hoidaptructuyen.vn,request: "GET /test.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "hoidaptructuyen.vn"
      2018/03/16 10:56:00 [crit] 28451#24551: *16 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client:113.161.32.10, server: hoidaptructuyen.vn,request: "GET /test.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:",host: "hoidaptructuyen.vn"

      Nếu xuất hiện lỗi như trên thì có nghĩa là var/run/php5-fpm.sock không được tìm thấy. Bạn hãy kiểm tra lại file cấu hình php-fpm của mình xem php-fpm socket đã có quyền ghi vào thư mục chứa socket php-fpm chưa? và socket php-fpm đã có quyền chạy với user chạy php-fpm chưa?

      Bạn mở file cấu hình php-fpm và kiểm tra như bên dưới:

      vi /etc/php5/fpm/www.conf
      [www]
      user = web1
      group = web1

      listen = /var/run/php5-fpm.sock

      listen.owner = web1
      listen.group = web1

      Sau khi bạn đã chỉnh sửa đúng thông tin về: socket path, process owner/group, listen.owner/listen.group thì hãy start lại php-fpm nhé.

      Lênh start php-fpm

      service php5-fpm start  hoặc  /etc/init.d/php5-fpm start

      Nginx không thể kết nối với php-fpm

      Khi kiểm tra ở các bước trên tất cả điều chính xác thì kế tiếp bạn hãy kiểm tra cấu hình fastcgi_pass nginx xem đã kết nối với php-fpm chưa nhé

      vi /etc/nginx/nginx.conf

      http{


      server {
      ...
      location ~ \.php$ {
      fastcgi_pass unix:/var/run/php5-fpm.sock;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_nam$include fastcgi_params;
      }
      .....

      }

      Sau khi bạn chỉnh lại cấu hình fastcgi_pass thì hãy restart lại Nginx.

      Lệnh restart Nginx

      service nginx reload hoặc /etc/init.d/nginx reload

      Nginx timeout

      Ngoài những lỗi do config sai ra thì giới hạn thời gian xử lý của nginx và php-fpm cũng là lý do gây nên lỗi 502 bad gateway. Nguyên nhân của lỗi này là thời gian chờ của nginx hoặc php-fpm hết hạn với những tiến trình đồi hỏi thời gian xử lý lâu hơn.

      Để tăng giới hạn thời gian xử lý của php-fpm bạn hãy chỉnh max_execution_time trong file php.ini. Đơn vị thời gian tính bằng giây (s)

      Vi /etc/php5/fpm/php.ini

      max_execution_time = 300

      Tăng timeout, buffers và buffers size trong Nginx trên block http { … }

      vi /etc/nginx/nginx.conf
      http{
      ...
      fastcgi_buffers 8 16k;
      fastcgi_buffer_size 32k;
      fastcgi_connect_timeout 300;
      fastcgi_send_timeout 300;
      fastcgi_read_timeout 300;
      ...
      }

      Cuối cùng hãy restart lại NGINX  và PHP-FPM

      Lệnh restart NGINX

      service nginx reload hoặc /etc/init.d/nginx reload

      Lệnh restart php-fpm

      service php5-fpm start hoặc /etc/init.d/php5-fpm start

      Php-fpm timeout

      Nếu Nginx timeout của bạn đã tương đối cao và vẫn bị lỗi 502 bad bad gateway thì hãy tăng set_time_limit() trong code php nhé. Tham khảo thêm về set_time_limit() của php tại đây nhé: https://secure.php.net/manual/en/function.set-time-limit.php

      Chúc bạn thành công.

      Giáo SưĐã trả lời vào 16/03/2018
      Câu trả lời của bạn
      Khi tham gia trả lời bạn phải đồng ý với các điều khoản trên web site của chúng tôi: privacy policy and terms of service.