Problemas de desempenho do Nginx com reqesting de usuário único, mas com arquivo de configuração grande

1

Tenho a seguinte configuração usada no bloco de servidores e conforme o número de locais cresceu, o desempenho diminuiu substancialmente mesmo se houver apenas uma solicitação (por exemplo, link ). O acesso direto (sem proxy) é muito rápido. Por degradado quero dizer que leva minutos para processar a página via proxy vs. segundos para acesso direto.

O objetivo de vários redirecionamentos para o mesmo local é devido ao seguinte requisito original.

https://example.com/loc1 -> should go to https://example.com/loc1/MyContext/index.html
https://example.com/loc1/ -> should go to https://example.com/loc1/MyContext/index.html
https://example.com/loc1/myadmin -> should go to https://example.com/loc1/MyContext/index.html
https://example.com/loc1/admin -> should go to https://example.com/loc1/MyContext/admin.html
https://example.com/loc1/reporter -> should go to https://example.com/loc1/reporter/index.html

O usuário sempre pode digitar o URL inteiro (por exemplo, por meio de um favorito). O keepalive_timeout é definido como 0 porque o servidor com proxy não suporta keep-alive. Os cabeçalhos comuns são incluídos a partir de um arquivo comum incluído via diretiva include (mas removidos desta pergunta para simplificar).

Para cada servidor com proxy, existem 6 blocos de localização para suportar o esquema de URL mencionado acima. O tamanho do arquivo de configuração padrão agora é de mais de 250 KB.

Perguntas / problemas: 1. Por que o desempenho se degradou a níveis tão altos que até mesmo o primeiro local no arquivo de configuração está demorando alguns minutos (e até mesmo o tempo limite, às vezes). O servidor proxy é muito responsivo para acesso direto. 2. Como a configuração de localização pode ser refatorada para melhorar o tempo de resposta

O arquivo de configuração principal (nginx.conf) é como abaixo

user  nginx;
worker_processes  2;

error_log  /var/log/nginx/error.log debug;
pid        /var/run/nginx.pid;
worker_rlimit_nofile 50000;

events {
    worker_connections  4096;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    underscores_in_headers on;
    proxy_buffering off;
    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;
    error_log   /var/log/nginx/error.log  debug;

    sendfile        on;
    #tcp_nopush     on;
    server_tokens   off;
    keepalive_timeout  0;
    #gzip  on;

    include /etc/nginx/conf.d/default.conf;
}

O default.conf é como abaixo:

server {
  listen 80;
  return 301 https://$host$request_uri;
}
server {
    listen 443 ssl;
    server_name example.com;
    ssl on;
    ssl_certificate       /etc/nginx/security/server.pem;
    ssl_certificate_key   /etc/nginx/security/key.pem;
    ssl_session_cache shared:SSL:5m;
    ssl_protocols TLSv1.2;
    server_name_in_redirect on;
    client_max_body_size 100m;

    location = /loc1 {
        try_files $uri $uri/ =301 /loc1/myadmin;
    }
    location = /loc1/myadmin {
        return 301 https://example.com/loc1/MyContext/index.html;
    }
    location = /loc1/admin {
        return 301 https://example.com/loc1/MyContext/admin.html;
    }
    location = /loc1/reporter {
        return 301 https://example.com/loc1/reporter/index.html;
    }

    location = /loc1/ {
        return 301 https://example.com/loc1/MyContext/index.html;
    }

    location /loc1/ {
        proxy_pass          https://Sevice_1_IP_Address:443/;
        proxy_set_header        Host <Service_1_IP_Address>;
        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_set_header        Upgrade $http_upgrade;
        proxy_set_header        Connection "Upgrade";
        proxy_buffering         off;
        proxy_http_version      1.1;
        proxy_set_header        Origin '';
    }   

    location = /loc2 {
        try_files $uri $uri/ =301 /loc2/myadmin;
    }
    location = /loc2/myadmin {
        return 301 https://example.com/loc2/MyContext/index.html;
    }
    location = /loc2/admin {
        return 301 https://example.com/loc2/MyContext/admin.html;
    }
    location = /loc2/reporter {
        return 301 https://example.com/loc2/reporter/index.html;
    }

    location = /loc2/ {
        return 301 https://example.com/loc2/MyContext/index.html;
    }

    location /loc2/ {
        proxy_pass          https://Sevice_2_IP_Address:443/;
        proxy_set_header        Host <Service_2_IP_Address>;
        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_set_header        Upgrade $http_upgrade;
        proxy_set_header        Connection "Upgrade";
        proxy_buffering         off;
        proxy_http_version      1.1;
        proxy_set_header        Origin '';
    }

}

Eu pesquisei através do SO e deste fórum, mas não encontrei nada que indicasse o meu problema. Terei prazer em fornecer qualquer informação adicional.

    
por Nitb 23.10.2018 / 18:41

1 resposta

0

Aparentemente, o problema foi resolvido depois que o pod k8s foi reiniciado. Antes disso, tentei verificar todas as métricas relacionadas a CPU, memória, disco, etc. e não havia nada com o que se preocupar.

Então, eu não sei o que causou a correção, então vou considerá-la como uma incógnita.

Eu ainda gostaria de buscar a refatoração da configuração em uma questão separada. Obrigado a todos por gastar seu tempo.

    
por 26.10.2018 / 16:02