Logrotate nginx debian настройка

Обновлено: 06.07.2024

Django (Джанго) - это динамично развивающийся web фреймворк с открытым исходным кодом, реализованный на языке Python. Рекомендуемым способом установки Django является связка Apache + mod_wsgi. Как это делается уже рассказывалось ранее в статье "Установка и настройка Apache, mod_wsgi, Django, MySQL".

Однако, всем известно, насколько Apache может быть "тяжелым" для сервера, особенно для статического контента. Поэтому, если нет желания, ставить связку Apache+Nginx, для проектов на Django можно обойтись только одним сервером Nginx. Запуск можно выполнять через FastCGI.

Установка последней стабильной версии Django

Для установки последней версии необходимо скачать исходники и распаковать их:

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

В данном случае, видно что основной версией является Python 2.5 и все дополнительные пакеты устанавливаются в директорию "/usr/lib/python2.5/site-packages".

Следующим шагом необходимо создать символическую связь для распакованной директории Django:

И в конце, чтобы сделать команду django-admin.py доступной из любой директории системы, необходимо добавить еще одну символическую ссылку:

Чтобы убедиться, что Django нормально установлен, необходимо запустить интерпретатор Python и импортировать модуль django:

Все в порядке. Последняя версия Django корректно установлена.

Установка Nginx, flup

Чтобы иметь возможность запускать Django через FastCGI необходимо установить пакет flup, который представляет из себя python-библиотеку для работы с FastCGI. Итак, ставим nginx, flup:

Первым делом создается сам Django-проект, после чего в него добавляются некоторые вспомогательные директории:

Корректировка настроек проекта

Для того, чтобы django-проект корректно запустился, необходимо сделать несколько изменений в настройках:

Создание пользователя для проекта

Для того, чтобы изолировать код проекта от остальной системы, необходимо добавить в систему пользователя, от имени которого будет исполняться код проекта:

Расстановка прав на директории

Необходимо, чтобы доступ к исходному коду имел только владелец, но при этом надо обеспечить взаимодействие с web-сервером через сокет (см. далее), а так же дать доступ к статическим файлам пользователю веб сервера. Для этого, необходимо выполнить следующее:

Взаимодействие Nginx и Django будет проиходить через сокет. Для этого необходимо настроить Nginx для передачи входящих запросов демону FastCGI, и не забыть запустить сам FastCGI демон. FastCGI - демон, в случае Django, запускается почти как простой девелоперский Django-сервер, за исключением нескольких новых параметров.

В данном же случае, оба сервера находятся на одной машине, поэтому эффективнее использовать сокет.

Настройка виртуального хоста в Nginx

Первым делом, необходимо убедиться, что есть конфигурационный файл для передачи FastCGI параметров. Файл /etc/nginx/fastcgi_params должен иметь следующий вид:

Далее, следует добавить файл настройки виртуального хоста:

И добавить следующий текст:

Далее, необходимо включить хост:

Чтобы новый хост заработал, необходимо перестартовать nginx:

Запуск Django FastCGI сервера

Так как в рассматриваемом случае Django и Nginx стоят на одной машине, то логичнее при запуске использовать сокет.

Сервер запускается следующей коммандой:

Все параметры при запуске очевидны. Необходимо лишь отметить "umask=007" выставляется он для того, чтобы право на работу с сокетом имели только владелец и группа сокета. В данном случае, это, соответственно, пользователь dw и группа www-data.

Веб-сервер Nginx - это один из самых популярных веб-серверов с очень высокой производительностью и быстрой обработкой статических запросов от пользователей. При правильной настройке можно добиться очень высокой производительности от этого веб-сервера. Nginx очень быстро справляется со статическими файлами, будь то html страницы или другие виды ресурсов.

1. Установка Nginx

Если вы используете репозиторий EPEL, то нужно указать что не надо из него брать Nginx:

sudo yum-config-manager --save --setopt=epel.exclude=nginx*;

Теперь для установки правильной версии Nginx достаточно набрать:

sudo yum install nginx

Будет установлена самая последняя версия Nginx 1.13.2, с полной поддержкой ALPN. Дальше перейдем к настройке.

2. Настройка Nginx

Первым делом следует рассмотреть структуру конфигурационного файла. На первый взгляд, тут все может показаться очень запутанным, но там все достаточно логично:

Основные глобальные настройки мы будем делать в файле /etc/nginx/nginx.conf. Дальше рассмотрим что именно будем менять и какие значения желательно установить. Начнем с глобальных опций:

  • user - пользователь, от имени которого будет запущен сервер, должен быть владельцем каталога с файлами сайта, и от имени его же нужно запускать php-fpm;
  • worker_processes - количество процессов Nginx, которые будут запущены, нужно установить ровно столько, сколько у вас есть ядер, например, у меня - 4;
  • worker_cpu_affinity - этот параметр позволяет закрепить каждый процесс за отдельным ядром процессора, установите значение auto, чтобы программа сама выбрала что и к чему крепить;
  • worker_rlimit_nofile - максимальное количество файлов, которые может открыть программа, на каждое соединение нужно как минимум два файла и каждый процесс будет иметь указанное вами количество соединений, поэтому формула такая: worker_processes * worker_connections* 2, параметр worker_connections разберем чуть ниже;
  • pcre_jit - включите этот параметр для ускорения обработки регулярных выражений с помощью JIT компиляции;

В секции events стоит настроить два параметра:

  • worker_connections - количество соединений для одного процесса, должно быть достаточным для обработки входящих соединений. Сначала нам нужно знать сколько этих входящих соединений есть, для этого смотрим статистику по адресу ip_сервера/nginx_status. Как включить рассмотрим ниже. В строке Active Connections видим количество активных соединений с сервером, также нужно учесть что соединения с php-fpm тоже считаются. Дальше обратите внимание на поля accepted и handled, первое отображает обработанных подключений, второе - количество принятых. Из значения должны быть одинаковыми. Если отличаются значит соединений не хватает. Смотрите примеры, первый снимок проблема, второй - порядок. Для моей конфигурации оптимальной может быть цифра в 200 соединений (всего 800, учитывая 4 процесса):



  • multi_accept - позволяет программе принимать несколько соединений одновременно, тоже ускоряет работу, при большом количестве соединений;
  • accept_mutex - установите значение этого параметра в off, чтобы сразу все процессы получали уведомление про новые соединения;
  • sendfile - использовать метод отправки данных sendfile. Самый эффективный метод для Linux.
  • tcp_nodelay, tcp_nopush - отправляет заголовки и тело запроса одним пакетом, работает немного быстрее;
  • keepalive_timeout - таймаут поддержания соединения с клиентом, если у вас нет очень медленных скриптов, то будет достаточно будет 10 секунд, устанавливаем значение сколько нужно чтобы пользователь мог быть подключен к серверу;
  • reset_timedout_connection - разрывать соединения после таймаута.
  • open_file_cache - кэшировать информацию об открытых файлах. Например, open_file_cache max=200000 inactive=120s; max - максимальное количество файлов в кэше, время кэширования.
  • open_file_cache_valid - когда нужно проверить актуальность файлов. Например: open_file_cache_valid 120s;
  • open_file_cache_min_uses - кэшировать только файлы, которые были открыты указанное количество раз;
  • open_file_cache_errors - запоминать ошибки открытия файлов.
  • if_modified_since - устанавливает каким образом будут обрабатываться заголовки if-modified-since. С помощью этого заголовка браузер может получить ответ 304 если страница не изменилась с момента последнего просмотра. Возможны варианты - не отправлять - off, отправлять при точном совпадении времени - exact, отправлять если время совпадает точно или больше - before;

Вот как-то так будет выглядеть настройка nginx conf:

listen 194.67.215.125:443 default_server;


4. Настройка PageSpeed

Google Pagespeed - это модуль Nginx, который выполняет различные оптимизации для того, чтобы страницы грузились быстрее, веб-сервер работал эффективнее, а пользователи не чувствовали дискомфорта. Сюда входит кэширование, оптимизация html кода, оптимизация картинок, объединение javascript и css кода и многое другое. Все это выполняется на уровне Nginx, поэтому эффективнее, чем если бы вы это делали в php. Но тут есть один недостаток, модуль удаляет заголовок Last Modified.

Дело в том, что PageSpeed устанавливает очень долгий строк кэширования для всех файлов, а в имя файла добавляет его хэш. Так скорость загрузки ресурсов выходит намного выше, поскольку браузер будет запрашивать файлы только с новым хэшем, а LastModified удаляется чтобы пользователи смогли увидеть изменения в случае если какой-либо файл будет изменен. А теперь рассмотрим как установить модуль. Нам придется собрать его из исходных кодов.

Сначала установите инструменты для сборки, очень важно, если не установите, потом получите ошибку и не будете знать что делать:

yum install wget gcc cmake unzip gcc-c++ pcre-devel zlib-devel

Скачайте и распакуйте исходники Nginx для вашей версии, например, 1.13.3:

Настройка сервера nginx не включает пере сборку и замену программы из репозитория, мы просто используем эти исходники для сборки модуля. Скачайте и распакуйте исходники PageSpeed:

Скачайте и распакуйте библиотеку оптимизации PageSpeed в папку с исходниками модуля:

Скачайте и распакуйте исходники OpenSSL 1.02:

Теперь нам нужно собрать модуль. Сначала смотрим опции, с которыми собран текущий Nginx:

А теперь переходим в папку с Nginx, подставляем все полученные опции, опцию --add-dynamic-module для PageSpeed, OpenSSL и пробуем собрать:

Если все было сделано правильно, то на выходе вы получите модуль ngx_pagespeed.so в папке obj, его нужно скопировать в папку /etc/nginx/modules:

cp ngx_pagespeed.so /etc/nginx/modules/ngx_pagespeed.so

Создаем папку для кэша:

Теперь добавьте такую строчку для включения модуля в /etc/nginx/nginx.conf:


Затем, в секцию сервер достаточно добавить:

pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
location


Теперь вам достаточно перезапустить nginx чтобы изменения вступили в силу:

Выводы

Настройка Nginx завершена, возможно, остались еще и другие оптимизации, которые помогут ускорить Nginx, но они не войдут в эту статью. А какие оптимизации используете вы? Напишите обязательно в комментариях! Надеюсь, эта информация была полезной вам.

В Linux, большинство сервисов и программ, которые работают в фоне, таких как Apache, Nginx, Postfix и других записывают информацию о своем состоянии, результатах работы и ошибках в лог файлы. Стандартное расположение логов или как их еще называют - журналов - в папке /var/log.

С помощью анализа логов вы можете понять что работает не так, почему произошла ошибка и как решить возникшую проблему. Но тот кроется одна проблема. Размер логов постоянно растет и они занимают все больше и больше места на диске, поэтому необходимо вовремя чистить логи и удалять устаревшие записи, чтобы они не мешали нормально работать. Это можно делать вручную время от времени или настроить скрипты Cron, но есть еще более простой вариант - утилита logrotate. В этой статье будет рассмотрена настройка logrotate и ее использование.

Как работает Logrotate?

Утилита Logrotate предназначена для автоматизации обработки журналов. Она может выполнять с ними необходимые действия в зависимости от определенных условий и правил соответствия. Например, можно сжимать журналы в архив или отправлять на другой сервер когда они достигают определенного размера, возраста, или других параметров.

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

Настройка Logrotate

Logrotate - это популярная утилита, поэтому в большинстве дистрибутивов она поставляется по умолчанию. Вы можете убедиться, что программа установлена в вашем дистрибутиве, попытавшись ее установить. Например, в CentOS:

sudo yum install logrotate


Или в Ubuntu и основанных на ней дистрибутивах:

sudo apt install logrotate

Теперь, даже если утилита не была установлена, вы ее установите. Все основные настройки программы находятся в файле /etc/logrotate.conf, дополнительные настройки, касаемо правил и других возможностей могут быть размещены в папке /etc/logroate.d/. Вы можете размещать все настройки logroatae прямо в основном конфигурационном файле, будет более правильно, если настройки для каждого отдельного сервиса будут находиться в отдельном файле, в папке /etc/logrotate.d/.

Чтобы конфигурационные файлы из этой папки загружались программой, необходимо добавить в основной конфигурационный файл такую строчку:


Просто убедитесь что она там уже есть. Сначала давайте рассмотрим основные директивы, которые мы будем применять во время настройки. Здесь директивы выглядят не совсем обычно, сама директива и определяет что и когда нужно делать, а уже если нужно, ей передаются дополнительные параметры. Чтобы указать как часто нужно выполнять проверку совпадению условий используются такие директивы:

Основные директивы управления и обработки логов:

  • rotate - указывает сколько старых логов нужно хранить, в параметрах передается количество;
  • create - указывает, что необходимо создать пустой лог файл после перемещения старого;
  • dateext - добавляет дату ротации перед заголовком старого лога;
  • compress - указывает, что лог необходимо сжимать;
  • delaycompress - не сжимать последний и предпоследний журнал;
  • extension - сохранять оригинальный лог файл после ротации, если у него указанное расширение;
  • mail - отправлять Email после завершения ротации;
  • maxage - выполнять ротацию журналов, если они старше, чем указано;
  • missingok - не выдавать ошибки, если лог файла не существует;
  • olddir - перемещать старые логи в отдельную папку;
  • postrotate/endscript - выполнить произвольные команды после ротации;
  • start - номер, с которого будет начата нумерация старых логов;
  • size - размер лога, когда он будет перемещен;

Это те основные директивы, которые мы будем использовать. В главном конфигурационном файле находится глобальная конфигурация, директивы, которые будут распространяться на все логи если не было отменено их действие. Каждый лог, который подлежит ротации описывается таким образом:

адрес_файла_лога
директивы
>

Теперь давайте создадим файл rsyslog.conf в папке /etc/logrotate.d/ и поместим в него настройки для ротации этого лога:

/var/log/messages daily
rotate 3
size 10M
compress
delaycompress
>


Эти настройки означают, что ротация журналов будет выполняться ежедневно, и мы будем хранить три последних журнала, более старые копии будут автоматически удаляться. Минимальный размер для ротации - 10 мегабайт, ротация не будет выполнена, если лог не занимает более 10 мегабайт. Будет использоваться сжатие, для всех журналов кроме последнего и предпоследнего. Точно по такому же принципу вы можете настроить ротацию логов для любого из журналов. Нужно создать такую секцию для каждого из логов, которыми вы хотите управлять.

Теперь осталось протестировать как работает наша конфигурация. Для этого запустим утилиту logrotate с опцией -d. Она выведет все, что планируется сделать, но не будет изменять файлы на диске. У нас есть файл /var/log/messages, размером 40 Мегабайт, посмотрим что будет делать утилита:

logrotate -d /etc/logrotate.d/rsyslog.conf



Как видите, программа обнаруживает файл лога и разделяет его на несколько частей. Вы можете убедиться, что logrotate будет запускаться как положено проверив расписание cron:


Настройка Logrotate завершена, а вам осталось всего лишь расписать как будет выполняться ротация логов для каждого из журналов, которые занимают много места.

Выводы

В этой статье мы рассмотрели как выполняется настройка logrotate centos или в любом другом дистрибутиве Linux. Работа утилиты не сильно отличается в зависимости от дистрибутивов. Если у вас есть сервер с большой нагрузкой, вам обязательно необходимо настроить ротацию логов. Надеюсь, эта информация была полезной для вас. На завершение видео, о том как выполняется ротация логов в Ubuntu от LPIC:

И еще одно на английском:

Logrotate - приложение, разработанное для облегчения управления лог-файлами. Особенно Logrotate полезен там, где создается большое количество лог-файлов. Утилита позволяет в автоматическом режиме архивировать, удалять, очищать и отправлять на e-mail лог-файлы. Этот процесс обычно называется ротацией лог файлов.

Logrotate может быть настроен на ежедневную, еженедельную или ежемесячную ротацию. Кроме того, можно задать размер файла, по достижении которого файл будет ротирован. Обычно logrotate выполняется в качестве каждодневного задания (cron).

Установка обычна для Debian / Ubuntu-based дистрибутивов:

Описание того, каким образом Logrotate будет работать с тем или иным лог файлом находится в специальном конфигурационном файле. Как правило, они располагаются в директории /etc/logrotate.d/. Например, файл конфигурации для apache2 выглядит следующим образом:

При этом, первая строка /var/log/apache2/*.log есть ничто иное, как шаблон обрабатываемых лог-файлов. Он означает, что указанная конфигурация ротации будет использоваться для всех файлов, находящихся в директории /var/log/apache2/ и имеющих расширение "log".

Допустимых директив в конфигурационном файле очень много (более 40). Поддробнее о них можно узнать из man logrotate.

Как правило, после настройки конфигурационного файла появляется необходимость проверить работу logrotate для новых логов. Для этого есть возможность непосредственного запуска logrotate из командной строки. При этом допускаются следующие опции:

-d. Всключает режим отладки, а так же дублирует опциию -v. В режиме отладки никаких действий с логами не будет выполнено.

-f, --force. Заставляет logrotate выполнить ротацию логов. Бывает необходимо после добавления новых конфигурационных файлов или если старый лог файл был удалён вручную; таким образом будут созданы новые лог-файлы и журналирование будет корректно продолжено.

-m, --mail command. Указывает, какую команду использовать для отправки журналов по почте. Команда должна принимать 2 входных параметра:

-s, --state statefile. Указывает на использование альтернативный файл состояния. Полезно в случаях, когда logrotate работает от имени разных пользователей для различных наборов лог-файлов. Дефолтный файл состояния: /var/lib/logrotate/status

--usage. Выводит краткую инструкцию по использованию утилиты.

Комментарии по ходу текста не должны оставить вопросов. Но в общем, схема такова, что отдельно ротируются логи nginx, отдельно логи apache2. При этом, так как nginx является front-end'ом и его лог наполняется интенсивнее, чем у apache, то он (лог nginx) ротируется в 7 раз чаще, чем лог apache2.

Кроме того, при каждой итерации ротирования логов nginx выполняется сбор статистики посещений AWstats (см. Установка и настройка AWstats и Настройка AWstats для генерации статистики по дням).

После того, как конфигурационный файл создан, необходимо убедиться, что все будет работать именно так, как и задумано. Для этого необходимо выполнить (при этом, реальных изменений никаких не будет, так как запуск будет выполнен в отладочном режиме):

В дальнейшем ротация будет выполняться автоматически с заданным в конфигурационном файле интервалом.

Читайте также: