
Как установить сервер Nginx на Ubuntu 18
Что нужно для установки
Для инсталляции на Ubuntu 18.04 понадобится: установленная операционная система, имеющая статический IP-адрес, с доступом в интернет. Также желательно, чтобы файрвол UFW был включен.
Подготовка
Перед началом установки Nginx заходим в ОС под пользователем root, и создаем новый аккаунт с расширенными привилегиями sudo.
Вводим следующую команду*:
adduser host
* Здесь «host» – имя пользователя, под которым будем работать.
Далее вбиваем свою информацию об аккаунте или принимаем настройки по умолчанию, нажав «Enter».
Настройка доступа в учетную запись созданного пользователя зависит от того, какая используется root-аутентификация. Это может быть просто пароль, либо же SSH-ключи.
Если вход выполняется под паролем, то подключиться к новому пользователю можно по SSH*:
ssh host@194.61.0.6
*IP сервера в примере (194.61.0.6) следует заменить на актуальный.
Когда вход в учетную запись осуществляется при помощи SSH-ключей, тогда их необходимо скопировать в созданный аккаунт. Для этого нужно следовать следующему алгоритму:
- Открыть терминал и ввести команду:
rsync —archive —chown= host: host ~/.ssh /home/ host
- Добавить созданного пользователя в группу sudo:
usermod -aG sudo host
- Авторизоваться под новым пользователем.
Список оборудования
В следующем разделе представлен список оборудования, используемого для создания этого учебника.
-
Сервера
-
Сетевой коммутатор
-
Ноутбук
Как Amazon Associate, я зарабатываю от квалификационных покупок.
Настройка виртуальных хостов
Как вы знаете, на сервере может размещаться несколько сайтов. Все запросы приходят на ip сервера, а nginx уже определяет на основе домена какой контент нужно выдать. Для того чтобы nginx знал что к какому домену относится нужно настроить виртуальные хосты. Каждый хост принято размещать в отдельном файле. Настройка хоста находится в секции server, но поскольку все файлы из sites-enabled импортируются в секцию http, то логика структуры конфигурационного файла не нарушается.
Рассмотрим пример настройки:
vi /etc/nginx/sites-enabled/losst.ru.conf
- 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:
location = /favicon.ico {
log_not_found off;
access_log off;
}
Запретить доступ к файлам, начинающимся с точки:
location ~ /. {
deny all;
}
Кэшировать обычные файлы на 90 дней:
location ~* ^.+.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
access_log off; log_not_found off; expires 90d;
}
После того, как установка и настройка nginx будет завершена проверяем конфигурацию на ошибки:
nginx -t
Затем перезагружаем сервер:
sudo service nginx reload
sudo service nginx restart
Если изменялись незначительные параметры можно использовать reload, тогда будет просто обновлена конфигурация без перезагрузки, если же изменяли глобальные опции, нужно перезагрузить программу полностью с помощью restart.
6: Важные файлы и каталоги Nginx
Теперь вы знаете, как управлять сервисом. Пора познакомиться с важными файлами и каталогами веб-сервера Nginx.
Контент
- /var/www/htm: содержит текущий контент сайта. По умолчанию в нём находится только стандартная посадочная страница, которую вы уже видели. Этот каталог можно изменить в конфигурационном файле Nginx.
Настройки сервера
- /etc/nginx: каталог настроек nginx, в котором хранятся все конфигурационные файлы.
- /etc/nginx/nginx.conf: главный конфигурационный файл Nginx, содержащий глобальные настройки веб-сервера.
- /etc/nginx/sites-available/: каталог, в котором хранятся настроенные блоки server (виртуальные хосты) каждого отдельного сайта. Nginx не будет использовать эти блоки, пока ссылка на них не появится в каталоге sites-enabled (о нём речь пойдёт дальше). Как правило, этот каталог используется для настройки виртуальных хостов.
- /etc/nginx/sites-enabled/: каталог, в котором хранятся включенные блоки server. Чтобы включить блок, нужно создать символьную ссылку на файл, хранящийся в каталоге sites-available.
- /etc/nginx/snippets: этот каталог хранит сниппеты — фрагменты настроек, которые можно включить в конфигурацию Nginx. Как правило, в качестве фрагментов добавляют потенциально повторяемые сегменты конфигурации.
5: Настройка виртуального хоста
На веб-сервере Nginx можно использовать виртуальные хосты (в контексте Nginx они называются блоками server) для изоляции настроек и размещения нескольких доменов на одном сервере. Здесь мы используем условный домен your_domain.com, но вы должны заменить его собственным доменом.
В Ubuntu 20.04 Nginx по умолчанию предоставляет один включенный виртуальный хост, который обслуживает каталог /var/www/html. Этого хватит для работы одного сайта, но если вы хотите разместить несколько сайтов, вам нужно создать новые виртуальные хосты. Создайте структуру каталогов в /var/www для сайта your_domain.com, а /var/www/html оставьте как каталог по умолчанию, который будет обслуживаться, если запрос клиента не соответствует другим сайтам.
Создайте каталог your_domain.com, используйте опцию -p для создания всех необходимых родительских каталогов:
$ sudo mkdir -p /var/www/your_domain.com/html
Затем установите права на каталог с помощью переменной $USER:
$ sudo chown -R $USER:$USER /var/www/your_domain.com/html
Права должны быть установлены верно, если вы не поменяли unmask, но на всякий случай вы можете ввести такую команду:
$ sudo chmod -R 755 /var/www/your_domain.com
Затем создайте образец страницы index.html с помощью nano или другого редактора:
$ nano /var/www/your_domain.com/html/index.html
Success! The your_domain.com server block is working!
Сохраните и закройте файл.
Чтобы Nginx смог обслуживать этот контент, необходимо создать файл виртуального хоста с правильным набором директив. Вместо того чтобы напрямую изменять конфигурации по умолчанию, создайте новый файл /etc/nginx/sites-available/your_domain.com.
$ sudo nano /etc/nginx/sites-available/your_domain.com
Вставьте в файл следующие конфигурации. Они похожи на конфигурации по умолчанию, но содержат правильный домен и каталог:
server {
listen 80;
listen [::]:80;
root /var/www/your_domain.com/html;
index index.html index.htm index.nginx-debian.html;
server_name your_domain.com www.your_domain.com;
location / {
try_files $uri $uri/ =404;
}
}
Обратите внимание, что root содержит путь к новому каталогу, а server_name – новый домен.
Сохраните и закройте файл.
Включите файл, создав симлинк в каталоге sites-enabled:
$ sudo ln -s /etc/nginx/sites-available/your_domain.com /etc/nginx/sites-enabled/
Теперь у вас есть два виртуальных хоста, которые будут обслуживать запросы клиентов на основе директив listen и server_name:
- your_domain будет обслуживать запросы для www.your_domain и your_domain.
- default будет отвечать на запросы по порту 80, если они не соответствуют остальным виртуальным хостам.
Чтобы избежать проблем с памятью, которые могут возникнуть в результате настройки дополнительных имен серверов, необходимо отредактировать одно значение в файле /etc/nginx/nginx.conf. Откройте файл:
$ sudo nano /etc/nginx/nginx.conf
Найдите строку server_names_hash_bucket_size и раскомментируйте ее, удалив символ #:
…
http {
…
server_names_hash_bucket_size 64;
…
}
…
Сохраните и закройте файл.
Проверьте ошибки в конфигурационном файле Nginx:
$ sudo nginx -t
Перезапустите Nginx, чтобы новые параметры вступили в силу:
$ sudo systemctl restart nginx
Теперь Nginx обслуживает домен вашего сайта. Чтобы убедиться в этом, откройте ссылку http://your_domain в браузере.
Success!
The your_domain.com server block is working!
Настройка межсетевого экрана
Предполагая, что вы используете UFW для управления своим брандмауэром, вам необходимо открыть порты HTTP ( 80 ) и HTTPS ( 443 ). Вы можете сделать это, включив профиль Nginx Full, который включает правила для обоих портов:
sudo ufw allow ‘Nginx Full’
Чтобы проверить тип статуса:
sudo ufw status
Результат будет выглядеть примерно так:
Status: active
To Action From
— —— —-
22/tcp ALLOW Anywhere
Nginx Full ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Шаг второй — устанавливаем базу данных MySQL
Теперь, когда у нас есть веб-сервер, нам необходимо установить MySQL — базу данных, где будет храниться информация для нашего сайта.
Сделать это достаточно просто, открываем консоль и вбиваем:
sudo apt-get install mysql-server
В процессе установки вам будет предложено ввести пароль администратора MySQL, который вам стоит запомнить или записать.
Все, MySQL установлен, но еще не настроен до конца. Во-первых, необходимо создать первичную структуру для хранения данных самой MySQL. Мы можем это сделать командой:
sudo mysql_install_db
Далее нам необходимо запустить сценарий безопасности, который изменит некоторые настройки идущие по умолчанию:
sudo mysql_secure_installation
Вам нужно будет ввести пароль администратора MySQL, который Вы выбрали во время установки.
Далее, вам будет предложено изменить его. Если в этом нет необходимости, введите «N» и нажмите «ENTER». После этого вам будет предложено удалить некоторых тестовых пользователей и базы данных. Вы должны просто нажимать «ENTER» при появлении вопросов, чтобы удалить опасные настройки по умолчанию.
После того, как сценарий завершиться, MySQL готов к использованию.
Настройка программы Ubuntu
- Покажем список программ с ufw-профилем с помощью команды:
$ sudo ufw app list
- Перед вами откроется список с указанием типов профилей:
- Full — полный профиль, открывающий порты 80 и 443. Первый является обычный с незашифрованным трафиком, а второй — с зашифрованным.
- HTTP — откроет вам только 80 порт.
- HTTPS — здесь будет 143.
Обычно рекомендуют ставить HTTP, но если вы считаете себя более продвинутым пользователем, можете самостоятельно выбрать тот порт, который вам необходим.
- Для выбора вводим код:
$ sudo ufw allow ‘Nginx XXX’
Где вместо XXX нужно написать название выбранного вами порта. Например, $ sudo ufw allow ‘Nginx Full’.
- Не забываем закрепить установленные параметры:
$ sudo ufw status
- На следующем этапе система покажет информацию о вашем разрешённом трафике. Здесь уже можно считать настройку Firewall завершённой.
- Теперь необходимо выполнить проверку. Вообще, по окончании установки Ubuntu должен запустить Nginx, а сервер — работать. На всякий случай удостовериться в этом можно при помощи команды:
$ systemctl status nginx
- В появившемся окне с данными стоит акцентировать свой взгляд на строчке с активностью, где будет указан момент, с которого начинает свою работу сервер. Это позволит вам точно понять, всё ли в порядке. Если имеются какие-то проблемы или неполадки, то обязательно внимательно попробуйте повторить указанные выше действия. Если всё равно ничего не выйдет, то обратитесь за помощью к специалисту. В противном случае можете двигаться дальше.
- Далее, нам нужно будет вывести публичный АйПи-адрес:
$ sudo apt-get install curl
$ curl -4 icanhazip.com
- После получения необходимых сведений, введите их в поле для написания адреса в браузере:
http://доменное_имя_или_IP-адрес
- Если вы всё сделали правильно, то вы увидите начальную страницу приветствия приложения, где будет сказано, что веб-сервер успешно установлен и работает. Также будут указаны ссылки для получения онлайн-документации и обычной поддержки, а также для коммерческой поддержки. Можете себя поздравить, установка и настройка выполнены успешно!
Учебник — Установка Nginx на Ubuntu Linux
Установите сервер Nginx и необходимые пакеты.
Copy to Clipboard <текстареа class="fusion-syntax-highlighter-текстареа" id="fusion_syntax_highlighter_1" data-readonly="nocursor" data-linenumbers="1" data-linewrapping="" data-theme="hopscotch" data-mode="text/x-sh">apt-get update
apt-get install nginx
Добавьте следующую строку в файл конфигурации Nginx.
Copy to Clipboard <текстареа class="fusion-syntax-highlighter-текстареа" id="fusion_syntax_highlighter_2" data-readonly="nocursor" data-linenumbers="1" data-linewrapping="" data-theme="hopscotch" data-mode="text/x-sh">client_max_body_size 32M;
В нашем примере мы устанавливаем максимальный размер загрузки Nginx до 32 мегабайт.
Вот файл после нашей конфигурации.
Copy to Clipboard <текстареа class="fusion-syntax-highlighter-текстареа" id="fusion_syntax_highlighter_3" data-readonly="nocursor" data-linenumbers="1" data-linewrapping="" data-theme="hopscotch" data-mode="text/x-sh">user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
client_max_body_size 32M;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Перезапустите сервис Nginx.
Copy to Clipboard <текстареа class="fusion-syntax-highlighter-текстареа" id="fusion_syntax_highlighter_4" data-readonly="nocursor" data-linenumbers="1" data-linewrapping="" data-theme="hopscotch" data-mode="text/x-sh">service nginx restart
Сервер Nginx был успешно установлен.
текстареа>текстареа>текстареа>текстареа>
Основные команды для управления NGINX сервером
Вот основные команды Nginx сервера для управления.
Команда restart остановит службу, а затем запустит ее снова.
$ sudo systemctl restart nginx
Команда reload сообщает NGINX перезагрузить конфигурационные файлы, но без остановки службы.
$ sudo systemctl reload nginx
Команда stop остановит службу NGINX.
$ sudo systemctl stop nginx
Включение Nginx при загрузке системы.
$ sudo systemctl enable nginx
Примечание: служба Nginx включена по умолчанию. И автоматически стартует при загрузке сервера.
Требования
Перед тем, как приступить к установке, у вас должен быть создан пользователь с sudo привилегиями.
Как только вы создадите такой аккаунт, авторизуйтесь в качестве этого пользователя перед выполнением следующих шагов.
Как установить Nginx на Ubuntu
Инсталляцию будем выполнять прямо из репозитория Ubuntu, посредством пакетного менеджера apt:
$ sudo apt update
$ sudo apt install nginx
По завершению исполнения команд, обновление и установка Nginx на сервере будет окончена.
4: Управление процессами Nginx
Теперь давайте рассмотрим несколько базовых команд для управления сервисом Nginx.
Чтобы остановить Nginx, введите:
$ sudo systemctl stop nginx
Чтобы запустить его, введите:
$ sudo systemctl start nginx
Для перезапуска веб-сервера используйте команду:
$ sudo systemctl restart nginx
Чтобы обновить настройки Nginx, не сбрасывая соединения, введите команду:
$ sudo systemctl reload nginx
По умолчанию Nginx автоматически запускается во время загрузки сервера. Это поведение можно отключить:
$ sudo systemctl disable nginx
Чтобы возобновить автозапуск сервиса, введите:
$ sudo systemctl enable nginx
Шаг третий — установка PHP
После установки сервера Nginx и MySQL нам необходимо связующее звено — серверный язык/ который будет отрабатывать динамические запросы. Поскольку Nginx не содержит встроенной обработки PHP как и некоторые другие веб-серверы, нам нужно установить php5-fpm (Менеджер процессов FastCGI). Благодаря ему Nginx сможет обрабатывать PHP запросы.
Помимо самого модуля, нам потребуется вспомогательный пакет, который позволит PHP общаться с нашей базы данных.
Давайте произведем установку, набрав в консоли:
sudo apt-get install php5-fpm php5-mysql
Проверьте состояние службы NGINX
Давайте сделаем быструю проверку, чтобы подтвердить статус сервиса NGINX. Для этого выполните следующую команду:
$ sudo systemctl status nginx
Проверьте состояние службы NGINX
Вывод приведенной выше команды подтверждает, что NGINX активен и работает.
Если вы получаете сообщение о том, что NGINX неактивен, не запущен или не работает. Тогда вы можете вручную запустить службу NGINX. Для этого выполните следующую команду:
$ sudo systemctl start nginx
Чтобы проверить установленную версию Nginx, запустите:
$ sudo dpkg-l nginx
Провера версии Nginx на Ubuntu
Проверьте версию Nginx на Ubuntu
Эти данные показывают, что установлен nginx версии 1.18.0. На момент написания статьи это последняя версия для Ubuntu 20.04.
Учебник Nginx — Включить поддержку PHP
Nginx нужна внешняя программа для добавления поддержки PHP.
Установите пакет PHP.
Copy to Clipboard <текстареа class="fusion-syntax-highlighter-текстареа" id="fusion_syntax_highlighter_5" data-readonly="nocursor" data-linenumbers="1" data-linewrapping="" data-theme="hopscotch" data-mode="text/x-sh">apt-get install php-fpm
Установите другие модули PHP.
Copy to Clipboard <текстареа class="fusion-syntax-highlighter-текстареа" id="fusion_syntax_highlighter_6" data-readonly="nocursor" data-linenumbers="1" data-linewrapping="" data-theme="hopscotch" data-mode="text/x-sh">apt-get install php-mysql php-mbstring php-xml php-gd php-curl php-bcmath php-ldap mlocate
Найдите местоположение файла конфигурации PHP в вашей системе.
Отредактируйте файл конфигурации под названием: PHP. Ini.
Copy to Clipboard <текстареа class="fusion-syntax-highlighter-текстареа" id="fusion_syntax_highlighter_7" data-readonly="nocursor" data-linenumbers="1" data-linewrapping="" data-theme="hopscotch" data-mode="text/x-sh">updatedb
locate php.ini
vi /etc/php/7.4/fpm/php.ini
Ваша версия PHP может быть не такой, как наша.
Местоположение файла конфигурации PHP может быть не таким, как у нас.
Включить и настроить следующие элементы файла конфигурации PHP.
Copy to Clipboard <текстареа class="fusion-syntax-highlighter-текстареа" id="fusion_syntax_highlighter_8" data-readonly="nocursor" data-linenumbers="1" data-linewrapping="" data-theme="hopscotch" data-mode="text/x-sh">max_execution_time = 300
memory_limit = 256M
post_max_size = 32M
upload_max_filesize = 32M
max_input_time = 300
date.timezone = America/Sao_Paulo
В нашем примере мы используем часовой пояс Бразилии.
Отредактируйте файл конфигурации Nginx для веб-сайта по умолчанию.
Copy to Clipboard <текстареа class="fusion-syntax-highlighter-текстареа" id="fusion_syntax_highlighter_9" data-readonly="nocursor" data-linenumbers="1" data-linewrapping="" data-theme="hopscotch" data-mode="text/x-sh">vi /etc/nginx/sites-available/default
Включите поддержку PHP для Nginx.
Вот исходный файл, до нашей конфигурации.
Copy to Clipboard <текстареа class="fusion-syntax-highlighter-текстареа" id="fusion_syntax_highlighter_10" data-readonly="nocursor" data-linenumbers="1" data-linewrapping="" data-theme="hopscotch" data-mode="text/x-sh">server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
Вот новый файл с нашей конфигурацией
Copy to Clipboard <текстареа class="fusion-syntax-highlighter-текстареа" id="fusion_syntax_highlighter_11" data-readonly="nocursor" data-linenumbers="1" data-linewrapping="" data-theme="hopscotch" data-mode="text/x-sh">server {
listen 80 default_server;
listen [::]:80 default_server;
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
}
}
Проверьте, не имеет ли файл конфигурации Nginx ошибки.
Copy to Clipboard <текстареа class="fusion-syntax-highlighter-текстареа" id="fusion_syntax_highlighter_12" data-readonly="nocursor" data-linenumbers="1" data-linewrapping="" data-theme="hopscotch" data-mode="text/x-sh">nginx -t
Вот вывод команды.
Copy to Clipboard <текстареа class="fusion-syntax-highlighter-текстареа" id="fusion_syntax_highlighter_13" data-readonly="nocursor" data-linenumbers="1" data-linewrapping="" data-theme="hopscotch" data-mode="text/x-sh">nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Перезагрузите службу PHP.
Copy to Clipboard <текстареа class="fusion-syntax-highlighter-текстареа" id="fusion_syntax_highlighter_14" data-readonly="nocursor" data-linenumbers="1" data-linewrapping="" data-theme="hopscotch" data-mode="text/x-sh">service php7.4-fpm restart
Перезапустите сервис Nginx.
Copy to Clipboard <текстареа class="fusion-syntax-highlighter-текстареа" id="fusion_syntax_highlighter_15" data-readonly="nocursor" data-linenumbers="1" data-linewrapping="" data-theme="hopscotch" data-mode="text/x-sh">service nginx restart
Поздравляю! Вы завершили установку PHP на сервере Nginx.
текстареа>текстареа>текстареа>текстареа>текстареа>текстареа>текстареа>текстареа>текстареа>текстареа>текстареа>
Настройка сжатия Gzip
Сжатие контента необходимо, чтобы уменьшить размер загружаемых браузером данных. Это ускоряет загрузку сайта, но добавляет дополнительную нагрузку на процессор сервера. Чтобы включить сжатие в секции http нужно добавить параметр:
gzip on
Эту директиву можно использовать также в секции server, тогда она будет работать только для указного виртуального домена. Дальше настраиваем параметры сжатия настраиваются с помощью следующих опций:
- gzip_min_length — минимальная длина страницы в байтах, при которой нужно использовать сжатие, например, 1000 (1 кб)
- gzip_proxied — нужно ли сжимать проксированые запросы, any говорит, что нужно сжимать все.
- gzip_types — типы файлов, которые нужно сжимать, например: text/plain application/xml application/x-javascript text/javascript text/css text/json;
- gzip_disable «msie6» — в IE 6 сжатие не поддерживается, поэтому отключаем.
- gzip_comp_level — уровень сжатия, доступны варианты от 1 до 10. 1 — минимальное, 10 — максимальное сжатие.
Настройка UFW
Перед предоставлением доступа к сервису, следует настроить файрвол.
Для просмотра приложений, с которыми будет взаимодействовать UFW, вводим следующую команду:
$ sudo ufw app list
Будет выведена следующая информация:
Это означает, что UFW может работать с тремя вариантами протоколов веб-сервера:
- Full – открыты два порта (80 и 443).
- HTTP – открыт только 80 порт.
- HTTPS – открывается только 443 порт.
Пока не настроен SSL протокол, открываем 80 порт. Вводим команды:
$ sudo ufw allow ‘Nginx HTTP’
Чтобы не потерять доступ по SSH, вводим команду:
$ sudo ufw allow ssh
$ sudo ufw enable
Будет выведено предупреждение:
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
Нужно согласиться (нажать «y»).
Проверяем:
$ sudo ufw status
На экране будет выведено:
Status: active
To Action From
— —— —-
Nginx HTTP ALLOW Anywhere
22/tcp ALLOW Anywhere
Nginx HTTP (v6) ALLOW Anywhere (v6)
22/tcp (v6) ALLOW Anywhere (v6)
HTTP протокол открыт.
Повышаем безопасность PHP-FPM
Для повышения безопасности работы с PHP нам надо произвести донастройку. Отроем на редактирование файл:
sudo nano /etc/php5/fpm/php.ini
после чего, найдем строчку содержащую «cgi.fix_pathinfo», которая по-умолчанию выглядит так:
раскомментируем ее и изменим значение, должно получиться так:cgi.fix_pathinfo = 0
Сохраните измененный файл. Это призвано устранить опасность неправильно трактования (и возникающей уязвимости) запросов вида /image.gif/foo.php
Шаг 2: настройка фаервола
Перед тестированием nginx необходимо настроить фаервол для того, чтобы дать доступ сервису. Nginx регистрирует себя как сервис с утилитой ufw — благодаря этому дать доступ nginx довольно легко.
Введите команду ниже для того, чтобы увидеть конфигурации приложений, с которыми может работать ufw.
$ sudo ufw app list
Вам высветится вот такой список:
Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH
То есть для nginx доступны 3 профиля:
- Nginx Full: профиль открывает два порта – 80 (обычный, незашифрованный веб-трафик) и 443 (TLS/SSL зашифрованный трафик)
- Nginx HTTP: профиль открывает только порт 80 (обычный, незашифрованный веб-трафик)
- Nginx HTTPS: профиль открывает только порт 443 (TLS/SSL зашифрованный трафик)
Рекомендуется включать наиболее ограниченный профиль, но при условии, что он будет пропускать тот трафик, который вы настроили. Так как SSL-протокол пока еще не настроен, вам нужно открыть порт 80 для обычного трафика.
Введите команду:
$ sudo ufw allow ‘Nginx HTTP’
Проверить изменения можно командой:
$ sudo ufw status
В выводе вы увидите, что HTTP-трафик разрешен:
Status: activeTo Action From— —— —-OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)
Тестирование Nginx
После завершения инсталляции веб-сервера, Ubuntu запустит его автоматически.
Чтобы проверить, что он работает, нужно ввести команду:
$ systemctl status nginx
В случае успешного запуска службы, на экране должно отобразиться:
Для того, чтобы полностью в этом убедиться, выполним запрос начальной страницы Nginx. Нужно ввести доменное имя или IP-адрес сервера в строке браузера.
Если IP-адрес неизвестен, существует несколько способов его выяснить.
В терминале набираем команду:
$ ip addr show eth0 | grep inet | awk ‘{ print $2; }’ | sed ‘s//.*$//’
Отобразится несколько IP-адресов. По очереди их необходимо будет вставить в браузер, пока не отобразится страница приветствия Nginx.
Другой метод проверки видимости сервера в интернете:
$ curl -4 icanhazip.com
Полученный адрес следует, также прописать в браузере, чтобы увидеть стартовую страницу веб-сервера.
Она будет выглядеть вот так:
2: Настройка брандмауэра
Прежде чем протестировать Nginx, нужно разблокировать его трафик в брандмауэре ufw. Во время установки Nginx регистрирует в ufw профиль своего сервиса, потому открыть его трафик будет несложно.
Откройте список доступных профилей ufw:
$ sudo ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
В этом списке вы найдете три профиля Nginx:
- Nginx Full: открывает порт 80 (незашифрованный сетевой трафик) и 443 (зашифрованный трафик TLS/SSL).
- Nginx HTTP: открывает незашифрованный трафик HTTP на порт 80.
- Nginx HTTPS: для зашифрованного трафика TLS/SSL на порт 443.
Лучше использовать профиль, который поддерживает шифрование. Но поскольку на свежем сервере ещё не настроен SSL, мы можем открыть только порт 80.
Чтобы включить соответствующий профиль, введите:
$ sudo ufw allow ‘Nginx HTTP’
Убедитесь в том, что профиль включился:
$ sudo ufw status
Команда должна показать, что трафик HTTP разблокирован:
Status: active
Status: active
To Action From
— —— —-
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Полезные команды для управления работой Easy Engine.
Вывести список сайтов easyengineee site restart ваш_доменвывод:
перезапуск nginx
перезапуск php
nginx: конфигурационный файл /usr/local/openresty/nginx/conf/nginx.conf синтаксис в порядке
nginx: конфигурационный файл /usr/local/openresty/nginx/conf/nginx.conf тест прошел успешно
Отключить веб-сайт:ee site disable ваш_доменВключить сайт:ee site enable ваш_доменУдалить сайт:ee site delete ваш_домен
Действительно очень удобное и быстрое развертывание web сервера NGINX PHP FPM. Далее можно установить необходимые инструменты для работы с сайтом, например phpmyadmin.
Команды управления Nginx-сервером
Чтобы остановить web-сервер, вводим:
$ sudo systemctl stop nginx
Для старта используем команду:
$ sudo systemctl start nginx
Для перезапуска Nginx после остановки, вводим:
$ sudo systemctl restart nginx
Во время загрузки Ubuntu, сервер Nginx стартует автоматически по умолчанию. Отключить запуск по умолчанию можно следующим образом:
$ sudo systemctl disable nginx
Чтобы при внесении изменений в конфигурации веб-сервера, его можно было перезагрузить, не теряя соединений. Для этого вводим команду:
$ sudo systemctl reload nginx
Для возобновления запуска Nginx при старте вводим:
$ sudo systemctl enable nginx
Установка WordPress при помощи Easy Engine
После установки скрипта можно запускать установку WordPress, используя команду ee site create.ee site create nearnear.ru —wp —cache —letsencrypt
Installing WordPress site.
Success: https://nearnear.ru has been created successfully!
Starting SSL verification.
The authorization check was successful!
Executing first request.
Requesting first certificate for domain nearnear.ru.
Certificate received
Certificate stored
Success: SSL verification completed.
Starting site’s services.
Site entry created.
Creating cron entry
Success: Cron created successfully
+———————+————————————+| Site | https://nearnear.ru |+———————+————————————+| Site Root | /opt/easyengine/sites/plotnear.ru |+———————+————————————+| Site Title | nearnear.ru |+———————+————————————+| WordPress Username | your-tesla |+———————+————————————+| WordPress Password | ULob99iD1g4GuoXmlP |+———————+————————————+| Alias Domains | None |+———————+————————————+| DB Host | global-db |+———————+————————————+| DB Name | nearnear_ru |+———————+————————————+| DB User | nearnear.ru-Wnj7kc |+———————+————————————+| DB Password | MNykHRg5PtAK |+———————+————————————+| E-Mail | admin@nearnear.ru |+———————+————————————+| SSL | Enabled |+———————+————————————+| SSL Wildcard | No |+———————+————————————+| Cache | Enabled |+———————+————————————+| Proxy Cache | Off |
Выводится вся информация о сайте wordpress. URL- адрес сайта на wordpress, имя администратора, пароль, имя базы данных, имя пользователя, пароль и e-mail. Если информацию не сохранили, то запустите команду:
ee site info ваш_доменДалее заходи в браузер и набираем URL нашего домена.
https://nearnear.ru/wp-admin
Далее открывается стандартная страница входа в админку WordPress. Вводим логин пользователя и пароль. Ну и производим необходимую настройку WordPress.
Шаг 3: проверка работы веб-сервера
В конце установки Ubuntu 18.04 запустит nginx. Веб-сервер уже должен работать.
Это можно проверить следующей командой:
$ systemctl status nginx
Вывод будет выглядеть примерно так:
nginx.service — A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2018-04-20 16:08:19 UTC; 3 days agoDocs: man:nginx(8)Main PID: 2369 (nginx)Tasks: 2 (limit: 1153) CGroup: /system.slice/nginx.service ├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; └─2380 nginx: worker process
Как можно увидеть выше, служба успешно запущена. Однако лучший способ проверить — это запросить страницу.
Чтобы убедиться в том, что все работает правильно, нужно посмотреть, отобразится ли начальная страница nginx, если ввести в браузере IP-адрес вашего сервера.
Если вы его не знаете, то есть следующие варианты выяснить:
1.Введите в командной строке:
$ ip addr show eth0 | grep inet | awk ‘{ print $2; }’ | sed ‘s//.*$//’
Вы увидите несколько строк — попробуйте каждую из них в браузере.
2. Можно также получить публичный IP-адрес своего сервера:
$ curl -4 icanhazip.com
После того, как IP-адрес получен, введите его в адресную строку браузера.
http://ip-адрес сервера
Должна загрузиться приветственная страница nginx:
Если она высветилась, значит, сервер работает правильно.
Шаг первый — установка веб-сервера Nginx
Для установки всего комплекса ПО мы будем использовать репозитории самого Ubuntu и стандартный менеджер пакетов apt
Откроем консоль в Ubuntu и установим Nginx, предварительно обновив источники пакетов:
sudo apt-get update
sudo apt-get install nginx
Теперь сервер Nginx установлен.
Проверить его работу, можно открыв браузер и перейдя на IP адрес того компьютера на котором устанавливали Nginx.
Если это ваш локальный компьютер то достаточно набрать http://localhost
Вы должны увидеть стартовую страницу Nginx:
Старт и остановка сервера осуществляется командами:
sudo service nginx start
sudo service nginx stop
Так как у меня первоначально стоял Apache2, пришлось сначала остановить его и затем запустить Nginx
sudo service apache2 stop
sudo service nginx start
Рестарт nginx и другие параметры командной строки
Перед тем, как двигаться дальше к настройке nginx, предлагаю пройтись по основным параметрам в командной строке. Это упростит и ускорит дальнейшую работу.
Прежде всего расскажу, как перезапустить nginx. С помощью systemctl на всех дистрибутивах это выглядит одинаково.
# systemctl restart nginx
Перед перезагрузкой nginx, рекомендую выполнить проверку конфигурации:
# nginx -t
Еще одна важная команда, с помощью которой можно применить новую конфигурацию nginx без остановки и перезапуска веб сервера. Будет запущен новый рабочий процесс с новой конфигурацией, а старые процессы плавно завершатся.
# nginx -s reload
Следующая команда помимо тестирования конфигурации, выводит полный конфиг на экран. Вывод можно направить в отдельный файл и там проанализировать. Это удобно, когда у вас конфигурация состоит из множества вложенных конфигов, правильность которых трудно оценить разом.
# nginx -T
Так же бывает полезно посмотреть полную информацию о версии nginx, параметрах сборки, модулях и т.д.
# nginx -V
Например, мне эта информация была нужна, когда я делал собственную сборку nginx c поддержкой tls 1.3 и модулем сжатия brotli.
В принципе, на этом все. Не припоминаю, чтобы я использовал что-то еще. Плавно переходим к конфигурации nginx.
1 этап. Подготовка сервера
Все действия по установке производятся на сервере через подключение по SSH.
Создание пользователя
Все действия по установке LEMP рекомендуем выполнять не через пользователя root. Рекомендуем создать пользователя с sudo-правами. Так вы дополнительно обезопасите свой сервис и избежите случайных ошибок, которые могут сломать вашу операционную систему.
Чтобы создать пользователя, введите команду:
adduser userName
Где UserName — имя нового пользователя.
Система попросит ввести пароль для нового пользователя и дополнительную информацию:
Теперь установите права доступа, чтобы новый пользователь мог использовать команду sudo. Для этого выполните команду:
usermod -aG sudo UserName
Где UserName — имя созданного ранее пользователя.
Готово. Новый пользователь создан. Завершите SSH-сеанс под root и подключитесь к серверу под новым пользователем. Или введите команду:
su — userName
Обновление операционной системы
Прежде чем установить на Ubuntu LEMP, нужно обновить операционную систему до актуального состояния с помощью команды:
sudo apt-get update && apt-get upgrade -y
Команды, директории и прочее
Теперь можно перейти, собственно, к изучению основных команд, файлов и директорий программы. Это поможет вам корректно управлять веб-сервером.
Команды
- Остановка
$ sudo systemctl stop nginx
- Запуск после остановки
$ sudo systemctl start nginx
- Перезапуск
$ sudo systemctl restart nginx
- Перезагрузка без отмены подключения (оно останется активным)
$ sudo systemctl reload nginx
- Отключение автоматического запуска Nginx при работе сервера
$ sudo systemctl disable nginx
- Противоположное предыдущему пункту — включение
$ sudo systemctl enable nginx
Шаг 3. — Настройка файрвола UFW
Для тех кто файрвол не включил и не собирается включать — Переходите к Шаг 4. — Проверка Nginx
Напомню! файрвол UFW мы включили в этой статье — Первоначальная настройка Ubuntu Server 18.04
Посмотрим профили приложений в файрволе UFW.(Рис.5)
sudo ufw app list
Рис.5 — Просматриваем профили приложений UFW.
Видим три профиля Nginx:
- Nginx Full — открывает два порта 80 — http [ нешифрованный веб-трафик ] и 443 — https [ TLS / SSL — зашифрованный веб-трафик ]
- Nginx HTTP — открывает стандартный 80 порт — http [ нешифрованный веб-трафик ]
- Nginx HTTPS — открывает только 443 порт — https [ TLS / SSL — зашифрованный веб-трафик ]
Для того чтобы применить какой-либо профиль можно воспользоваться командой — sudo ufw allow ‘Имя_профиля’
Мы применим первый профиль — Nginx HTTP.(Рис.6)
sudo ufw allow ‘Nginx HTTP’
Рис.6 — Применяем профиль Nginx в файволе UFW.
Правило применилось!
- https://Eternalhost.net/base/vps-vds/ustanovka-nginx-ubuntu
- https://techexpert.tips/ru/nginx-ru/%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-nginx-%D0%B8-php-%D0%BD%D0%B0-linux-ubuntu/
- https://losst.ru/ustanovka-nginx-ubuntu-16-04
- https://kuzevanov.ru/linux/ustanovka-nginx-v-ubuntu-20-04.html
- https://routerus.com/how-to-install-nginx-on-ubuntu-18-04/
- https://newwebmaster.ru/nginx-mysql-php-lemp-ubuntu/
- https://nastroyvse.ru/opersys/lix/kak-ustanovit-nginx-na-ubuntu.html
- https://setiwik.ru/kak-ustanovit-nginx-na-ubuntu-20-04-i-razmestit-sajt/
- https://timeweb.com/ru/community/articles/kak-ustanovit-nginx-na-ubuntu-18-04-1
- https://ullf.ru/ustanovka-nginx-ee/
- https://serveradmin.ru/ustanovka-i-nastrojka-nginx/
- https://www.REG.ru/support/vps-servery/oblachnie-serveri-vps/ustanovka-programmnogo-obespechenija/kak-ustanovit-linux-nginx-mysql-php-lemp-v-ubuntu-16041804
- https://itdeer.ru/nginx-na-ubuntu-server-18-04/