Nginx не может обрабатывать большое количество запросов - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть сценарий, где nginx находится перед сервером Artifactory. В последнее время, при попытке вытащить большое количество образов докеров в цикле for, все одновременно (первый тест был с 200 изображениями, второй тест со 120 изображениями), доступ к Artifactory блокируется, так как nginx занят обработкой всех запросы и пользователи не смогут его получить.

Мой сервер nginx работает с 4 ядрами процессора и 8192 оперативной памяти.

Я попытался улучшить обработку файлов на сервере, добавив ниже:

sendfile on;
sendfile_max_chunk 512k;
tcp_nopush on;

Это сделало его немного лучше (но, конечно, вытягивание изображений с 1 ГБ + занимает намного больше времени, из-за размера куска) - тем не менее, доступ к пользовательскому интерфейсу вызовет много тайм-аутов.

Есть ли что-то еще, что я могу сделать, чтобы улучшить производительность nginx, когда через него проталкивается большая нагрузка?

Я думаю, что мой последний вариант - увеличить размер машины (больше процессоров), а также количество процессов в nginx (от 8 до 16).

Полный файл nginx.conf приведен ниже:

user              www-data;
worker_processes 8;
pid        /var/run/nginx.pid;

events {
  worker_connections  19000;
}

http {
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    gzip on;
    gzip_disable "msie6";
    sendfile on;
    sendfile_max_chunk 512k;
    tcp_nopush on;

    set_real_ip_from 138.190.190.168;
        real_ip_header    X-Forwarded-For;

        log_format custome '$remote_addr - $realip_remote_addr - $remote_user [$time_local] $request_time'
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent"';


    server {
            listen 80 default;
            listen [::]:80 default;
            server_name _;
            return 301 https://$server_name$request_uri;
    }
    ###########################################################
    ## this configuration was generated by JFrog Artifactory ##
    ###########################################################

    ## add ssl entries when https has been set in config
    ssl_certificate      /etc/ssl/certs/{{ hostname }}.cer;
    ssl_certificate_key  /etc/ssl/private/{{ hostname }}.key;
    ssl_session_cache shared:SSL:1m;
    ssl_prefer_server_ciphers   on;
    ## server configuration
    server {
        listen 443 ssl;
        server_name ~(?<repo>.+)\.{{ hostname }} {{ hostname }} _;

        if ($http_x_forwarded_proto = '') {
            set $http_x_forwarded_proto  $scheme;
        }
        ## Application specific logs
        access_log /var/log/nginx/{{ hostname }}-access.log custome;
        error_log /var/log/nginx/{{ hostname }}-error.log warn;
        rewrite ^/$ /webapp/ redirect;
        rewrite ^//?(/webapp)?$ /webapp/ redirect;
        rewrite ^/(v1|v2)/(.*) /api/docker/$repo/$1/$2;
        chunked_transfer_encoding on;
        client_max_body_size 0;
        location / {
            proxy_read_timeout  900;
            proxy_max_temp_file_size  10240m;
            proxy_pass_header   Server;
            proxy_cookie_path   ~*^/.* /;
            proxy_pass          http://{{ appserver }}:8081/artifactory/;
            proxy_set_header    X-Artifactory-Override-Base-Url $http_x_forwarded_proto://$host:$server_port;
            proxy_set_header    X-Forwarded-Port  $server_port;
            proxy_set_header    X-Forwarded-Proto $http_x_forwarded_proto;
            proxy_set_header    Host              $http_host;
            proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
        }
    }
}

Спасибо за советы.

Ура, Рикардо

...