RE: 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.

Trinh Ngọc Tiểu học Asked on 14 Tháng Ba, 2018 in Thủ Thuật.
Thêm bình luận
2 Trả Lời

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 on 16 Tháng Ba, 2018.
Thêm bình luận

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.