Найти тему

Как установить Nginx с HTTPS в Ubuntu

Оглавление
NGINX
NGINX

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

В этом руководстве мы обсудим, как установить Nginx на ваш сервер Ubuntu 20.04, настроить брандмауэр, управлять процессом Nginx и настроить серверные блоки для размещения более чем одного домена с одного сервера. Мы также покажем, как защитить ваш сервер Nginx с помощью Let's Encrypt и сделать его автоматически возобновляемым.

Предварительные требования

Прежде чем приступить к выполнению этого руководства, у вас должен быть настроен обычный пользователь без прав root с правами sudo на вашем сервере Ubuntu. Вы также можете захотеть зарегистрировать доменное имя перед выполнением последних шагов этого руководства.

Если у вас есть доступная учетная запись, для начала войдите в систему как пользователь, не имеющий права root.

ssh user_name@server_ip

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

Поскольку Nginx доступен в репозиториях Ubuntu по умолчанию, его можно установить из этих репозиториев, используя систему упаковки apt.

sudo apt update
sudo apt install nginx

2. Настройка брандмауэра

В Ubuntu UFW по умолчанию отключен. Вы можете проверить состояние службы UFW с помощью следующей команды:

sudo ufw status

Status: inactive

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

Программное обеспечение брандмауэра необходимо настроить, чтобы разрешить доступ к службе Nginx. При установке Nginx регистрируется как служба в ufw, что упрощает разрешение доступа Nginx. Нам нужно будет разрешить трафик только по портам 80 (обычный, незашифрованный веб-трафик) и 443 (зашифрованный трафик TLS / SSL).


# Включить брандмауэр, разрешить входящие порты SSH

sudo ufw enable
sudo ufw allow ssh

# Список конфигураций приложений, с которыми ufw знает, как работать

sudo ufw app list


[вывод]
Доступные приложения:
Nginx Full
Nginx HTTP
Nginx HTTPS

sudo ufw allow 'Nginx HTTPS'
sudo ufw status

3. Проверка вашего веб-сервера

В конце процесса установки Ubuntu 20.04 запускает Nginx. Веб-сервер уже должен быть запущен. Мы можем проверить с помощью системы инициализации systemd, чтобы убедиться, что служба запущена, введя:

systemctl status nginx
Результат команды systemctl status nginx
Результат команды systemctl status nginx

Как подтверждается этим сообщением, служба успешно запущена. Однако лучший способ проверить это - запросить страницу у Nginx.

Если вы находитесь на этой странице, ваш сервер работает правильно и готов к управлению.

Приветственная страница 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

В Nginx в Ubuntu 22.04 по умолчанию включен один серверный блок. Он настроен на обслуживание документов из каталога /var/www/ html. Хотя это хорошо работает для одного сайта, это может стать громоздким, если вы размещаете несколько сайтов. Вместо изменения /var/www/html давайте создадим структуру каталогов внутри /var/www для нашего сайта example.com.

Создайте каталог для example.com следующим образом, используя флаг -p для создания любых необходимых родительских каталогов:

sudo mkdir -p /var/www/example.com


Затем назначьте право собственности на каталог с помощью переменной среды $USER:

sudo chown -R $ USER: $USER /var/www/example.com


Права доступа к вашим веб-корням должны быть правильными, если вы не изменили свой параметр
umask значение, которое устанавливает права доступа к файлам по умолчанию. Чтобы убедиться, что ваши разрешения верны и позволяют владельцу читать, записывать и выполнять файлы, предоставляя разрешения только на чтение и выполнение группам и другим лицам, вы можете ввести следующую команду:

sudo chmod -R 755 /var/www/example.com


Затем создайте образец index.html страница с помощью nano или вашего любимого редактора:

sudo nano /var/www/example.com/index.html

Внутри добавьте следующий образец HTML: /var/www/example.com/index.html

<html>
<head>
<title>Welcome to example.com!</title>
</head>
<body>
<h1>Success! The example.com server block is working!</h1>
</body>
</html>

Сохраните и закройте файл, нажав Ctrl + X для выхода, затем, когда будет предложено сохранить - Y, а затем Enter.

Для того, чтобы Nginx мог обслуживать этот контент, необходимо создать серверный блок с правильными директивами. Вместо прямого изменения файла конфигурации по умолчанию давайте создадим новый в /etc/nginx/sites-available/:

sudo nano /etc/nginx/sites-available/example.com


Вставьте следующий блок конфигурации, который аналогичен стандартному, но обновлен для нашего нового каталога и доменного имени:

/etc/nginx/sites-available/example.com:

server {
listen 80;
# listen [::]:80; #Enabling IP6

root /var/www/example.com/;
index index.html index.htm index.nginx-debian.html;

server_name example.com www.example.com;

location / {
try_files $uri $uri/ =404;
}
}


Обратите внимание, что мы обновили конфигурацию root до нашего нового каталога, а имя_сервера - до имени нашего домена.

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

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

[Примечание]: Nginx использует обычную практику, называемую символическими ссылками, или символическими ссылками, для отслеживания того, какие из блоков вашего сервера включены. Создание символической ссылки похоже на создание ярлыка на диске. Это сделано для того, чтобы позже вы могли удалить ярлык из каталога с поддержкой сайтов, оставив серверный блок в разделе "Сайты" доступным.

Чтобы избежать возможной проблемы с памятью хэш-корзины, которая может возникнуть из-за добавления дополнительных имен серверов, необходимо настроить единственное значение в файле /etc/nginx/nginx.conf . Откройте файл:

sudo nano /etc/nginx/nginx.conf

Найдите директиву server_names_hash_bucket_size и удалите символ #, чтобы раскомментировать строку.

/etc/nginx/nginx.conf:

...

http {

...

server_names_hash_bucket_size 64;

...

}

...


Сохраните и закройте файл, когда закончите.

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

sudo nginx -t


Если никаких проблем нет, перезапустите Nginx, чтобы включить внесенные изменения:

sudo systemctl restart nginx

Теперь Nginx должен обслуживать ваше доменное имя. Вы можете проверить это, перейдя по ссылке http://example.com, где вы должны увидеть что-то вроде этого:

-4

6. Установка Certbot для Let's Encrypt

Let's Encrypt - это центр сертификации (CA), который предоставляет простой способ получения и установки бесплатных сертификатов TLS / SSL, тем самым обеспечивая шифрование HTTPS на веб-серверах. Это упрощает процесс, предоставляя программный клиент Certbot, который пытается автоматизировать большинство (если не все) необходимых шагов. В настоящее время весь процесс получения и установки сертификата полностью автоматизирован как на Apache, так и на Nginx.

Первым шагом к использованию Let's Encrypt для получения SSL-сертификата является установка программного обеспечения Certbot на ваш сервер.

Установите Certbot и его плагин Nginx с помощью apt:

sudo apt install certbot python3-certbot-nginx


Certbot теперь готов к использованию, но для того, чтобы он автоматически настроил SSL для Nginx, нам нужно проверить некоторые конфигурации Nginx.

7. Получение бесплатного SSL-сертификата

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

sudo certbot --nginx -d example.com -d www.example.com

Это запускает certbot с плагином -- Nginx, используя -d для указания доменных имен, для которых мы хотели бы, чтобы сертификат был действителен.

Если вы впервые запускаете certbot, вам будет предложено ввести адрес электронной почты и согласиться с условиями предоставления услуг. После этого certbot свяжется с сервером Let's Encrypt, а затем запустит запрос, чтобы убедиться, что вы контролируете домен, для которого запрашиваете сертификат.

Теперь давайте выполним следующую команду, чтобы проверить файл конфигурации example.com.

cat /etc/nginx/sites-available/example.com

[вывод]:

server {
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;
}

listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/nginx.liren.me/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/nginx.liren.me/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = www.example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 404; # managed by Certbot
}

Вы увидите код с комментарием [# managed by Certbot] ("управляется Certbot"), который является новым дополнением, поэтому нам не нужно его изменять.

Теперь Nginx должен обслуживать ваше доменное имя по протоколу HTTPS. Вы можете проверить это, перейдя по ссылке http://example.com, она будет перенаправлена на https://example.com.

8. Проверка автоматического обновления Certbot

Сертификаты Let's Encrypt действительны только в течение девяноста дней. Это сделано для того, чтобы побудить пользователей автоматизировать процесс обновления своих сертификатов. Установленный нами пакет certbot позаботится об этом за нас, добавив системный таймер, который будет запускаться два раза в день и автоматически продлевать любой сертификат, срок действия которого истекает в течение тридцати дней.

Вы можете запросить состояние таймера с помощью systemctl:

sudo systemctl status certbot.timer

Заключение

В этом руководстве вы установили свой веб-сервер, у вас есть множество вариантов типа контента для обслуживания и технологий, которые вы хотите использовать для создания более богатого интерфейса. Затем вы установили клиент Let's Encrypt certbot, загрузили SSL-сертификаты для своего домена, настроили Nginx на использование этих сертификатов и продолжаете их обновлять.

Руководство протестировано на Timeweb.Cloud.