lỗi nginx đã bị lỗi recv () (104: Thiết lập lại kết nối bằng ngang hàng) trong khi đọc tiêu đề phản hồi từ ngược dòng


44

Tôi có một máy chủ hoạt động tốt cho đến ngày 3 tháng 10 năm 2013 lúc 10:50 khi nó bắt đầu liên tục trả lại lỗi "502 Bad Gateway" cho khách hàng.

Khoảng 4 trên 5 yêu cầu trình duyệt thành công nhưng khoảng 1 trong 5 yêu cầu với 502.

Nhật ký lỗi nginx chứa nhiều hàng trăm lỗi này;

2013/10/05 06:28:17 [error] 3111#0: *54528 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 66.249.66.75, server: www.bec-components.co.uk  request: ""GET /?_n=Fridgefreezer/Hotpoint/8591P;_i=x8078 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.bec-components.co.uk"

Tuy nhiên, nhật ký lỗi PHP không chứa bất kỳ lỗi phù hợp.

Có cách nào để PHP cung cấp cho tôi thêm thông tin về lý do tại sao nó đặt lại kết nối không?

Đây là nginx.conf;

user              www-data;
worker_processes  4;
error_log         /var/log/nginx/error.log;
pid               /var/run/nginx.pid;

events {
   worker_connections  1024;
}

http {
  include          /etc/nginx/mime.types;
  access_log       /var/log/nginx/access.log;

  sendfile               on;
  keepalive_timeout      30;
  tcp_nodelay            on;
  client_max_body_size   100m;

  gzip         on;
  gzip_types   text/plain application/xml text/javascript application/x-javascript text/css;
  gzip_disable "MSIE [1-6]\.(?!.*SV1)";

  include /gvol/sites/*/nginx.conf;

}

Và đây là .conftrang web này;

server {

  server_name   www.bec-components.co.uk bec3.uk.to bec4.uk.to bec.home;
  root          /gvol/sites/bec/www/;
  index         index.php index.html;

  location ~ \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires        2592000;   # 30 days
    log_not_found  off;
  }

  ## Trigger client to download instead of display '.xml' files.
  location ~ \.xml$ {
    add_header Content-disposition "attachment; filename=$1";
  }

   location ~ \.php$ {
      fastcgi_read_timeout  3600;
      include               /etc/nginx/fastcgi_params;
      keepalive_timeout     0;
      fastcgi_param         SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      fastcgi_pass          127.0.0.1:9000;
      fastcgi_index         index.php;
   }
}

## bec-components.co.uk ##
server {
   server_name   bec-components.co.uk;
   rewrite       ^/(.*) http://www.bec-components.co.uk$1 permanent;
}

Điều gì đã thay đổi vào ngày đó? Cập nhật ứng dụng của bạn hoặc PHP? Ứng dụng của bạn là gì? Bạn đã bật gỡ lỗi trong php-fpm chưa?
Pothi Kalimuthu

Không có gì thay đổi vào ngày đó. Cấu hình máy chủ không được thay đổi, cũng không có bất kỳ tập lệnh PHP nào. Nó không hết dung lượng đĩa. Ứng dụng của tôi chỉ là một tập hợp các PHPkịch bản. Tôi không sử dụng php-fpm, tôi chỉ chạy php-fastcgibằng cách làm php-cgi -b 127.0.0.1:9000. Nó đã hoạt động không có lỗi trong 3 năm. Tôi không thể tìm ra lý do tại sao nó đã phát triển vấn đề này.
Nigel Alderton

Gần đây tôi đã gặp vấn đề tương tự khi nginx phàn nàn về Thiết lập lại kết nối bằng cách đọc tiêu đề phản hồi từ thượng nguồn, trong trường hợp của tôi, đó là uWSGI, đó là vấn đề thực sự, khởi động lại uWSGI đã khắc phục sự cố cho tôi, vì lý do tại sao nó lại xảy ra vấn đề.
APZ

Dịch vụ ngược dòng của bạn ( php-cgi -b 127.0.0.1:9000) bị lỗi không liên tục, có lẽ do lưu lượng truy cập tăng và thiếu tài nguyên.
LinuxDevOps

Câu trả lời:


22

Tôi sẽ luôn tin tưởng nếu máy chủ web của tôi nói với tôi: 502 Bad Gateway

  • thời gian hoạt động của quá trình fastcgi / nginx của bạn là gì?
  • Bạn có giám sát các kết nối mạng không?
  • bạn có thể xác nhận / từ chối thay đổi số lượng khách truy cập vào khoảng ngày đó không?

nó có nghĩa là gì:

  • bạn không thể truy cập quá trình fastcgi bởi nginx; hoặc chậm hoặc không tương ứng ở tất cả. cổng xấu có nghĩa là: nginx không thể fastcgi_pass đến ressource được xác định 127.0.0.1:9000; tại thời điểm đó rất cụ thể .

  • Nhật ký lỗi bẩm sinh của bạn nói lên tất cả:

.

recv() failed 
    -> nginx failed

(104: Connection reset by peer) while reading response header from upstream, 
    -> no complete answer, or no answer at all
upstream: "fastcgi://127.0.0.1:9000", 
    -> who is he, who failed???

từ giới hạn của tôi, tôi muốn đề xuất:

  • khởi động lại fastcgi_ process / server của bạn
  • kiểm tra nhật ký truy cập của bạn
  • bật nhật ký gỡ lỗi

Đồng ý. Máy chủ web của tôi nói với tôi là gì?
Nigel Alderton

xem bản chỉnh sửa của tôi (có nghĩa là gì)
anh chàng đó từ đó đến

2
Tôi hiểu rồi, vì vậy Gatewaytrong trường hợp này là máy chủ PHP. Cảm ơn bạn.
Nigel Alderton

restart your fastcgi_process / serverlà những gì đã giúp tôi, thans
realtebo

11

Tôi biết chủ đề này đã cũ, nhưng thỉnh thoảng nó vẫn tiếp tục bật lên, vì vậy, để tìm câu trả lời trên web, tôi đã đưa ra ba khả năng sau:

  1. Một lỗi lập trình đôi khi làm sai lệch php-fpm, điều này có nghĩa là kết nối với nginx sẽ bị cắt đứt. Điều này thường sẽ để lại ít nhất một số bản ghi xung quanh và / hoặc bãi chứa lõi, có thể được phân tích thêm.
  2. Vì một số lý do, PHP không thể ghi tệp phiên (thường là session.save_path = "/var/lib/php/sessions":). Đây có thể là quyền xấu, quyền sở hữu xấu, người dùng / nhóm xấu hoặc các vấn đề bí mật / tối nghĩa hơn như hết các nút trên thư mục đó (hoặc thậm chí là một đĩa đầy đủ!). Điều này thường sẽ không để lại nhiều kết xuất cốt lõi xung quanh và thậm chí có thể không có bất cứ điều gì trên nhật ký lỗi PHP.
  3. Thậm chí còn khó khăn hơn để gỡ lỗi: một tiện ích mở rộng hoạt động sai (đôi khi gặp một số giới hạn bên trong hoặc lỗi không được kích hoạt mọi lúc), tách biệt và đưa quy trình php-fpm xuống - do đó đóng kết nối với nginx . Thủ phạm thông thường là APC, memcache / d, v.v.

+1 Trong trường hợp của tôi, đó là # 1 - lỗi lập trình.
Nimbuz

Chúng tôi đã gặp phải lỗi này và vô hiệu hóa phần mở rộng PHP APM Relic mới cho thấy một lỗi cụ thể hơn cho phép chúng tôi theo dõi vấn đề: [29-Jan-2018 16:47:48 UTC] Lỗi nghiêm trọng của PHP: Kích thước bộ nhớ được phép là 805306368 byte Kiệt sức (đã cố gắng phân bổ 262144 byte) trong nhà cung cấp / magento / mô-đun cấu hình-sản phẩm / Giá / Giá / Cấu hìnhRegularprice.php trên dòng 142 [29-tháng 1-2018 16:47:48 UTC] PHP Lỗi nghiêm trọng: Kích thước bộ nhớ được phép 805306368 byte cạn kiệt (đã cố phân bổ 323584 byte) trong Unknown trên dòng 0 Tôi đoán là Relic mới bị nghẹn trên đường dẫn "Unknown".
Erik Hansen

7

Giữ được điều này là tốt. Giải quyết nó bằng cách tăng opcachegiới hạn bộ nhớ, nếu bạn sử dụng nó (thay thế cho APC). Có vẻ như PHP-FPM bị mất kết nối bất cứ khi nào bộ đệm quá đầy. Đây cũng là lý do tại sao câu trả lời của shgnInc sửa nó trong một thời gian ngắn.

Vì vậy, tìm tệp /etc/php5/fpm/php.ini(hoặc tương đương trong phân phối của bạn) và tăng memory_consumptionlên bất kỳ cấp độ nào mà trang web của bạn cần. Vô hiệu hóa opcachecũng có thể làm việc.

[opcache]
opcache.memory_consumption = 196 

2

Bạn có thể muốn xem xét git này trên github: https://gist.github.com/amichaelgrant/90d99d7d5d48bf8fd209

Tôi đã gặp một tình huống tương tự, khi tôi kiểm tra nhật ký lỗi cho các máy chủ ngược dòng của mình, họ đã báo cáo một số lỗi ulimit vì vậy tôi đã tăng lên 1000000 (trên cả hộp ngược dòng và nginx) và mọi thứ đều hoạt động tốt


2

Trong trường hợp của tôi có cùng một vấn đề, tôi chỉ cần khởi động lại php-fpmdịch vụ để nó được giải quyết.

sudo service php5-fpm restart

Hoặc một số lần vấn đề này xảy ra vì rất nhiều yêu cầu. Theo mặc định, pm.max_requeststrong php5-fpm có thể là 100 hoặc thấp hơn.

Để giải quyết, việc tăng giá trị của nó phụ thuộc vào yêu cầu của trang web của bạn, ví dụ 500.

Và sau khi bạn phải khởi động lại dịch vụ


2

Trong trường hợp của tôi, việc vô hiệu hóa tiện ích mở rộng xdebug đã giúp ích.


ditto, trong trường hợp của tôi, tôi đặt một điều kiện cho một điểm dừng và tại thời điểm đó tôi đã vô hiệu hóa lỗi vi phạm đã biến mất.
roman204

1

Tôi chỉ gặp một vấn đề tương tự:

Bạn kết nối với php-fpm trên Cổng 9000. (fastcgi: //127.0.0.1: 9000)

Cấu hình tiêu chuẩn trên Ubuntu trên máy chủ của tôi là:

/etc/php/7.0/fpm/pool.d/www.conf:

listen = /run/php/php7.0-fpm.sock

bạn phải thay đổi điều này thành:

listen = 0.0.0.0:9000

Trong trường hợp của tôi, tôi đã cập nhật máy chủ của mình 1 1/2 tháng trước, ghi đè cấu hình trang phục của tôi với mặc định. Bây giờ đã khởi động lại php-fpm, lỗi này có hiệu lực với độ trễ.


1

Đối với tôi, đó là máy chủ hết bộ nhớ và php-fpm bị giết bởi kẻ giết người OOM. Giải pháp là tăng dung lượng bộ nhớ máy chủ.


1

Đối với tôi đó là vì php-fpm đã đạt đến max_childrengiới hạn. Nhật ký php-fpm cho nhóm được đề cập đã chỉ cho tôi đi đúng hướng


0

Vấn đề này cũng có thể phát sinh nếu một quá trình PHP-FPM vượt quá giới hạn bộ nhớ được phân bổ. Khi điều này xảy ra, kết nối giữa NGINX và PHP-FPM bị cắt đứt và NGINX trả về a 502 Bad Gateway. Giới hạn bộ nhớ quá trình PHP-FPM được điều khiển bởi memory_limitbiến. Điều này có thể được thiết lập php_admin_value[memory_limit]trong tệp cấu hình PHP-FPM.

Điều quan trọng cần lưu ý là giới hạn bộ nhớ áp dụng trên cơ sở mỗi tập lệnh . Với ncác quy trình PHP-FPM, tổng mức sử dụng bộ nhớ có thể lên tới memory_limit * n. Hãy chắc chắn kiểm tra xem máy của bạn có đủ bộ nhớ không!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.