MPEG-DASH
Как альтернатива HLS, используется для видеотрансляции поверх HTTP. Его основные преимущества — поддержка со стороны большого количества браузеров и работа на javascript-плеере.
И так, его настройка сильно напоминает настройку HLS. В конфиге NGINX:
rtmp {
live on;
dash on;
server {
listen 1935;
application cams {
dash_path /tmp/cams;
}
exec_static ffmpeg -i rtsp://admin:[email protected]:554/Streaming/Channels/1/ -c:v libx264 -profile:v baseline -c:a libfaac -ar 44100 -f flv rtmp://127.0.0.1/cams/stream1;
exec_static ffmpeg -i rtsp://admin:[email protected]:554/Streaming/Channels/1/ -c:v libx264 -profile:v baseline -c:a libfaac -ar 44100 -f flv rtmp://127.0.0.1/cams/stream2;
}
}
* обратите внимание, здесь мы решили настроить все в одном application с разными потоками для каждой камеры
И не потому, что так нужно для MPEG-DASH — скорее для демонстрации возможности различных способов конфигурации.
** также можно заменить, что мы добавили опции конвертации потока при переводе его в RTMP — это важно для MPEG-DASH
Перезапускаем nginx:
systemctl restart nginx
Проверяем появление файлов с расширением .mpd.
ls /tmp/cams
Если они есть, переходим в /tmp
cd /tmp
И выполняем следующую команду:
git clone https://github.com/arut/dash.js.git
* мы скачали js-плеер для просмотра dash-видео.
** по хорошему, в продуктивной среде следует создать отдельный виртуальный домен и хранить все файлы в специальной выделенной директории, а не в каталоге /tmp. Для теста это не принципиально.
И создаем новую ветку live:
cd dash.js
git checkout live
Проверим работу плеера. Открываем браузер и вводим следующий URL:
http://192.168.0.100/dash.js/baseline.html
* где 192.168.0.100 — IP-адрес нашего видео-сервера.
И нажимаем play — начнется показ демонстративного видео.
Теперь откроем файл baseline.html внутри папки dash.js:
vi /tmp/dash.js/baseline.html
Найдем строчку:
url = «http://dash.edgesuite.net/envivio/dashpr/clear/Manifest.mpd»,
И заменим ее на:
url = «http://192.168.0.100/cams/stream1.mpd»,
* где cams — наш application; stream1 — имя потока с первой камеры.
И снова открываем браузер и вводим:
http://192.168.0.100/dash.js/baseline.html
Настройка виртуальных хостов
Как вы знаете, на сервере может размещаться несколько сайтов. Все запросы приходят на ip сервера, а nginx уже определяет на основе домена какой контент нужно выдать. Для того чтобы nginx знал что к какому домену относится нужно настроить виртуальные хосты. Каждый хост принято размещать в отдельном файле. Настройка хоста находится в секции server, но поскольку все файлы из sites-enabled импортируются в секцию http, то логика структуры конфигурационного файла не нарушается.
Рассмотрим пример настройки:
- listen 80 — указывает, что нужно ожидать подключения на порту 80, может также содержать опцию default-server, которая означает, что этот домен будет открывается если домен не был задан в запросе.
- root /var/www/html — директория, в которой находятся файлы сайта.
- index index.html — страница, которая будет открываться по умолчанию.
- server_name — доменное имя сайта.
- access_log — файл для записи лога запросов к серверу, может использоваться как глобально в секции http, так и для определенного типа файлов в location.
- error_log — лог ошибок веб-сервера, может принимать дополнительный параметр, указывающий подробность лога. warn — максимум, crit — только критические ошибки.
Это все основные настройки виртуального хоста, после них он уже будет работать. Но тут есть еще секция location, которая позволяет настроить поведение сервера для определенных директорий и файлов. Синтаксис location такой:
location адрес {}
В качестве адреса может использоваться как прямой запрос относительно корня сервера, так и регулярные выражения. Для использования регулярных выражений перед ним ставится символ «~». Примеры рассмотрим ниже, а пока рассмотрим возможные директивы:
- allow — разрешить доступ к местоположению для пользователей, all — всех, также можно указать ip или подсеть.
- deny — запретить доступ к местоположению, all — для всех.
- try-files — пытается открыть файлы в определенном порядке, открывает первый обнаруженный файл. Например, такая конструкция: $uri $uri/index.html $uri.html =404; сначала пытается открыть $uri, затем index.html, если не найден $uri.html, и аж потом, если ни одного из предложных файлов не существует, выдает ошибку 404.
- expires — задает время кэширования браузером отданного элемента, например, 1d — один день, 2h — два часа, 30s — 30 секунд.
Кроме этих главных директив, здесь могут использоваться и другие. Чтобы получить больше подробностей, смотрите официальную документацию. Рассмотрим пару примеров:
Не выполнять логирование для favicon:
Запретить доступ к файлам, начинающимся с точки:
Кэшировать обычные файлы на 90 дней:
После того, как установка и настройка nginx будет завершена проверяем конфигурацию на ошибки:
Затем перезагружаем сервер:
Если изменялись незначительные параметры можно использовать reload, тогда будет просто обновлена конфигурация без перезагрузки, если же изменяли глобальные опции, нужно перезагрузить программу полностью с помощью restart.
Стандартная установка
Начнем с нуля установку Freebsd 11 на одиночный жесткий диск. Вставляем iso образ в автозагрузку и загружаемся с диска. Нас встречает традиционное окно приветствия с тремя вариантами продолжения:
- Install — начать установку системы.
- Shell — перейти в консоль.
- Live CD — загрузиться в режиме Live CD.
Выбираем установку. На следующем этапе будет предложено выбрать раскладку. Чаще всего достаточно стандартной, так что ничего не меняем, а идем дальше со стандартной раскладкой.
Дальше нужно будет указать имя новой freebsd системы. Назвать можете как угодно, это не принципиально. В случае необходимости, это имя можно будет сменить после установки.
Теперь выбираем компоненты, которые будут установлены. Я обычно ничего не ставлю, кроме lib32. Все, что нужно, можно потом установить последней версии из интернета.
На следующем этапе выбираем разбивку жесткого диска. Можно вручную указать все необходимые разделы, выбрать размер и т.д. Я обычно этого не делаю и все устанавливаю на одном корневом разделе. Давно уже так поступаю на всех системах и не вижу в этом никаких проблем. Наиболее частая рекомендация — вынести в отдельный раздел все логи, чтобы случайно заполнив все свободное место они не повесили сервер. На практике у меня такого ни разу не было, поэтому считаю лишним каждый раз возиться с разделами ради очень условного удобства. Правда есть нюанс — у меня на всех серверах всегда настроен мониторинг свободного места на жестком диске. Так что я успеваю оперативно среагировать на проблемы со свободным местом. Ну и слежу за ротацией логов само собой, не оставляю их расти до больших размеров.
Так что выбираем первый пункт — Auto (UFS). Установку freebsd 11 на zfs мы рассмотрим позже.
Дальше у вас спросят, хотите ли вы занять все свободное место жесткого диска под систему. Если это так, а обычно это так, то соглашайтесь. На следующем этапе указываем таблицу разделов. Я выбираю GPT:
Проверяйте предложенную схему разбивки диска. Если все устраивает, то жмите Finish и согласитесь с применением изменений, начнется установка базовой системы.
Длится она буквально несколько минут. Чистая система ставится очень быстро. По ходу дела будет предложено указать пароль для root. Сделайте это. Далее нужно будет выбрать сетевой интерфейс для настройки.
Если у вас их несколько, то выберите тот, который вы хотите настроить для доступа к сети. После выбора интерфейса нужно будет согласиться с настройкой ip адреса на нем. Дальше я выбираю получить настройки по DHCP. Так проще всего. Если вам нужно вручную указать ip адрес, то откажитесь от dhcp и введите сетевые параметры вручную.
После этого нужно будет указать адрес dns сервера, предварительно отказавшись от ipv6. Если вы получили настройки по dhcp, то адрес уже будет заполнен, нужно будет только подтвердить его. Если настройки вручную указывали, введи сами dns сервер.
Теперь выбираем часовой пояс, дату и время. Ничего сложного нет, скриншоты приводить не буду. Если дата и время указаны верно, то просто выбирайте Skip, если есть расхождения, вручную укажите правильные. Это, кстати, нововведение в 11-й версии. Раньше такого календаря и часов не было.
Установка движется к завершению. Нужно указать, какие службы вы хотите запускать автоматически при загрузке системы. Обязательно укажите sshd, чтобы подключаться к серверу удаленно, еще ntpd не помешает. Остальное на ваше усмотрение, я больше ничего не указываю. dumped стоит по-умолчанию, пусть останется.
На следующем этапе нам предлагается выбрать некоторые параметры безопасности. Я не знаком подробно с этой темой, не разбирался, но по названиям вижу, что вещи весьма полезные. Можно и включить. Тут на ваше усмотрение. Хуже не будет, но и чего-то особенно тоже не ждите. Все эти настройки можно и позже сделать.
На заключительном этапе вам будет предложено добавить пользователей в систему. Если вы этого не сделаете, то не сможете подключиться по ssh к серверу. По-умолчанию в freebsd пользователю root запрещено подключаться по ssh. Это можно исправить только зайдя локально рутом и отредактировав настройки ssh. Так что создайте хотя бы одного пользователя и добавьте его в группу wheel, чтобы можно было подключиться по ssh и сделать su для получения root доступа.
Дальше выбирайте Exit, перезагружайте систему и вынимайте загрузочный диск.
Вы должны загрузиться в свежеустановленной системе Freebsd 11. На этом базовая установка закончена.
4. Настройка PageSpeed
Google Pagespeed — это модуль Nginx, который выполняет различные оптимизации для того, чтобы страницы грузились быстрее, веб-сервер работал эффективнее, а пользователи не чувствовали дискомфорта. Сюда входит кэширование, оптимизация html кода, оптимизация картинок, объединение javascript и css кода и многое другое. Все это выполняется на уровне Nginx, поэтому эффективнее, чем если бы вы это делали в php. Но тут есть один недостаток, модуль удаляет заголовок Last Modified.
Дело в том, что PageSpeed устанавливает очень долгий строк кэширования для всех файлов, а в имя файла добавляет его хэш. Так скорость загрузки ресурсов выходит намного выше, поскольку браузер будет запрашивать файлы только с новым хэшем, а LastModified удаляется чтобы пользователи смогли увидеть изменения в случае если какой-либо файл будет изменен. А теперь рассмотрим как установить модуль. Нам придется собрать его из исходных кодов.
Сначала установите инструменты для сборки, очень важно, если не установите, потом получите ошибку и не будете знать что делать:
Скачайте и распакуйте исходники Nginx для вашей версии, например, 1.13.3:
Настройка сервера nginx не включает пере сборку и замену программы из репозитория, мы просто используем эти исходники для сборки модуля. Скачайте и распакуйте исходники PageSpeed:
Скачайте и распакуйте библиотеку оптимизации PageSpeed в папку с исходниками модуля:
Скачайте и распакуйте исходники OpenSSL 1.02:
Теперь нам нужно собрать модуль. Сначала смотрим опции, с которыми собран текущий Nginx:
А теперь переходим в папку с Nginx, подставляем все полученные опции, опцию —add-dynamic-module для PageSpeed, OpenSSL и пробуем собрать:
Если все было сделано правильно, то на выходе вы получите модуль ngx_pagespeed.so в папке obj, его нужно скопировать в папку /etc/nginx/modules:
Создаем папку для кэша:
Теперь добавьте такую строчку для включения модуля в /etc/nginx/nginx.conf:
Затем, в секцию сервер достаточно добавить:
Теперь вам достаточно перезапустить nginx чтобы изменения вступили в силу:
PageSpeed для Apache
Модуль для apache называется mod_pagespeed и может распространяться как пакет.
Установка модуля немного различается для различных систем. Рассмотрим 2 варианта.
CentOS
Устанавливаем пакеты at и wget:
Затем необходимо скачать установочный пакет:
* в данном примере мы загрузим пакет для 64-битной системы. Для 32-х нужно использовать ссылку https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_i386.rpm.
После можно ставить сам модуль:
Перезапускаем Apache:
Ubuntu
Загружаем установочный пакет:
Устанавливаем скачанный пакет командой:
После установки модуля, необходимо перезагрузить apache:
Настройка
а) если используем CentOS:
б) если используем Ubuntu:
Данный файл хорошо документирован комментариями. Приведем некоторые примеры для настроек.
1. Для отключения модуля находим:
и меняем на:
2. Для указания конкретного каталога хранения кэша меняем опцию для:
3. Путь хранения логов:
Для применения настроек не забываем перезапустить apache:
* данная команда отработает как на CentOS, так и Ubuntu.
Доступ к веб-интерфесу
Веб-интерфейс модуля позволяет увидеть статистику его работы, а также получить сведения о текущих настройках. По умолчанию, доступ к нему разрешен только с локального сервера. Для того, чтобы разрешить подключение с определенной сети открываем файл:
Находим настройку:
И добавляем в нее доступ (Allow from …) — в итоге мы получим, примерно, следующее:
* в данном примере мы добавили разрешение использовать веб-интерфейс для узла 192.168.1.5 и всей подсети 192.168.0.0/24.
Перезапускаем сервис:
Открываем веб-интерфейс по адресу — мы должны увидеть страницу Pagespeed Admin.
Основные файлы конфигурации и журналов NGINX
/etc/nginx этот файл содержит все конфигурационные файлы NGINX.
/etc/nginx/sites-available этот файл содержит дынные серверных блоков, в которых хранят сведения о конфигурации. Требуется это для обслуживания одного или нескольких веб-сайтов.
/etc/nginx/sites-enabled данный файл содержит конфигурации одного или нескольких включенных веб-сайтов.
/etc/nginx/nginx. conf это основной конфигурационный файл, который считывает директивы конфигурации в других файлах.
/var / log/nginx / access. log этот файл хранит данные о всех посещениях вашего сайта
/var/log/nginx/error. log этот файл предназначен для хранения ошибок NGINX
Установка Freebsd 10.2 со скриншотами
Я предпочитаю скачивать bsd и linux дистрибутивы с . Устанавливать будем с образа FreeBSD-10.2-RELEASE-amd64-disc1.iso. Скачиваем диск и загружаемся с него.
Эта версия статьи устарела. вышла новая версия операционной системы. Рекомендую воспользоваться новой инструкцией по установке Freebsd 11.
Если вы будете устанавливать freebsd на hyperv, то рекомендую посмотреть мой материал на эту тему. Там рассказано о некоторых особенностях интеграции freebsd и гипервизора hyperv, а так же подробно показано как создать виртуальную машину.
В начале установки нас встречает привычное окно инсталлятора:
Выбираем Install и продолжаем. Нужно выбрать раскладку. Я лично всегда пользуюсь раскладкой US, поэтому оставляю ее по-умолчанию. Если вам нужна другая, то выбирайте из списка. Если что, дополнительные раскладки можно добавить позже после установки.
Указываем hostname устанавливаемого сервера. Особого значения не имеет, как вы назовете свой сервер. Сменить имя если что не составляет проблемы.
Выбираем компоненты для установки. В принципе, можно ничего не выбирать, все можно скачать позже самой последней версии. Но порты и исходники я все же рекомендую установить. Их потом будет проще обновить, чем скачивать полностью.
Теперь нужно разметить диск. Длительное время я по стародавним рекомендациям вручную размечал диск, делал отдельные разделы под /var, /usr и так далее. Реально сейчас я не вижу в этом необходимости. Я все дистрибутивы устанавливаю на один раздел и выделяю 20-30 Gb места. Для сервера общего назначения этого достаточно. Чем меньше занимает сервер, тем проще его бэкапить и потом восстанавливать. Все, что требует существенный объем дискового пространства монтируется к серверу отдельно тем или иным способом. Так что выбираем автоматическую разметку на UFS.
Я уже давно не устанавливаю сервера на голое железо, всегда использую гипервизоры. Это удобно и эффективно. Сразу выделяю под сервер отдельный диск нужного размера, поэтому при установке можно использовать весь диск. Если у вас не так, то создайте отдельный раздел и установите систему на него. Я выбираю весь диск.
Дальше выбираем таблицу размеров GPT.
Проверяем разметку диска и если все в порядке, то жмем Finish.
Подтверждаем свои намерения
Дальше начинается непосредственно процесс установки freebsd 10.2. Дожидаемся окончания. Время установки будет зависеть от компонентов, которые вы выбрали ранее. Но в любом случае это не долго, минут 10-15 при выборе установки исходников и портов.
После завершения установки указываем пароль root.
Следующим этапом будет настройка сетевого адаптера. У меня только один адаптер, поэтому сразу перехожу к его настройке:
Соглашаемся с предложением настроить ipv4 параметры.
Я получаю настройки по dhcp, так удобнее и быстрее.
Ipv6 мне не нужно, поэтому отказываюсь от его настройки.
Указываем вручную dns сервер.
У меня локальное время не совпадает с временем по Гринвичу, поэтому на соответствующий вопрос отвечаю No.
Выбираем регион расположения своего сервера. Каждый выбирает, что подходит ему.
После выбора региона указываем часовой пояс.
Выбираем службы, которые будут стартовать при запуске системы. Я обычно выбираю только ssh, все остальное мне не нужно.
Дальше нам предлагают создать дополнительных пользователей. Для того, чтобы после установки получить доступ по ssh к серверу, необходимо создать хотя бы одного пользователя и добавить его в группу wheel. По-умолчанию пользователю root запрещен доступ по ssh.
Все, установка по сути окончена. Теперь можно выполнить дополнительные действия, если в них есть необходимость. Если нет, то можно выходить из инсталлятора, выбрав первый пункт Exit и нажав ОK.
Получаем сообщение, что установка Freebsd 10.2 окончена. Нам предлагают вернуться в шелл, если нужно сделать какие-то настройки из консоли. Если вам не надо, то отказывайтесь.
Получаем последнее сообщение установки. Теперь уже точно все. Выбираем Reboot и ждем загрузки свежеустановленной версии Freebsd.
На этом установка окончена. Заходим в консоль сервера и смотрим, что получилось.
Дальше можно выполнить первоначальную настройку freebsd сервера.
Установка Nginx для FreeBSD из исходников
Перейдем в папку /usr/local/src/
# wget http://nginx.org/download/nginx-1.4.2.tar.gz
Распаковываем сам архив:
# tar -xjf nginx-1.4.2.tar.gz
Перейдем в папку с nginx
# cd /usr/local/src/nginx-1.4.2
В папке должен быть файл README, нужно прочитать его чтобы понять с какими параметрами его нужно компилировать, но можно использовать и мой если Вам подходит:
./configure --with-cc-opt="-O2 -fomit-frame-pointer -I /usr/local/include/" \ --without-http_charset_module \ --without-http_userid_module \ --without-http_geo_module \ --without-http_autoindex_module \ --without-http_fastcgi_module \ --with-ld-opt="-L /usr/local/lib"
Собираем nginx выполнив команды:
# make; make install clean
Добавим в rc.conf загрузку и запустим nginx:
# echo 'nginx_enable="YES"' >> /etc/rc.conf # /usr/local/nginx/sbin/nginx
Посмотрим запустился энжинкс (приведу 2 способа как это можно сделать):
# pgrep nginx # ps aux | grep ginx
Если не стартует нужно подправить nginx.conf:
# ee /usr/local/nginx/conf/nginx.conf
Конфигурация nginx.conf:
user www-data www-data; worker_processes 2; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; sendfile on; # Установка Nginx для FreeBSD из исходников #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 3; tcp_nodelay off; gzip on; gzip_comp_level 2; gzip_proxied any; gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; include /etc/nginx/sites-enabled/*; }
Автозагрузка nginx:
Нужно создать скрипт в папке /usr/local/etc/rc.d
#Скрипт по теме "Установка Nginx для FreeBSD из исходников" # nginx.sh #! /bin/sh ### BEGIN INIT INFO # Provides: nginx # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts the nginx web server #Установка Nginx для FreeBSD из исходников # Description: starts nginx using start-stop-daemon ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/local/nginx/sbin/nginx NAME=nginx DESC=nginx test -x $DAEMON || exit 0 # Include nginx defaults if available if [ -f /etc/default/nginx ] ; then . /etc/default/nginx fi set -e case "$1" in start) echo -n "Starting $DESC: " start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/nginx.pid --exec $DAEMON -- $DAEMON_OPTS echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/nginx.pid --exec $DAEMON echo "$NAME." ;; restart|force-reload) echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/nginx.pid --exec $DAEMON sleep 1 start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/nginx.pid --exec $DAEMON -- $DAEMON_OPTS echo "$NAME." ;; reload) echo -n "Reloading $DESC configuration: " start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/nginx/logs/nginx.pid --exec $DAEMON echo "$NAME." ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0
Ставим на папку ограничения (права):
# chmod 755 /usr/local/etc/rc.d/nginx.sh # /usr/local/etc/rc.d/nginx.sh start
Установка Nginx для FreeBSD из исходников завершено! Если что то не понятно написано, прошу пишите мне и я Вам обязательно помогу.
Включение модуля pagespeed
После установки сервера Nginx нужно включить ngx_pagespeed.
Но сначала нужно создать папку, в которой модуль сможет хранить кэш файлов сайта:
Передайте права на эту папку пользователю Nginx, чтобы веб-сервер имел необходимый уровень доступа.
Откройте главный конфигурационный файл Nginx, nginx.conf, для редактирования:
Добавьте в блок server следующие строки и сохраните изменения:
Примечание: Этот код можно добавить в любую точку данного раздела; но в данном примере этот код будет добавлен в конец блока.
Теперь файл /etc/nginx/nginx.conf выглядит так:
Примечание: Конфигурацию pagespeed нужно добавить во все существующие блоки server.
Перезапустите Nginx:
Оптимизация работы с файлами
Пример настроенного nginx.conf:
http {
…
sendfile on;
aio on;
tcp_nopush on;
open_file_cache max=100000 inactive=20s;
open_file_cache_valid 45s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
…
}
sendfile позволяет использовать более совершенный системный вызов, который обеспечивает прямую передачу файла (без системных вызовов read + write).
aio включает использование асинхронного обращения к файлам, что избавит от очередей запросов.
tcp_nopush позволит передавать заголовок ответа и начало файла в одном пакете.
open_file_cache по умолчанию выключена. Задает настройку для кэширования информации о файлах, с которыми работает nginx. По умолчанию, выключено.
open_file_cache_valid задает время, через которое веб-сервер будет проверять актуальность данных. По умолчанию, 60 секунд.
open_file_cache_min_uses задает минимальное число обращений к файлу, чтобы дескриптор файла оставался открытым в кэше.
open_file_cache_errors включает или выключает кэширование ошибок.
Также вы можете найти инструкции по тюнингу, где говорится об опции tcp_nodelay. Ее менять не нужно, так как по умолчанию она уже включена.
Для того, чтобы aio заработал в FreeBSD, необходимо выполнить следующее.
kldload aio
Для автоматической подгрузки модуля во время включения нашего веб-сервера:
ee /boot/loader.conf
…
aio_load=»YES»
Открываем на редактирование файл с настройками лимитов для пользователей и групп:
vi /etc/security/limits.conf
Добавим строки:
…
nginx hard nofile 199680
nginx soft nofile 65535
…
* в данном примере мы задаем ограничение для пользователя nginx на количество открытых файлов.
Зададим ограничение для текущей загрузки:
ulimit -n 65536
Основные ошибки nginx и их устранение
502 Bad Gateway
Ошибка означает, что NGINX не может получить ответ от одного из сервисов на сервере. Довольно часто эта ошибка появляется, когда NGINX работает в связке с Apache, Varnish, Memcached или иным сервисом, а также обрабатывает запросы PHP-FPM.
Как правило, проблема возникает из-за отключенного сервиса (в этом случае нужно проверить состояние напарника и при необходимости перезапустить его) либо, если они находятся на разных серверах, проверить пинг между ними, так как, возможно, отсутствует связь между ними.
Также, для PHP-FPM нужно проверить права доступа к сокету.
Для этого убедитесь, что в прописаны правильные права
listen = /tmp/php5-fpm.sock listen.group = www-data listen.owner = www-data
504 Gateway Time-out
Ошибка означает, что nginx долгое время не может получить ответ от какого-то сервиса. Такое происходит, если Apache, с которым NGINX работает в связке, отдаёт ответ слишком медленно.
Проблему можно устранить с помощью увеличения времени таймаута.
При работе в связке NGINX+Apache в конфигурационный файл можно внести изменения:
server { ... send_timeout 800; proxy_send_timeout 800; proxy_connect_timeout 800; proxy_read_timeout 800; ... }
Тут мы выставили ожидание таймаута в 800 секунд.
Upstream timed out (110: Connection timed out) while reading response header from upstream
Причиной может быть сложная и потому долгая обработка php в работе PHP-FPM.
Здесь тоже можно увеличить время ожидания таймаута
location ~ \.php$ { include fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/tmp/php5-fpm.sock; fastcgi_read_timeout 800; }
800 секунд на ожидание ответа от бекенда.
Это лишь временные меры, так как при увеличении нагрузки на сайт ошибка снова станет появляться. Устраните узкие места, оптимизируйте работу скриптов php
413 Request Entity Too Large
Ошибка означает, что вы пытались загрузить слишком большой файл. В настройках nginx по умолчанию стоит ограничение в 1Mb.
Для устранения ошибки в nginx.conf нужно найти строку
client_max_body_size 1m;
и заменить значение на нужное. Например, мы увеличим размер загружаемых файлов до
client_max_body_size 100m;
Также, можно отключить проверку размера тела ответа полностью значением ноль:
client_max_body_size 0;
Следует помнить, зачем ввели это ограничение: если любой пользователь может загружать файлы на неподготовленный сайт, можно сравнительно легко провести DDOS-атаку на него, перегружая входной поток большими файлами.
После каждого внесённого изменения в конфигурационный файл необходимо перезагружать nginx
304 Not Modified не устанавливается
Если возникает проблема с правильным отображением ответного заголовка сервера , то проблема, скорее всего, в пунктах:
- В секции конкретного сайта включен (Подробнее в документации). По умолчанию, ssi отключен, но некоторые хостеры и ISPManager любят его прописывать в дефолтную конфигурацию сайта включенным. Его нужно обязательно отключить, закомментировав или удалив эту строку;
- if_modified_since установить в , то есть на уровне или конкретного прописать:
Правильность ответа можно проверить с помощью:
- Консоли разработчика браузера (F12) в разделе (не забываем перезагружать страницу);
- Или сторонних сервисов, например last-modified.com.
Установка phpmyadmin на web сервер Freebsd
# cd /usr/ports/databases/phpmyadmin # make install clean
Перемещаем файлы из установочной директории по-умолчанию в наш поддомен pma.site1.ru:
# mv /usr/local/www/phpMyAdmin/* /web/sites/pma.site1.ru/www # mv /usr/local/www/phpMyAdmin/.* /web/sites/pma.site1.ru/www
Меняем владельца:
# chown -R www:www /web/sites/pma.site1.ru/www
Настраиваем DNS записи на pma.site1.ru или просто добавляем в винде в файл hosts строку
192.168.1.21 pma.site1.ru
И заходим по адресу http://pma.site1.ru
У вас должно открыться окно приветствия phpmyadmin. Вводим сюда пользователя и пароль root, которые мы задали в самом начале настройки и попадаем в панель управления базами.
На этом настройка web сервера на базе Freebsd 10.1 и связки nginx + php-fpm закончена.
Статью взял тут.
Установка и настройка Mysql
Дальше устанавливаем сервер баз данных mysql:
# cd /usr/ports/databases/mysql55-server # make install clean
Настройки оставляем дефолтные.
Сервер тянет за собой достаточно большое количество зависимостей. Установка постоянно тормозится и выскакивает окно с настройками очередной зависимости. Чтобы не отвлекаться на это и не тормозить процесс, я рекомендую перед командой make install clean ввести команду:
# make config-recursive
Она проверит все зависимости и выведет сразу настройки этих зависимостей. Потом в процессе сборки пакета уже не будет прерываний.
После завершения установки добавляем запуск сервера в rc.conf:
# echo 'mysql_enable="YES"' >> /etc/rc.conf # echo 'mysql_dbdir="/web/mysql"' >> /etc/rc.conf
Создаем необходимые папки и выставляем права:
# mkdir /web && cd /web && mkdir mysql && chown mysql:mysql mysql/
Создаем файл конфигурации:
# touch /web/mysql/my.cnf # chown mysql:mysql /web/mysql/my.cnf
Записываем следующее содержание в файл настроек:
port = 3306 socket = /tmp/mysql.sock port = 3306 bind-address =127.0.0.1 socket = /tmp/mysql.sock skip-external-locking key_buffer_size = 256M max_allowed_packet = 1M table_open_cache = 256 sort_buffer_size = 1M read_buffer_size = 1M read_rnd_buffer_size = 4M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size= 16M thread_concurrency = 8 #log=/var/log/mysql.log # Лог всех SQL-запросов #log-bin=/var/log/mysql-bin.log # Бинарный лог всех SQL-запросов log-error=/var/log/mysql-err.log # Лог ошибок в работе демона СУБД MySQL #log-slow-queries=/var/log/mysql.slow # Лог всех медленных SQL-запросов #log-bin=mysql-bin #log=/var/log/mysql.log #binlog_format=mixed server-id = 1 quick max_allowed_packet = 16M no-auto-rehash key_buffer_size = 128M sort_buffer_size = 128M read_buffer = 2M write_buffer = 2M interactive-timeout
Закомментированные строки включаем на свое усмотрение в процессе отладки. Если будет включен лог всех SQL запросов, то нужно не забыть настроить ротацию логов, файл будет расти очень быстро, можно забыть и пропустить момент, когда файл займет все свободное место.
Лог файлы нужно обязательно создать самим и выставить на них права пользователя mysql. Если этого не сделать, то сервер не будет стартовать, и что самое неприятное, не будет никаких сообщений в лог файлах. Они будут созданы с правами root:wheel и сервер ничего туда не сможет записать. Так что создаем файлы сами:
# touch /var/log/mysql-err.log # chown mysql:mysql /var/log/mysql-err.log
И стартуем сервер:
# /usr/local/etc/rc.d/mysql-server start
Проверяем, все ли запустилось как следует:
# ps axw | grep mysql
Если все в порядке, то вы увидите что-то похожее на это:
52490 - Is 0:00.02 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/web/mysql/my.cnf --user=mysql --datadir=/web/mysql --pid-file=/web/mysql/websrv.local.pid 52784 - I 0:00.17 /usr/local/libexec/mysqld --defaults-extra-file=/web/mysql/my.cnf --basedir=/usr/local --datadir=/web/mysql --plugin-dir=/usr/local/lib/mysql/plugin --user=mysql --log-err 52802 1 S+ 0:00.00 grep mysql
Дальше воспользуемся стандартным скриптом для безопасной настройки mysql:
# /usr/local/bin/mysql_secure_installation
Задаем пароль root пользователя mysql
Обращаю внимание, что это не системный root. В mysql свои пользователи
На остальные вопросы отвечаем положительно, в принципе, там все понятно описано, ничего сложного нет. Удаляется тестовая база, тестовый пользователь, запрещается удаленный доступ к серверу.
На этом настройка mysql окончена. Идем дальше.