Шаг 1 - Установка Nginx
Поскольку Nginx доступен в репозиториях Ubuntu по умолчанию, его можно установить из этих репозиториев, используя систему упаковки + apt +
.
Поскольку это наше первое взаимодействие с системой упаковки + apt +
в этом сеансе, мы обновим наш локальный индекс пакетов, чтобы у нас был доступ к самым последним спискам пакетов. После этого мы можем установить + nginx
:
sudo apt update
sudo apt install nginx
После принятия процедуры + apt +
установит Nginx и все необходимые зависимости на ваш сервер.
Шаг 2 - Настройка брандмауэра
Перед тестированием Nginx необходимо настроить программное обеспечение брандмауэра, чтобы разрешить доступ к сервису. Nginx регистрируется как сервис с + ufw +
после установки, что делает его простым для доступа Nginx.
Перечислите конфигурации приложения, с которыми + ufw +
знает, как работать, набрав:
sudo ufw app list
Вы должны получить список профилей приложения:
OutputAvailable applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
Как видите, для Nginx доступны три профиля:
-
* 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-трафик в отображаемом выводе:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Шаг 3 - Проверка вашего веб-сервера
В конце процесса установки Ubuntu 20.04 запускает Nginx. Веб-сервер уже должен быть запущен.
Мы можем проверить систему + systemd +
init, чтобы убедиться, что служба работает, набрав:
systemctl status nginx
Output● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: since Fri 2018-04-20 16:08:19 UTC; 3 days ago
Docs: 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.
Вы можете получить доступ к целевой странице Nginx по умолчанию, чтобы убедиться, что программное обеспечение работает правильно, перейдя по IP-адресу вашего сервера. Если вы не знаете IP-адрес вашего сервера, вы можете получить его несколькими различными способами.
Попробуйте ввести это в командной строке вашего сервера:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Вы вернетесь на несколько строк. Вы можете попробовать каждый из них в своем веб-браузере, чтобы увидеть, работают ли они.
В качестве альтернативы вы можете набрать этот, который должен дать вам ваш публичный IP-адрес, как видно из другого места в Интернете:
curl -4 icanhazip.com
Когда у вас есть IP-адрес вашего сервера, введите его в адресную строку браузера:
http://IP_адрес_вашего_сервера или example.com
Вы должны увидеть целевую страницу Nginx по умолчанию.
Эта страница включена в Nginx, чтобы показать вам, что сервер работает правильно.
Шаг 4 - Управление процессом 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
Шаг 5 - Настройка серверных блоков (рекомендуется)
При работе с Nginx серверный блоки (аналог виртуальных хостов в Apache) используются для инкапсуляции настроек сайтов и позволяют хостить более одного домена на сервере. Мы рассмотрим настройку серверных блоков на примере example.com, но вам будет необходимо заменить этот домен своим реальным доменным именем. Узнать больше о настройке доменных имён в DigitalOcean вы можете из нашего руководства Введение в DNS DigitalOcean.
Nginx для Ubuntu 20.04 уже настроен для поддержки одного серверного блока, который настроен на показ документов из директории /var/www/html
. Несмотря на то, что это работает для одного сайта, это не очень удобно для хостинга нескольких сайтов. Вместо того, чтобы менять /var/www/html
создадим новую структуру директорий внутри /var/www/
для нашего сайта example.com. Директорию /var/www/html
оставим без изменений, её содержимое будет отображаться, если клиентские запросы не подходят для отображения других настроенных на сервере сайтов.
Создадим директорию для example.com следующей командой, используя флаг -p
для создания любых необходимых родительских директорий:
sudo mkdir -p /var/www/example.com/html
Далее настроим права доступа для созданной директории для текущего пользователя, используя переменную окружения $USER
:
sudo chown -R $USER:$USER /var/www/example.com/html
Теперь права должны для корневой директории быть настроены правильным образом при условии, что вы не меняли своё значение umask
. На всяких случай мы можем удостовериться в этом командой:
sudo chmod -R 755 /var/www/example.com
Далее создадим страницу index.html
в nano
или любом другом текстовом редакторе:
nano /var/www/example.com/html/index.html
Добавим в файл следующий HTML:
/var/www/example.com/html/index.html
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com server block is working!</h1>
</body>
</html>
Сохраните и закройте файл.
Для того, чтобы Nginx мог отдавать этот контент, нам необходимо настроить серверный блок. Вместо того, чтобы редактировать существующий файл конфигурации серверного блока, создадим новый файл для нашего сайта - /etc/nginx/sites-available/example.com
:
sudo nano /etc/nginx/sites-available/example.com
Скопируйте следующий текст настроек серверного блока в созданный файл:
/etc/nginx/sites-available/example.com
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
Обратите внимание на то, что мы изменили конфигурацию root
на адрес нашей новой директории, а server_name
на наше доменное имя.
Теперь активируем файл путём создания ссылки на него в директории sites-enabled
, которую Nginx проверяет при старте:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
Теперь два серверных блока активированы и настроены для ответа на основании своих директив listen
и server_name
(вы можете узнать больше о том, как Nginx обрабатывает эти директивы вот тут):
example.com
: Будет отвечать на запросыexample.com
иwww.example.com
.default
: Будет отвечать на любые запросы на порту 80, которые не соответствуют другим настроенным блокам.
Для того, чтобы избежать потенциальной проблемы hash bucket memory, которая может появиться при добавлении дополнительных имён серверов, нам необходимо изменить одно значение в файле /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://example.com.
Шаг 6 - Знакомство с важными файлами и каталогами Nginx
Теперь, когда мы знаем основные команды для управления веб-сервером, ознакомимся с основными директориями и файлами.
Контент
/var/www/html
: веб-контент, который по умолчанию состоит только из тестовой страницы Nginx, которую мы видели ранее, находится в директории/var/www/html
. Путь к этой директории можно настроить в файлах конфигурации Nginx.
Конфигурация сервера
/etc/nginx
: директория конфигурации Nginx. Все файлы конфигурации Nginx находятся в этой директории./etc/nginx/nginx.conf
: основной файл конфигурации Nginx. Этот файл используется для внесения изменений в глобальную конфигурацию Nginx./etc/nginx/sites-available
: директория, в которой хранятся серверные блоки для каждого сайта. Nginx не будет использовать конфигурационные файлы в этой директории, если они не имеют соответствующих ссылок в директорииsites-enabled
(см. ниже). Обычно все настройки серверного блока осуществляются в этой директории, а затем сайт активируется путём создания ссылки в другой директории./etc/nginx/sites-enabled/
: в этой директории хранятся серверные блоки для активированных сайтов. Обычно это достигается путём создания ссылок на конфигурационные профили сайтов, расположенные в директорииsites-available
./etc/nginx/snippets
: в этой директории хранятся фрагменты конфигурации, которые можно использовать при конфигурации любых сайтов. Фрагменты конфигурации, которые потенциально могут быть использованы в нескольких файлах конфигурации, являются прекрасными кандидатами для создания этих сниппетов.
Логи сервера
/var/log/nginx/access.log
: каждый запрос к вашему веб-серверу записывается в этот файл лога, если иное не задано настройками Nginx./var/log/nginx/error.log
: любые ошибки Nginx будут записываться в этот файл.