NGINX
#nginx#logs#access_log#error_log#debugging#monitoring

Nginx: настройка логов (access_log, error_log)

Настройка access_log и error_log в nginx: уровни логирования, форматирование, отключение логов для статики, ротация логов.

Настройка логов доступа и ошибок в nginx. Уровни логирования, форматирование, отключение логов для статики.

Базовая настройка логов

http {
    # Глобальные логи (для всех server блоков)
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    server {
        listen 80;
        server_name example.com;

        # Логи для конкретного server блока
        access_log /var/log/nginx/example.com.access.log;
        error_log /var/log/nginx/example.com.error.log;
    }
}

Уровни логирования error_log

server {
    listen 80;
    server_name example.com;

    # Уровни: debug, info, notice, warn, error, crit, alert, emerg
    error_log /var/log/nginx/error.log warn;
    
    # Отдельный лог для debug (только для разработки!)
    error_log /var/log/nginx/debug.log debug;
}

Отключение логов для статики

server {
    listen 80;
    server_name example.com;
    root /var/www/html;

    # Основной лог
    access_log /var/log/nginx/access.log;

    # Статика без логов (улучшает производительность)
    location ~* \.(jpg|jpeg|png|gif|ico|svg|css|js|woff|woff2)$ {
        access_log off;
        expires 1y;
    }

    # API с отдельным логом
    location /api/ {
        access_log /var/log/nginx/api.access.log;
        proxy_pass http://127.0.0.1:3000;
    }
}

Кастомный формат лога

http {
    # Определяем кастомный формат
    log_format custom '$remote_addr - $remote_user [$time_local] '
                     '"$request" $status $body_bytes_sent '
                     '"$http_referer" "$http_user_agent" '
                     '$request_time';

    server {
        listen 80;
        server_name example.com;

        # Используем кастомный формат
        access_log /var/log/nginx/access.log custom;
    }
}

Ротация логов через logrotate

Создайте /etc/logrotate.d/nginx:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

Отключение логов полностью

server {
    listen 80;
    server_name example.com;

    # Отключить все логи (не рекомендуется для продакшена)
    access_log off;
    error_log off;
}

Usage:

Добавьте access_log и error_log в server block или http block. Используйте access_log off для статики для улучшения производительности.

Notes:

⚠️ Уровень debug генерирует очень много логов — используйте только для отладки. Ротация логов через logrotate предотвращает заполнение диска. Отключение логов для статики улучшает производительность на высоконагруженных сайтах.