ms-dred
@ms-dred
Вечно что то не то и что то не так...

Почему иногда вылетает ошибка 104: Connection reset by peer?

Может быть подскажите в чем может быть проблема, уже много чего перепробовал и ничего не помогает, возможно у меня с конфигурацией nginx проблема.
Иногда вываливаются ошибки вида
recv() failed (104: Connection reset by peer) while reading response header from upstream, client:....

И
connect() failed (110: Connection timed out) while connecting to upstream, client:...

Так же за день висит 3 ошибки
2048 worker_connections are not enough while connecting to upstream, client:...


Увеличив worker_connections не избавляет от первых двух ошибок, я думаю что в моем конфиге что то нагорожено мной.

nginx.conf
user  nginx;
worker_processes  auto;
worker_rlimit_nofile 10000;
pid /var/run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

error_log  /var/log/nginx/error.log crit;


events {
    multi_accept on;
    worker_connections  4096;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  /var/log/nginx/access.log  main;
    access_log off;

    server_tokens off;

    client_body_buffer_size 20K;
    client_header_buffer_size 4k;
    client_max_body_size 30M;
    client_body_timeout 10s;
    client_header_timeout 5s;
    types_hash_max_size 2048;
    large_client_header_buffers 2 12k;


    proxy_buffering off;
    proxy_buffer_size 16k;
    proxy_busy_buffers_size 24k;
    proxy_buffers 64 4k;
    proxy_read_timeout 300s;
    proxy_connect_timeout 300s;
    proxy_send_timeout 300s;



    keepalive_timeout 30;
    keepalive_requests 1000;
    reset_timedout_connection on;
    send_timeout 10;

    sendfile    on;
    tcp_nodelay on;
    tcp_nopush  on;

    open_file_cache max=200000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;

    gzip  on;
    gzip_min_length 10240;
    gzip_proxied expired no-cache no-store private auth;
    gzip_comp_level 5;
    gzip_disable "msie6";
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
    

    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    #ssl_protocols TLSv1.2;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on; # у меня стояло off
    ssl_stapling on;
    ssl_stapling_verify on;

    # Каким сайтам разрешаем открыть в iframe
    map $http_referer $frame_options {
        default    "DENY";
        "~site.ru"	"ALLOW";
        "~vk.com"   "ALLOW";
        #"~yourdomain.com"   "ALLOW";
        "~webvisor.com"    "ALLOW";
        "~metri[ck]a\.yandex\.(com|ru|by|com\.tr)"  "ALLOW";
    }

    # Ищем совпадение в user_agent ботов для последующего из блокирования
    map $http_user_agent $limit_bots {
        default    0;
        ~*(Barkrowler|FriendlyCrawler|DotBot|BLEXBot|AhrefsBot|MegaIndex|SemrushBot|LinkPad|Amazonbot|Amazon|Bytespider)   1;
    }


    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains";
    add_header X-Frame-Options $frame_options;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block;";

    
    add_header Content-Security-Policy "default-src 'none'; connect-src 'self' *.site.ru site.ru *.google-analytics.com *.gstatic.com yastatic.net *.adfox.ru *.yandex.ru yandex.ru yandex.com *.yandex.net; font-src 'self' data: *.site.ru site.ru fonts.googleapis.com *.gstatic.com yastatic.net; form-action 'self' *.site.ru site.ru; frame-src 'self' *.site.ru site.ru yandexadexchange.net *.yandexadexchange.net yastatic.net *.yandex.ru *.adfox.ru yoomoney.ru; img-src 'self' data: blob: *.site.ru site.ru *.vk.com vk.com *.userapi.com *.google-analytics.com *.gstatic.com *.yandex.net *.adfox.ru *.yandex.ru yandex.ru yandex.com; media-src 'self' data: yastatic.net *.yandex.net *.yandex.ru *.adfox.ru yandex.ru yandex.com; object-src 'self' *.site.ru site.ru; script-src 'unsafe-inline' 'unsafe-eval' *.site.ru site.ru *.google-analytics.com *.gstatic.com *.googletagmanager.com yastatic.net *.yandex.ru *.adfox.ru yandex.ru yandex.com; style-src 'self' 'unsafe-inline' 'unsafe-eval' *.site.ru site.ru fonts.googleapis.com yastatic.net *.adfox.ru;";

    resolver 8.8.8.8;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

/conf.d/cache.conf
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static_cache:16M inactive=60d max_size=1000M;
proxy_cache_min_uses 1;

/conf.d/limit.conf
limit_req_zone $binary_remote_addr zone=one:10m rate=200r/s;


/site-available/site.conf
upstream site.ru {
    server IP:9000;
}

server {
    server_name site.ru;
    listen 443 ssl;
    http2 on;

    error_log /var/log/nginx/site.log warn;

    #ssl on;
    include ssl/site.conf;
    include acme.conf;
    #include conf.d/csp.conf

    set $root /var/www/site/.next;
    set $build $root/.next;

    location @proxy {
        limit_req zone=one burst=200 nodelay;
        limit_req_log_level warn;
        limit_req_status 429;

        proxy_pass http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_read_timeout 300s;
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect   http://127.0.0.1:9000/ https://site.ru/;
    }

    location / {
        root $root;

        if ($limit_bots = 1) {
            return 403;
        }
    
        try_files $uri $uri/index.html @proxy;
    }

    location /_next/static {
        alias $root/static;

        expires 1y;

        try_files $uri $uri/ =404;
    }
}


###### Redirects Domains #######
server {
    server_name site.ru www.site.ru;
    listen 80;
    listen [::]:80;
    include acme.conf;
    return 301 https://site.ru$request_uri;
}

server {
    server_name www.site.ru;
    listen 443 ssl;
    http2 on;

    #ssl on;
    include ssl/site.conf;
    include acme.conf;

    return 301 https://site.ru$request_uri;

}

server {
    server_name m.site.ru;
    listen 443 ssl;
    http2 on;

    #ssl on;
    include ssl/site.conf;
    include acme.conf;

    return 301 https://site.ru$request_uri;
}

server {
    server_name m.site.ru;
    listen 80;
    listen [::]:80;
    include acme.conf;
    return 301 https://site.ru$request_uri;
}

server {
    server_name IP;
    listen 80;
    listen [::]:80;
    include acme.conf;
    return 301 https://site.ru$request_uri;
}
  • Вопрос задан
  • 298 просмотров
Пригласить эксперта
Ответы на вопрос 1
@GoodGod
Я не уверен, но.

У вас за nginx стоит какой-то другой сервер, php-fpm например или еще что-то.
104: Connection reset by peer - означает, что процесс php завершился по таймауту, слишком долго обрабатывал запрос, т.е. php работал работал, затем вышло время обработки 1 запроса, и php процесс завершился, не успев отдать ответ. Но коннекшн к php был, и ему запрос был передан.
110: Connection timed out - означает, что воркеров php-fpm совсем не хватило, и сервер php даже не смог принять запрос, потому что не было свободных воркеров. Nginx пытался пытался подключиться к php, но не смог, и запрос php не был передан, т.к. у php просто закончились все воркеры.

Необходимо смотреть логи того сервера, которому nginx передает дальше запрос.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы