У меня следующая конфигурация, используемая в серверном блоке, и по мере роста количества местоположений производительность существенно снизилась, даже если есть только один запрос (например, 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/ -> 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
Пользователь всегда может ввести полный URL-адрес (например, через закладку). Keepalive_timeout установлен в 0, потому что прокси-сервер не поддерживает keepalive. Общие заголовки включены из общего файла, включенного с помощью директивы include (но удалены из этого вопроса для простоты).
Для каждого прокси-сервера есть 6 блоков местоположения для поддержки вышеупомянутой схемы URL. Размер файла конфигурации по умолчанию теперь превышает 250 КБ.
Вопросы / проблемы: 1. Почему производительность упала до такого уровня, что даже первое расположение в файле конфигурации занимает несколько минут (и даже время от времени истекает). Прокси-сервер очень удобен для прямого доступа. 2. Как можно отредактировать конфигурацию местоположения, чтобы уменьшить время отклика
Основной файл конфигурации (nginx.conf) выглядит следующим образом
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;
}
Default.conf выглядит следующим образом:
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 '';
}
}
Я искал через SO и этот форум, но не нашел ничего, что указывает на мою проблему. Буду рад предоставить любую дополнительную информацию.
Судя по всему, проблема была решена после перезапуска модуля k8s. До этого я пытался проверить все показатели, связанные с процессором, памятью, диском и т. Д., И волноваться было не о чем.
Так что я не знаю, что послужило причиной исправления, поэтому считаю это разовым случаем.
Рефакторинг конфигурации я бы еще хотел посвятить отдельным вопросом. Спасибо всем, что уделили время.