Не удается выделить ошибку памяти в nginx с огромным количеством перенаправлений - PullRequest
0 голосов
/ 09 октября 2018

Я столкнулся с ошибкой выделения памяти в nginx.Я настроил обратный прокси-сервер для нескольких сайтов на моем nginx, которые я использую как простой балансировщик нагрузки между двумя внутренними узлами.Типичная конфигурация для сайта выглядит следующим образом:

upstream backend  {
  ip_hash;
  server <node-ip>;
  server <another-node-ip>;
}

server {
  server_name domain.subdomain.com;    

  # a HUGE bunch of redirection rules 
  include /etc/nginx/sites-available/root;

  location / {

    proxy_pass  http://backend  ;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

У меня 12 сайтов с конфигурацией, как указано выше.Как видите, конфиг содержит include другого файла - sites-available/root.Этот файл состоит из ряда unclude директив к другим файлам:

include /etc/nginx/sites-available/rules1;
include /etc/nginx/sites-available/rules2;
include /etc/nginx/sites-available/rules3;
...
include /etc/nginx/sites-available/rules16;

Каждый файл правил содержит ряд правил перенаправления, таких как:

if ($request_uri ~* ^/some-url$) {
  return 302 /some-another-url/;
}

или

location ~ some-url {
  return 302 "some-another-url";
}

Общее количество правил перенаправления составляет около 2300. Я включил файл root в конфигурации всех 12 сайтов.После этого время от времени я получаю информационное сообщение в /var/log/nginx/error.log:

[info] 23721 # 23721: Использование 32768 КБ общей памяти для push-модуля в /etc/nginx/nginx.conf:66

Основная проблема заключается в том, что иногда команда service nginx reload завершается ошибкой с ошибками в журнале:

[alert] 22164 # 22164: fork () не запускается при порождении «рабочего процесса»(12: Невозможно выделить память) 2018/10/09 03:10:06

[alert] 22164 # 22164: ошибка sendmsg () (9: неверный дескриптор файла)

Проблема исчезнет, ​​если я исключу правила перенаправления из конфига.Nginx настроен на простой экземпляр AWS t2.small с Ubuntu 16.04.Он имеет 1 ГБ оперативной памяти, и я вижу (с free -m), что по крайней мере половина памяти свободна.У меня по умолчанию nginx.conf.Итак, вопрос в том, как избежать ошибки cannot allocate memory, вызванной огромным количеством правил перенаправления?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...