Nano Hash - криптовалюты, майнинг, программирование

Логи nginx для определения местоположения

Нужна помощь в настройке логов nginx, чтобы они не дублировались.

Моя конфигурация следующая. Я хотел бы добиться того, чтобы все журналы, скажем, http://example.com/app отправлялись на файл app.access.log и логи для остальной части сайта идут в файл main.access.log

Однако следующие журналы конфигурации регистрируют журналы приложений как в app.access.log, так и в main.access.log.

server {

       access_log /var/log/nginx/main.access.log;


       location /app {
           access_log /var/log/nginx/app.access.log;
       }
}

Есть идеи, как это исправить?


Ответы:


1

Вы можете использовать регулярное выражение отрицания для перехвата всех запросов, НЕ направленных в приложение, и определить там директиву access_log. Затем определите другое место для приложения

location ~ ^((?!app).)*$ {
        access_log /var/log/nginx/not-an-app.access.log;
   }

location /app { 
       access_log /var/log/nginx/app.access.log;
   }

Я думаю, что это немного натянуто, и я бы проверил это, прежде чем запускать его в производство.

12.10.2018
  • Вам не нужно регулярное выражение отрицания, так как location / будет соответствовать любому URI, который не соответствует /app. Для нетривиальной конфигурации с более чем двумя блоками location вы можете вложить все остальные блоки location в блок location /. 12.10.2018

  • 2

    Директива access_log включает if=condition, которое можно использовать для управления ведением журнала.

    Например:

    map $request_uri $loggable {
        ~^/app  0;
        default 1;
    }
    server {
        access_log /var/log/nginx/main.access.log if=$loggable;
        ...
    }
    

    Дополнительные сведения см. в этом документе.

    В качестве альтернативы можно записать все вместе, а затем разделить на два отдельных файла с помощью grep.


    Вдохновленный решением @Andrea, вы также можете использовать этот шаблон:

    server {
        location / {
            access_log /var/log/nginx/main.access.log;
    
            location /foo { ... }
            location /bar { ... }
            ...
        }
        location /app {
            access_log /var/log/nginx/app.access.log;
        }
    }
    

    Таким образом, верхний уровень имеет только два блока location верхнего уровня, а все остальные блоки location вложены в `местоположение по умолчанию.

    12.10.2018
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..