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.