Настройка VDS на Ubuntu 14.04. Часть 5. Установка и настройка NGINX

34 комментариев
Установка и настройка NGINX

Мы продолжаем цикл статей о настройке VDS с операционной системой Ubuntu 14.04. В сегодняшней части мы приступим к установке необходимого программного обеспечения на сервер после аренды VPS сервера. Конкретные приложения, о которых сегодня пойдет речь, рассматривались нами в предыдущей статье, где мы рассказали об основном программном обеспечении, которое требуется на сервере, а также описали его основной функционал.
Сегодня мы не только установим и настроим данное программное обеспечение, но и приведем основные команды, необходимые для управления им.
В первую очередь речь пойдет о веб-сервере. На данный момент существует несколько разных веб-серверов, но мы остановимся на наиболее популярных и эффективных веб-серверах: NGINX и Apache. Их описание было также приведено в прошлой статье, напомним, что их можно использовать как раздельно, так и в различных связках. Существуют различные схемы их использования, например:

  1. NGINX + PHP-FPM - для работы PHP приложений;
  2. NGINX + UWSGI/GUNICORN - для работы Django;
  3. NGINX + APACHE + mod_php/mod_python - производительная связка с использованием сильных сторон обоих серверов;
  4. APACHE + mod_php/mod_python - классическая схема.

Рекомендуем Вам выбрать нужную для работы Вашего сайта схему. Если Вы затрудняетесь, используйте универсальные схемы с учетом языка программирования сайта: NGINX + PHP-FPM (UWSGI/GUNICORN) и APACHE + mod_php(mod_python). Теперь, когда Вы определились c тем, какой или какие веб-серверы Вы будете использовать, мы перейдем напрямую к процессу установки веб-сервера NGINX.

В данной статье мы рассмотрим лишь основные, общие параметры NGINX; полную и более детальную документацию Вы найдете на официальном сайте NGINX: http://nginx.org/ru/docs/

NGINX является одним из самых популярных веб-серверов и имеет широкое применение в различных областях. Он позволяет не только обрабатывать запросы, но и качественно фильтровать их, а также балансировать нагрузку.

Установка NGINX

Установка сервера может быть выполнена либо из стандартного репозитория операционной системы (в данном случае Ubuntu 14.04), либо из отдельного репозитория разработчиков NGINX: http://nginx.org/ru/linux_packages.html.

Вариант 1: установка NGINX из репозитория операционной системы

Для установки из репозитория достаточно выполнить команду apt-get. Если Вы затрудняетесь в выборе количества включенных в программу библиотек, Вы можете установить полный пакет:

$ sudo apt-get install nginx-full

Если же требуется обычный пакет, то введите следующую команду:

$ sudo apt-get install nginx

Вариант 2: установка NGINX из репозитория разработчика

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

$ sudo wget http://nginx.org/keys/nginx_signing.key
$ sudo apt-key add nginx_signing.key

Далее откройте список репозиториев:

$ sudo vi /etc/apt/sources.list

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

deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx

Теперь необходимо сохранить изменения в файле и выполнить следующие команды:

$ sudo apt-get update
$ sudo apt-get install nginx

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

NGINX


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

Общая настройка NGINX

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

Модули, из которых состоит NGINX, можно настроить при помощи директив, которые, в свою очередь, подразделяются на простые и блочные. Блочная директива отличается от простой тем, что в ней содержатся дополнительные инструкции. Контекст – это блочная директива, внутри которой можно задавать другие директивы. Что касается блоков, то для настройки NGINX необходимо остановиться на следующих разновидностях: блок server отвечает за конфигурацию для виртуального сервера, в блоке http (в котором находится блок server) прописываются директивы HTTP-сервера, а блоки location определяют конфигурацию в зависимости от URI-запроса.

Теперь перейдем к самому процессу настройки NGINX.

Для начала необходимо настроить файл nginx.conf:

$ sudo nano /etc/nginx/nginx.conf

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

  • User – пользователь и группа, права которых будут использоваться для запуска рабочего процесса;
  • worker_processes – число рабочих процессов (воркеров). Рекомендуется поставить значение “auto”, т.к. число будет равно числу процессорных ядер;
  • error_log – конфигурирует запись в лог;
  • pid - определяет, в каком файле будет храниться номер основного процесса;

блок events:

  • worker_connections – определяет максимальное количество соединений, которые одновременно может открыть рабочий процесс;
  • use - метод, который будет использоваться для обработки соединений;
  • multi_accept - определяет, какое количество соединений будет принимать рабочий процесс за один раз (on – все новые соединения; off – только одно новое соединение);

блок http:

  • include – включение файла или файлов, которые подходят под заданную маску;
  • default_type - тип данных по умолчанию;
  • server_tokens – позволяет включить (on) или отключить (off) вывод версии NGINX в заголовках ответа или ошибках;
  • sendfile – позволяет включить (on) или отключить (off) метод отправки данных sendfile();
  • sendfile_max_chunk - определяет объем данных, который может передаваться за один вызов sendfile. Если установить на ноль, то одно быстрое соединение может полностью захватить рабочий процесс;
  • tcp_nopush – при включении позволяет передавать заголовок ответа и начало файла одним пакетом, а также передавать файл целым пакетом;
  • reset_timedout_connection - позволяет включить (on) или отключить (off) сброс соединений по таймауту;
  • client_header_timeout – определяет время, за которое клиент должен успеть передать полностью заголовок;
  • client_body_timeout – определяет таймаут при чтении тела запроса клиента;
  • send_timeout – задается время, по истечении которого соединение закрывается, если клиент ничего не принимает;
  • client_header_buffer_size – определяет буфер для чтения заголовка запроса клиента (по умолчанию равняется 1K);
  • client_body_buffer_size – определяет буфер для чтения тела запроса клиента;
  • client_max_body_size – определяет максимально допустимый размер тела запроса клиента;
  • access_log - позволяет включить (on) или отключить (off) лог доступа;
  • include – подключение дополнительных конфигураций.

Поэтапная настройка NGINX

Рекомендуем Вам сначала проверить и скорректировать настройки по умолчанию в файле /etc/nginx/nginx.conf.

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

user admin;

Затем укажите число рабочих процессов. Мы советуем исходить из количества процессорных ядер в Вашем сервере, то есть число рабочих процессов будет равняться числу процессорных ядер (но Вы можете поставить и какое-либо другое значение). Это число задается следующей командой:

worker_processes 2;

Далее Вы можете указать место, куда будут записываться файлы с логами ошибок:

error_log /spool/logs/nginx/nginx.error_log notice;

Всего существует 7 уровней уведомлений: info, notice, warn, error, crit, alert и emerg. Уровни перечислены в порядке от наименее важных сообщений к наиболее важным. Выставляя уровень, учитывайте, что в файл логов будут попадать все сообщения этого и более высоких по важности уровней.

Затем Вам нужно будет выбрать метод обработки соединений. Если Вы затрудняетесь в выборе, тогда NGINX самостоятельно выбирает метод, который является наиболее эффективным. Ознакомиться со всеми поддерживаемыми методами Вы можете по этой ссылке: http://nginx.org/ru/docs/events.html

Теперь Вы должны определиться с максимальным числом соединений, которое одновременно будет обрабатывать рабочий процесс. Высчитывая это число, держите в уме, что максимальное количество обслуживаемых клиентов будет равно произведению worker_connections и worker_processes.
У Вас должен получиться похожий код:

events {
worker_connections 2048;
}

В следующем блоке настроек первым делом необходимо включить sendfile(), так как это позволяет улучшить производительность сервера:

sendfile on; 

Далее выставите параметр, касающийся времени поддержания соединения, если по нему нет запросов:

keepalive_timeout 15;

Теперь Вам необходимо включить файл, отвечающий за поддержку MIME-типов, используя директиву include:

include /etc/nginx/mime.types;

Данная настройка определяет соответствие между MIME-типами и расширениями имен файлов, и, как правило, этот файл содержит большинство соответствий. В данном случае соответствие будет задаваться директивой types. Полный список соответствий Вы можете найти в файле conf/mime.types.

Далее Вам нужно указать тип данных по умолчанию:

default_type application/octet-stream;

Теперь перейдем к настройке, которая касается сжатия; за нее отвечает модуль gzip. Благодаря ему размер данных, которые передаются, может быть уменьшен в два раза и более. Строка со включенным gzip выглядит следующим образом:

gzip on;

Поэтому если Вы хотите выключить сжатие ответа данным методом, вместо “on” Вам нужно написать “off”.
Следующее, с чем необходимо определиться, - это размер и количество буферов, в которые будет сжиматься ответ:

gzip_buffers 16 8k;

При этом размер одного буфера, как правило, соответствует размеру страницы.

Теперь укажите, на каком уровне компрессии будет происходить сжатие (выбирайте значение от 1 до 9):

gzip_comp_level 7;

Еще одна из возможных настроек - минимальная длина ответа, для которого будет использовано сжатие:

gzip_min_length 512;

Вы можете также определить, к каким MIME-типам будет применено сжатие ответа при помощи gzip. По умолчанию эта строка выглядит так:

gzip_types text/html

Но Вы можете добавить и какие-либо еще типы. Если Вы хотите, чтобы сжатие применялось ко всем MIME-типам, тогда введите знак звездочки “*”.

Сжатие ответа для проксированных запросов определяется отдельным параметром:

gzip_proxied any;

По умолчанию эта возможность выключена (off), но Вы можете установить там один или несколько других параметров, к примеру, “auth” разрешит использование gzip, если заголовок вопроса содержит поле “Authorization”. Параметр “Any” делает возможным сжатие для всех проксированных запросов.

Теперь давайте перейдем к настройке файлов логирования.

За запись логов в NGINX отвечает модуль ngx_http_log_module. Он записывает логи в том формате, который указан; по умолчанию (если Вы не укажите какой-либо другой) выбирается “combined”:

access_log logs/access.log combined

Обычно логи сохраняются в директории location, при этом Вы можете сделать перенаправление, и тогда location будет отличным от изначального.
Сама конфигурация логов может выглядеть следующим образом:

log_format compression '$remote_addr - $remote_user [$time_local] '
 '"$request" $status $bytes_sent '
 '"$http_referer" "$http_user_agent" "$gzip_ratio"';

access_log /spool/logs/nginx-access.log compression buffer=32k;

Давайте рассмотрим каждую из директив данной конфигурации:

  • log_format – определяет формат логов; Вы можете использовать как общие переменные, так и переменные, которые существуют только в тот момент, когда происходит запись в лог. К примеру, в данной директиве:
  • $remote_addr – адрес клиента;
  • $remote_user – имя пользователя;
  • $time_local - локальное время;
  • $request - первоначальная строка запроса целиком;
  • $status – статус ответа;
  • $bytes_sent – размер байт, которые были переданы клиенту;
  • $http_referer и $http_user_agent - поля заголовка запроса клиента;
  • $gzip_ratio - достигнутый коэффициента сжатия будет записан в лог.

Следующая директива access_log указывает путь, формат (будет сжат файл или нет) и настройки записей. Также существует директива open_log_file_cache, которая определяет кэш, где будут храниться файловые дескрипторы тех логов, которые часто используются.

При желании Вы можете сделать запись буферизированной. Есть два способа сделать это: можно использовать параметр buffer, определив размер буфера (размер по умолчанию равняется 64 Кбайт), либо укажите параметр gzip (этот параметр также отвечает за сжатие файла: Вы можете выбрать значение от 1 до 9, при этом 1 равняется быстрому, но не очень хорошему сжатию, а 9 равняется хорошему, но медленному сжатию). Для чтения подобных сжатых логов файл необходимо распаковывать, либо Вы можете использовать утилиту “zcat”.

Заключительным этапом настройки веб-сервера является включение необходимого сайта (или сайтов), а также SSL при помощи директивы include:

include /etc/nginx/sites-enabled/*;
include /etc/nginx/ssl-enabled/*;

Настройки блоков server

NGINX использует блоки server для обслуживания на одном сервере сразу нескольких доменов.
Изначально NGINX имеет лишь один стандартный блок server, который используется для обслуживания документов из каталога /usr/share/nginx/html. Однако наиболее безопасно и правильно хранить настройки каждого Вашего сайта отдельно (в разных файлах).
Поэтому первым делом нам необходимо создать структуру каталогов. Для этого Вам необходимо создать новый каталог, и уже в нем создать файлы конфигурации сайтов:

$ sudo mkdir -p /var/www/primer.ru/html
$ sudo mkdir -p /var/www/primer2.ru/html

Следующая команда передаст права на них постоянному пользователю ($USER):

$ sudo chown -R $USER:$USER /var/www/primer.ru/html
$ sudo chown -R $USER:$USER /var/www/primer2.ru/html

Теперь перейдем к созданию страниц для сайтов:

$ nano /var/www/primer.ru/html/index.html
$ nano /var/www/primer2.ru/html/index.html

Мы рекомендуем Вам скопировать в созданные файлы пример страницы сайта, который Вы видите ниже:

<html>
<head>
<title>Добро пожаловать на primer.ru!</title>
</head>
<body>
<h1>Все отлично! Блок server сайта primer.ru работает корректно.</h1>
</body>
</html>

Следующим шагом будет создание блоков server. Для этого выполните следующую команду:

$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/primer.ru

И затем откройте этот файл, используя root-права, и добавьте следующий текст:

server {
listen 80;
listen [::]:80;
root /usr/share/nginx/html;
index index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
}

Настройки, которые Вы здесь видите, имеют следующие функции:

  • listen - определяет IP-адрес и порт, а также может указывать путь для UNIX-сокета;
  • root - определяет, какой каталог будет использоваться для запросов;
  • index - задает, какие файлы будут использоваться в качестве индекса;
  • server_name - имя виртуального сервера;
  • location - задает конфигурацию в зависимости от URI-запроса. Этот параметр может быть задан как префиксной строкой, так и регулярным выражением. В данном случае try_files обозначает, что для обработки запроса будет использоваться первый найденный файл ($uri); обозначить каталог Вы можете при помощи косой черты ($uri/); если же ни один из данных файлов не будет найден, то идет перенаправление на последний параметр.

В данном файле Вам нужно отредактировать следующие настройки.
В root запишите путь к каталогу с Вашим сайтом:

root /var/www/primer.ru/html;

Также Вы меняете server_name, при этом нужно обязательно указать доменное имя своего сайта:

server_name primer.ru www.primer.ru;

Теперь мы можем перейти к запуску блока server, используя следующую команду:

$ sudo ln -s /etc/nginx/sites-available/primer.ru /etc/nginx/sites-enabled/

Для того, чтобы предотвратить конфликт нового блока с блоком по умолчанию (default), его необходимо отключить:

$ sudo rm /etc/nginx/sites-enabled/default

А затем раскомментировать строку (убрать спецсимвол) server_names_hash_bucket_size 64; в файле /etc/nginx/nginx.conf.

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

proxy_buffers 8 64k;
proxy_intercept_errors on;
proxy_connect_timeout 1s;
proxy_read_timeout 3s;
proxy_send_timeout 3s;

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

charset utf-8;

Включите SSI и установите, чтобы SSI-переменные резервировали не более 1 Кбайта:

ssi on;
ssi_value_length 1024;

Наконец, нам необходимо перейти к блоку location, который отвечает за конфигурацию в зависимости от URI-запроса. Вы можете добавить не один, а несколько блоков location, к примеру, два:

server {
 location / {
 root /data/www;
 }

location /images/ {
 root /data;
 }
}

В данном случае первый блок location имеет путь для запросов (root) - конечный путь к запрашиваемому файлу будет формироваться путем добавления URI из запроса к пути из директивы root. При совпадении этого пути в нескольких блоках location будет выбран путь, имеющий самый длинный префикс (он задается косой чертой “/”).
Второй блок, который мы настроили, дает совпадение с запросами, начинающимися с /images/.
Также блок location используется при настройке прокси-сервера. Для этого в первом блоке нужно прописать параметры директивы proxy_pass, а именно протокол и адрес проксируемого сервера:

location / {
 proxy_pass http://localhost:8080;
 }

Вы можете использовать этот параметр для задания пути к веб-серверу Apache на порту 9999:

location / {
proxy_pass 127.0.0.1:9999;
}

При этом при использовании NGINX как прокси-сервера Вы можете задать множество разных параметров, к примеру, proxy_read_timeout, который определяет таймаут при чтении ответа прокси-сервера, или proxy_send_timeout, который определяет таймаут при передаче запроса.

Вы также можете настроить NGINX так, чтобы он перенаправлял запросы на FastCGI-серверы. Для этого вместо директивы proxy_pass Вам нужно использовать директиву fastcgi_pass, а также директиву fastcgi_param, в которой задается параметр, который затем будет передаваться FastCGI-серверу:

server {
 location / {
 fastcgi_pass localhost:9000;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_param QUERY_STRING $query_string;
 }

В этом случае файл SCRIPT_FILENAME определяет имя скрипта, а QUERY_STRING - параметры запроса.

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

$ sudo service nginx restart

Создание настроек для нескольких сайтов

После настройки основного сайта рекомендуем Вам составить список сайтов и определить, какой сайт должен открываться по IP-адресу сервера (если он один). Затем в директории /etc/nginx/sites-available создать файлы с сайтами, заполнить их настройками и сохранить их. Так как сервер учитывает только настройки из директории /etc/nginx/sites-enabled, то необходимо создать символическую ссылку на файл:

$ ln -s /etc/nginx/sites-available/имя_сайта
/etc/nginx/sites-enabled/имя_сайта

Это позволит Вам отключать сайт на время без удаления его конфигурационного файла. Проверить конфигурацию NGINXпосле работ можно командой:

$ sudo nginx -t

Если вывод содержит "syntax is ok" и "test is successful", то можно применить настройки, написав команду:

$ sudo service nginx reload

Команды для управления сервером NGINX

Рассмотрим основные команды, которые можно использовать для управления сервером NGINX.
Остановить веб-сервер NGINX:

$ sudo service nginx stop

Запустить NGINX после остановки:

$ sudo service nginx start

Перезапустить (остановить и запустить снова) одной строкой:

$ sudo service nginx restart

Автоматически перезапускать NGINX после перезагрузки сервера:

$ sudo update-rc.d nginx defaults

Если эта опция включена по умолчанию, Вы увидите примерно следующее сообщение в консоли:

System start/stop links for /etc/init.d/nginx already exist.

Мы надеемся, что информация в этой статье оказалась для Вас полезной и помогла справиться с установкой и настройкой веб-сервера NGINX. В следующей статье мы расскажем о том, как правильно установить и настроить веб-сервер Apache.
Если у Вас возникли вопросы, спрашивайте в комментариях, мы будем рады Вам помочь.

VDS/VPS на Timeweb

Комментарии

Sergey Eremin 0
27 мая в 2016
Здравствуйте! Было бы здорово, если напишите статью о настройке: NGINX + APACHE + mod_php/mod_python.
Свернуть ответы
Кристина Лихова +124
27 мая в 2016
Сергей, мы обязательно учтем ваше пожелание.
Сейчас рекомендуем вам прочитать недавно опубликованную статью, касающуюся установки и настройки веб-сервера Apache: https://community.timeweb.com/articles/nastroyka-vds-na-ubuntu-14-04-chast-6-ustanovka-i-nastroyka-apache-1
Sergey Eremin 0
13 июня в 2016
Здравствуйте! Пробовал несколько раз установить на чистую ubuntu 14.04 из репозитория разработчика чётко по статье, после установки не работают команды nginx 1.11.1 и не открывается стартовая страница проверки по айпи, работает только проверка версии сервера. Возможно несоответствие версий? Кто сталкивался, подскажите, пожалуйста, как корректно установить.
Свернуть ответы
Андрей 0
14 июня в 2016
Посмотрел на своей VDS, все как написано сделал копированием и вставкой. Вроде нормально все, "Welcome to nginx!" открылось сразу (версия установилась nginx/1.11.1). Может, что то все же не так копировалось? И не включен ли случаем firewall (без правила что 80 порт пропускать)?
Sergey Eremin 0
14 июня в 2016
Дело в том, что при таком способе почему-то не добавляются правила utw для nginx. И как итог: firewall закрывает порт 80. Подскажите, пожалуйста, как их добавить. Не смог найти как это сделать.
Андрей 0
14 июня в 2016
По firewall ufw написано хорошо (с командами что нужны) в данной статье, также видел в цикле статей про 14-04 описание команд.
https://community.timeweb.com/articles/kak-ustanovit-nginx-na-ubuntu-16-04-1.
Кристина Лихова +124
14 июня в 2016
Сергей, здравствуйте!
Напишите, пожалуйста, какие действия вы конкретно выполняете и при помощи каких команд? Крайне важно понять порядок ваших действий, чтобы можно было дать максимально полезный ответ.
Sergey Eremin 0
14 июня в 2016
В админ-панели timeweb нажимаю переустановка системы. Далее делаю всё по статье №2 первичная настройка.
sudo wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
sudo nano /etc/apt/sources.list
Добавляю в конце две строки:
deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx
Затем:
sudo apt-get update
sudo apt-get install nginx
Испробованы варианты с отключением ufw, файл с правилами ufw для nginx всё равно отсутствует или пустой.
Sergey Eremin 0
14 июня в 2016
Пробовал, но к сожалению для ubuntu 14 данная настройка и команды не работают.
Sergey Eremin 0
14 июня в 2016
Проблема тупиковая, для ubuntu 16 есть информация как настроить utw, а для 14-ой нет. Считаю, что раз на timeweb нет ubuntu 16.04 то помогла бы статья, а получается она неполная и нет решения для конкретной проблемы. Nginx 1.4 точно пользоваться никто не будет.
Свернуть ответы
Андрей 0
14 июня в 2016
Не знаю, почему у тебя не работает - интереса ради попробовал у себя абсолютно с нуля, благо собирался сервер новый ставить. Только ОС поставилась, ufw не активен был. Работает) А по настройке ufw для 14 ubuntu, нашел тут для себя инфу: https://community.timeweb.com/articles/nastroyka-vds-na-ubuntu-14-04-chast-2-pervichnaya-nastroyka-os.
Sergey Eremin 0
14 июня в 2016
По этим статьям и настраиваю. И когда был на другом хостере, где была 16-я убунту, проблем не знал. А вот тут всё досканально по статьям делаю, переустанавливал ось уже раз 20, результат в связке ubuntu 14.04 и nginx 1.11.1 из репозитория разработчика, один - правила для ufw отсутствуют! И справедливости ради, во всех статьях здесь и digitalocean всегда указана настройка ufw, но не здесь.
Aлексей +70
14 июня в 2016
А просто команда sudo ufw allow 80 у вас работает?
Sergey Eremin 0
14 июня в 2016
Да, но насколько понимаю нужно открыть его только для nginx.
Aлексей +70
14 июня в 2016
А в чем проблема тогда? Установите uwf и откройте 80 порт (можете не для всех, а для себя только по ip - sudo ufw allow from 123.456.789 to port 80). зачем открывать порт только для Nginx?
Sergey Eremin 0
14 июня в 2016
Все эти статьи знаю наизусть уже в бесконечных мучениях подружить ubuntu 14.04 Nginx 1.11.1 и ufw. Во всех них нет команды ufw открытия http для nginx. А все команды из статей для для аналогичной настройки на ubuntu 16 не работают в данном случае.
Свернуть ответы
Андрей 0
14 июня в 2016
Поможем, если не паниковать. Во первых firewall по-умолчанию сам не включается. Если включили сами - выключите его наконец уже, нужно сначала с nginx разобраться. Второе - все настройки прописываются, только что проверил. Вывод команды netstat -lptun укажите вместе с sudo ufw status verbose. Без диагностики просто переустановками проблему не решить - что то делаете не так и это факт.
Sergey Eremin 0
14 июня в 2016
По статье номер 2 настроил и включил ufw, логично, что фаервол нужен. Когда настраивал убунту 16 и всё работало, в списке показаны были правила ufw открывающие трафик для него, которые добавлялись автоматически при установке nginx. Так и должно быть. Теперь того же пытаюсь добиться на убунту 14, раз 16-ю нет возможности установить. Не могу найти инфу как инициировать те же правила для nginx, только в таком сочетании версий.
Sergey Eremin 0
14 июня в 2016
22 ALLOW IN Anywhere
80 ALLOW IN Anywhere
22 (v6) ALLOW IN Anywhere (v6)
80 (v6) ALLOW IN Anywhere (v6)
Порт открыл командой sudo ufw allow 80. Но я пытаюсь сделать так, чтобы порт был открыт для nginx.
Андрей 0
14 июня в 2016
1. Сначала получаем список "приложений"
sudo ufw app list
У меня он следующий:
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH

2. Командой добавляем приложение:
sudo ufw allow 'Nginx Full'
Порты для работы данного приложения заработают.

3. Проверяем:
sudo ufw status verbose

У меня вышло так:
80,443/tcp (Nginx Full) ALLOW IN Anywhere
80,443/tcp (Nginx Full (v6)) ALLOW IN Anywhere (v6)

Проверь, если не так будет(не поможет) - дальше посмотрим.
Sergey Eremin 0
14 июня в 2016
Список такой:
Available applications:
OpenSSH
sudo ufw allow 'Nginx Full'
ERROR: Could not find a profile matching 'Nginx Full'
Дело в том, что всё по статьям сделано. Возможно, что в данном случае лучше не включать ufw и установить nginx и тогда добавятся эти правила? В иных версиях все списки были как у вас, а ufw включался перед установкой nginx.
Андрей 0
14 июня в 2016
После установок не перезагружал сервер кстати? У меня ufw ругался чего то, я его если что перезагружал. Так да, рекомендую попробовать поставить сначала nginx, а потом активировать ufw.
Sergey Eremin 0
14 июня в 2016
Перезагружал. При многочисленных переустановках системы и перезагрузке сервера выдаёт один и тот же результат, я уже и не знаю, что думать. Попробую установить с отключенным ufw.
Андрей 0
14 июня в 2016
Добавлю, что nginx ставлю full пакетом( sudo apt-get install nginx-full). Файл для ufw создается установщиком следующий: cat /etc/ufw/applications.d/nginx. Если его нет, ufw не будет выводить права.
В файле следующие строки:

[Nginx HTTP]
title=Web Server (Nginx, HTTP)
description=Small, but very powerful and efficient web server
ports=80/tcp

[Nginx HTTPS]
title=Web Server (Nginx, HTTPS)
description=Small, but very powerful and efficient web server
ports=443/tcp

[Nginx Full]
title=Web Server (Nginx, HTTP + HTTPS)
description=Small, but very powerful and efficient web server
ports=80,443/tcp

Если файла нет - советую вручную добавить с данным текстом и после перезагрузки проверить все ли в sudo ufw app list выводит.
Sergey Eremin 0
14 июня в 2016
Попробовал с отключенным ufw, та же история. Файл в котором должны быть правила пуст. Не знаю, что и думать. В ручную добавить записи в файл... Остаётся только догадываться чего ещё не установилось. Это ненормально.
Андрей 0
14 июня в 2016
если использовать установку с репозитория разработчиков, то ставить придется данный файл вручную, так как установщику такие команды не заданы. Так, если ошибок установщик не выводил - установилось все. Добавь файл и все заработает.
Или командой: sudo ufw allow http для открытия порта. Так как что application, что просто открытие порта - они по факту равнозначны, ufw не может только 1 программе все дать а другим нет. Плюс открывать порт 80 при запущенном nginx никто не сможет как факт.
Sergey Eremin 0
14 июня в 2016
Благодарю за помощь, так и сделаю.
Sergey Eremin 0
15 июня в 2016
Скажите, пожалуйста, порт 22 нужно закрыть? Добавил правила как вы описывали ниже, при проверке они есть, но также в них имеется порт 22, но по идее он должен быть отключен?
Андрей 0
15 июня в 2016
Если закрыть 22 порт, то по SSH не подключиться, только из панели управления. Лучше поставить fail2ban и авторизацию по ключу - вполне безопасное решение: не переберут пароль просто так и пароль светиться не будет.
Sergey Eremin 0
15 июня в 2016
Просто интересный момент команда: sudo ufw status выводила:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
И всё работало, включая доступ ssh, а сейчас выдаёт:
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6)
Андрей 0
15 июня в 2016
В этом случае все в порядке, OpenSSH это SSH сервер и порт по-умолчанию 22. Просто не обозначен напрямую, что это openssh и все.

Эти строки из вывода команды говорят, что 22 порт открыт как по IPv4, так и по IPv6(вторая запись) для всех IP адресов:

22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
Sergey Eremin 0
18 июня в 2016
Здравствуйте! Более того, оказывается при установки из репозитория разработчика не создаются директории и конфиги для настройки хоста. Сплошные грабли, а всё потому, что хостер не думает о нуждах клиента и не обновляет программное обеспечение. Всё должно настраиваться стандартно, а на деле это получилось только у другого хостера. Выходит вообще нет никаких конфигов при такой установке и что делать в таком случае?
Sergey Eremin 0
19 июня в 2016
Нашёл решение на официальном сайте, установка из репозитория PPA, проверил, все конфиги подгружаются и правила для ufw. https://www.nginx.com/resources/wiki/start/topics/tutorials/install/#ubuntu-ppa
PS Timeweb, добавьте, пожалуйста наконец ubuntu 16 в установки на VDS!
Свернуть ответы
Кристина Лихова +124
20 июня в 2016
Сергей, мы внимательно следим за пожеланиями и потребностями наших клиентов. Мы планируем сделать версию Ubuntu 16 доступной в ближайшем квартале. Спасибо за Ваше предложение по развитию сервисов Timeweb.