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.
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
- 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
- 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.
- 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
- Xoá cookies trên trình duyệt web của bạn.
- 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.
- 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 đề.
- Restart lại máy tính của bạn.
- Restart lại modem mạng nhà bạn.
- 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é.
- 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é.
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.