499 отмененных запросов от nginx по-прежнему проходит через рельсы пумы - PullRequest
0 голосов
/ 07 февраля 2020

Типичный обычный запрос страницы в моем приложении занимает в среднем 2-3 секунды для загрузки, как показано на рисунке ниже

enter image description here

Когда я несколько раз запросить его из браузера nginx показывает, что запрос отменен с кодом HTTP 499, но я вижу, что запрос направляется на сервер приложений puma, и puma пытается обработать все отмененные запросы, и результаты ниже, это занимает гораздо больше времени обслуживать страницу в моем случае я выполнил от 4 до 5 одновременных запросов, и время загрузки страницы увеличилось до 23 секунд, как показано на рисунке ниже:

enter image description here

Моя конфигурация nginx выглядит следующим образом:

upstream app {
  server unix:///project/tmp/sockets/puma.sock fail_timeout=600;
}

#expiry map
map $sent_http_content_type $expires {
    default                     off;
    text/css                    max;
    application/javascript      max;
    application/x-font-ttf      max;
    application/x-font-otf      max;
    binary/octet-stream         max;
    application/font-woff       max;
    font/woff                   max;
    application/font-woff2      max;
    font/woff2                  max;
    image/x-icon                max;
    image/vnd.microsoft.icon    max;
    ~image/                     max;
}
expires $expires;

# nginx caching - https://www.nginx.com/blog/nginx-caching-guide/
#proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=nginx_cache:10m max_size=2g inactive=168h use_temp_path=off;

server {
        listen 80;
        listen [::]:80;

    server_name www.example.com;
    return 301 https://www.example.com$request_uri;
}

server {
       set $root /project/public;
        resolver 8.8.8.8  valid=600s;
        resolver_timeout 10s;
        root $root;

        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers 'CIPHERS_VALUES';
        ssl_dhparam /etc/nginx/ssl/dhparam.pem;
        ssl_certificate /etc/nginx/ssl/example.crt;
        ssl_certificate_key /etc/nginx/ssl/example.key;
        ssl_session_cache shared:SSL:40m;
        ssl_session_timeout 180m;
        ssl_session_tickets off;
        # default 16k. Small buffer helps with TTFB
        ssl_buffer_size 16k;
        # OCSP stapling
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /etc/nginx/ssl/example.crt;

        access_log /project/log/nginx.access.log;
        error_log /project/log/log/nginx.error.log info;

    error_page 500 502 503 504 /500.html;

    client_max_body_size 1000M;
    keepalive_timeout 3000s;


        location ~* \.(php|pl|py|jsp|asp|sh|cgi)$ {
                deny all;
        }



    try_files $uri/index.html $uri @app;
    location @app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_read_timeout 3600;
        proxy_pass http://app;
    }

        # this prevents hidden files (beginning with a period) from being served
        location ~ /\. {
                access_log        off;
                log_not_found     off;
                deny              all;
        }
}

Моя конфигурация пумы:

```#!/usr/bin/env puma

directory '/project/current'
rackup "project/current/config.ru"
environment 'production'

tag ''

pidfile "/project/shared/tmp/pids/puma.pid"
state_path "/project/shared/tmp/pids/puma.state"
stdout_redirect '/project/shared/log/puma_access.log', '/project/log/puma_error.log', true


threads 0,6



bind 'unix:///project/tmp/sockets/puma.sock'

workers 4





preload_app!


on_restart do
  puts 'Refreshing Gemfile'
  ENV["BUNDLE_GEMFILE"] = ""
end````
...