> For the complete documentation index, see [llms.txt](https://utm-1.gitbook.io/utm-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://utm-1.gitbook.io/utm-docs/dokumentaciya/utm-it/programmnoe-obespechenie/virtualnye-servera/sistemnoe-po/nginx.md).

# NGINX

Ссылки

Как купить домен и использовать доменное имя для размещения сайта или своих сервисов через NGINX: [habr.com](https://habr.com/ru/articles/716002/)

## Установка

<details>

<summary>Вариант 1 (не проверялся)</summary>

От сюда: [habr.com](https://habr.com/ru/articles/716002/)

На установленную систему поставим пакет HTTP-сервера NGINX следующим набором команд:

```
apt update  && \
apt install -y wget curl gpg && \
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null && \
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg && \
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/debian bullseye nginx" | tee /etc/apt/sources.list.d/nginx.list && \
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | tee /etc/apt/preferences.d/99nginx && \
wget http://ftp.ru.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.1w-0+deb11u1_amd64.deb && \
dpkg -i libssl1.1_1.1.1w-0+deb11u1_amd64.deb && \
rm libssl1.1_1.1.1w-0+deb11u1_amd64.deb && \
apt update && \
apt install -y nginx && \
sed -i 32i\ 'include /etc/nginx/sites-enabled/*;' /etc/nginx/nginx.conf && \
systemctl restart nginx
```

В терминал можно вставлять сразу весь блок, так как команды объединены связкой " `&& \`", которая выполняет команду одну за другой, если предыдущая выполнена успешно.

</details>

<details>

<summary>Вариант 2 (не проверялся)</summary>

От сюда: [timeweb.cloud](https://timeweb.cloud/tutorials/ubuntu/kak-ustanovit-nginx-na-ubuntu)

</details>

<details>

<summary>Вариант 3 (проверялся на utm-proxy3-0)</summary>

От сюда: [dzen.ru](https://dzen.ru/a/Zl9gs7zaUH4bJ4I7)

#### Установка Nginx <a href="#ystanovka_nginx" id="ystanovka_nginx"></a>

В стандартных репозиториях довольно старый пакет Nginx, так что будем устанавливать последний. Работаем под рутом.

Устанавливаем пакеты, необходимые для подключения apt-репозитория:

> sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring

Импортируем официальный ключ, используемый apt для проверки подлинности пакетов:

> curl <https://nginx.org/keys/nginx\\_signing.key> | gpg --dearmor \\\
> &#x20;   \| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Проверяем, верный ли ключ был загружен:

> gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

Вывод команды должен содержать полный отпечаток ключа 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62:

> pub rsa2048 2011-08-19 \[SC] \[expires: 2024-06-14]\
> 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62\
> uid nginx signing key <<signing-key@nginx.com>>

Если отпечаток отличается от вышеуказанного, удалите файл ключа.

Подключаем репозиторий. Для подключения apt-репозитория для стабильной версии nginx:

> echo "deb \[signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \\\
> <http://nginx.org/packages/ubuntu> \`lsb\_release -cs\` nginx" \\\
> &#x20;   \| sudo tee /etc/apt/sources.list.d/nginx.list

Для подключения apt-репозитория для основной версии nginx (мой случай):

> echo "deb \[signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \\\
> <http://nginx.org/packages/mainline/ubuntu> \`lsb\_release -cs\` nginx" \\\
> &#x20;   \| sudo tee /etc/apt/sources.list.d/nginx.list

Закрепим пакеты, чтобы они не тянулись из репозиториев Ubuntu, а брались только с репозитория nginx:

> echo -e "Package: \*\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \\\
> &#x20;   \| sudo tee /etc/apt/preferences.d/99nginx

Устанавливаем Nginx:

> sudo apt update\
> sudo apt install nginx

</details>

## Настройка

<details>

<summary>Сертификаты от Reg.ru</summary>

После всех настроек спустя какое-то время вам **на почту** придут сертификаты от reg.ru. Из всего того объема информации, что будет в письме, необходимо создать два файла.

Итоговый сертификат и приватный ключ.

Для создания итогового сертификата необходимо объединить **три сертификата** «по меньше» (сам SSL‑сертификат, корневой и промежуточный сертификаты) в один файл. Для этого создайте на ПК новый текстовый документ с именем **utmsoft.crt** (**utmsoft** — доменное имя вашего сайта). Создать его можно при помощи блокнота или любого другого текстового редактора. Поочередно скопируйте и вставьте в созданный документ каждый сертификат. После вставки всех сертификатов файл должен иметь вид:

```
-----BEGIN CERTIFICATE-----
#Ваш сертификат#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#Промежуточный сертификат#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#Корневой сертификат#
-----END CERTIFICATE-----
```

**Обратите внимание:** один сертификат идёт следом за другим, без пустых строк.

Далее, создайте файл приватного ключа **utmsoft.key** и скопируйте в него содержание **приватного ключа** сертификата из письма.

```
-----BEGIN RSA PRIVATE KEY-----
#Ваш приватный ключ#
-----END RSA PRIVATE KEY-----
```

**Еще момент:** браузер может ругаться на именно эти бесплатные сертификаты, если использовать что‑то отличное от [www.\*\*utmsoft\*\*.ru](http://www.**utmsoft**.ru). Потому что сертификаты не поддерживают домены третьего уровня. Если занести денюжку, одним сертификатом можно покрыть все, в рамках домена и поддоменов (и **utmsoft**.ru и, например, Influx.**utmsoft**.ru).

**И точно последнее по этой секции:** далее мы также рассмотрим способ создания своих собственных и бесплатных wildcard ssl сертификатов через сервис let's encrypt (а раз бесплатные, то обновлять/пересоздавать их нужно будет каждые 90 дней или 3 месяца)

</details>

<details>

<summary>Вариант (проверялся на utm-proxy3-0)</summary>

От сюда: [dzen.ru](https://dzen.ru/a/Zl9gs7zaUH4bJ4I7)

#### Настройка Nginx <a href="#nastroiika_nginx" id="nastroiika_nginx"></a>

Включаем автостарт nginx:

> systemctl enable --now nginx

Проверим статус:

> systemctl status nginx

Nginx запущен: "Active: active (running)".

Проверим, какие порты прослушивает nginx:

> netstat -plntu | grep nginx

> tcp 0 0 0.0.0.0:80 0.0.0.0:\* LISTEN 102777/nginx: master

Видим, что Nginx слушает 80 порт на всех сетевых интерфейсах.

Создаём директорию для SSL сертификатов и ключей DH:

> mkdir /etc/nginx/ssl

Создаём файл с параметрами DHE-шифрования:

> openssl dhparam -out /etc/nginx/ssl/dhparams.pem 2048

Создадим директории для конфигурационных файлов сайтов.

> mkdir /etc/nginx/sites-available /etc/nginx/sites-enabled

Модифицируем настройки /etc/nginx/nginx.conf (для Nginx версии 1.26.x, для пользователя nginx):

> wget <https://gist.githubusercontent.com/CHERTS/4b1ad58e06404267591636a9f2b08114/raw/nginx.conf> -O /etc/nginx/nginx.conf

Проверяем конфигурацию Nginx:

> nginx -t

Ошибок нет, перезагружаем конфигурацию Nginx:

> nginx -s reload

Меняем системные лимиты на количество открытых файлов. В nginx.conf параметр worker\_rlimit\_nofile = 10000, нужно настроить в системе то же самое. В Ubuntu используется система инициализации systemd и поэтому лимиты на максимальное количество открытых файлов нужно настроить для systemd:

> mkdir -p /lib/systemd/system/nginx.service.d\
> echo "\[Service]" >/lib/systemd/system/nginx.service.d/limit.conf\
> echo "LimitNOFILE=10000" >>/lib/systemd/system/nginx.service.d/limit.conf\
> systemctl daemon-reload\
> systemctl restart nginx

Проверим лимиты:

> cat /proc/$(cat /var/run/nginx.pid)/limits

Смотрим Max open files. Видим наше значение 10000.

При начальной установке имеется один сайт по умолчанию "Welcome to nginx!". Его конфигурация находится в файле /etc/nginx/conf.d/default.conf:

> cat /etc/nginx/conf.d/default.conf | egrep -Ev "^\s\*(;|#|$)"

> server {\
> listen 80;\
> server\_name localhost;\
> location / {\
> root /usr/share/nginx/html;\
> index index.html index.htm;\
> }\
> error\_page 500 502 503 504 /50x.html;\
> location = /50x.html {\
> root /usr/share/nginx/html;\
> }\
> }

Начальная настройка завершена.

</details>

<details>

<summary>Дополнительная настройка (проверялся на utm-proxy3-0)</summary>

От сюда: [habr.com](https://habr.com/ru/articles/716002/)

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

```
mkdir -m 777 -p /var/www/utmsoft.ru /etc/nginx/sites-available /etc/nginx/sites-enabled
```

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

```
nano /etc/nginx/sites-available/utmsoft.ru
```

И вставим следующее содержимое:

```
# Первый блок настроек.
# Переадресация (редирект) с http на https
server {
	listen 80;
	server_name utmsoft.ru;
	return 301 https://utmsoft.ru$request_uri;
}

# Второй блок настроек.
server {
	listen 443 ssl;
	server_name utmsoft.ru;
	root /var/www/utmsoft.ru;

    # Указываем путь, где будут лежать сертификаты для шифрования
#	ssl_certificate /etc/nginx/sites-available/utmsoft.crt;
#	ssl_certificate_key /etc/nginx/sites-available/utmsoft.pem;
	
	ssl_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
	ssl_trusted_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/utmsoft.ru/privkey.pem;

	index index.html;

	location / {
		try_files $uri $uri/ /index.html;
	}
}
```

<sub>(Не забываем поменять доменное имя utmsoft на свое)</sub>

Записываем файл `ctrl+o`, `enter` и выходим из редактора `ctrl+x`.

Данная команда создаст файл `/etc/nginx/sites-available/utmsoft.ru` с конфигурацией в которой:

Первый блок server при обращении к сайту по адресу `http://utmsoft.ru` будет переадресовывать (редиректить) его на адрес `https://utmsoft.ru.` с использованием `https.`

После создания конфига командой выше, необходимо разместить файлы сайта по пути: /var/www/utmsoft.ru

Я подготовил [сайт‑заглушку](https://clck.ru/33WZUg) через один из конструкторов сайтов. Данный сайт по сути является шаблоном для лендинга условной кофейни с отображением меню. Загрузить файлы на развернутый сервер можно двумя способами.&#x20;

1. Либо при помощи загрузки архива сайта в расширении tar.gz через ссылку.&#x20;
2. Либо перемещение файлов при помощи SFTP и консольной программки Termius, которая его поддерживает.

Для первого варианта: скачаем архив с файлом и распакуем в необходимую нам директорию:

```
wget -O /var/www/utmsoft.ru/landing.tar.gz -c https://clck.ru/33W2KU  && \
tar -zxvf /var/www/utmsoft.ru/landing.tar.gz -C /var/www/utmsoft.ru/  && \
rm /var/www/utmsoft.ru/landing.tar.gz
```

Первая строчка. Скачиваем архив с сайтом через утилитку wget. Флаг `-O` задает название файла и путь к нему, а `-c` загружает файл по ссылке (я использовал сократитель ссылок от Яндекса, так как архив я залил документом в VK, а там ну очень большой путь и название файла). Тут главное, чтобы вы по своей ссылке могли просто сразу скачать файл, и можно указать свою ссылку вместо моей.

Вторая строчка занимается разархивацией, третья удалением исходного архива.

Для второго варианта: можно скопировать файлы по SFTP, используя [Termius](https://termius.com/), просто перетащив файлы со своего компьютера на сервер в соответствующую папку:

<figure><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/349/544/a82/349544a820e83d66dea3b3d50c8384a3.png" alt="Простым перетаскиванием копируем файлы сайта с локальной машины на настраиваемый сервер" height="654" width="1292"><figcaption></figcaption></figure>

Простым перетаскиванием копируем файлы сайта с локальной машины на настраиваемый сервер

Созданные ранее сертификат (utmsoft.crt) и приватный ключ (utmsoft.pem) необходимо переместить по пути, указанному в конфиге: `/etc/nginx/sites-available/`(Либо в любое другом место на сервере, тогда не забудьте изменить путь в конфиге выше)

<figure><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/54a/73f/1f7/54a73f1f788ff294e1f79ea3ff29961b.png" alt="Простым перетаскиванием копируем файлы сертификатов с локальной машины на настраиваемый сервер. Теперь конфигурация точно запустится, потому что все файлы на месте :)" height="543" width="1428"><figcaption></figcaption></figure>

Простым перетаскиванием копируем файлы сертификатов с локальной машины на настраиваемый сервер. Теперь конфигурация точно запустится, потому что все файлы на месте :)

Теперь говорим NGINX, чтобы он подтянул созданную нами конфигурацию и применим ее:

```
ln -s /etc/nginx/sites-available/utmsoft.ru /etc/nginx/sites-enabled && \
nginx -t && \
service nginx reload && \
systemctl restart nginx
```

**Настройка портов**

Перед проверкой, что все работает, необходимо открыть 80 и 443 порт на вашем сетевом оборудовании. Для этого необходимо зайти на роутер (в моем случае адрес 192.168.50.1), авторизоваться и перейти в раздел меню настроек WAN. Там выбрать раздел Virtual Server / Port Forwarding и настроить значения следующим образом через «Add profile». Необходимо ввести имя сервиса, порт, который открываем, тип протокола и адрес нашего сервера. (На вашем оборудовании может быть что-то одно из названий)

Port Forwarding (или Virtual Server) — настройка для WAN‑интерфейса (который отвечает за подключение к интернету), позволяющая извне (через интернет) обращаться к конкретным клиентам локальной сети (например, к нашему серверу) по определенному порту приложения.

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

Выглядит это примерно следующим образом для роутеров ASUS:

<figure><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/95d/8dd/3a0/95d8dd3a057bd0778907ab2e77e1fe4e.png" alt="" height="1127" width="1141"><figcaption></figcaption></figure>

После перезагрузки сервиса последним блоком команд, все внесенные изменения вступают в силу и теперь можно открыть свой сайт по адресу utmsoft.ru (будет отображаться та самая "заглушка", про которую я писал выше, с файлами которой мы работали):

<figure><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/5aa/4b4/9db/5aa4b49dbab436d0fb02e138902d08f7.png" alt="" height="654" width="920"><figcaption></figcaption></figure>

Поздравляю! Вы на своем собственном железе, запустили свой собственный сайт под своим доменом :)

Да, там еще NGINX можно дополнительно конфигурировать для условно "боевой" работы, и в Docker\`e все можно запустить, но в минимуме дается так. Дальше каждый может посмотреть, где и что ему подкрутить под свои нужды.

</details>

<details>

<summary>Настройка проксирования через NGINX для других своих сервисов с добавлением https</summary>

От сюда: [habr.com](https://habr.com/ru/articles/716002/)

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

```
http://77.88.111.222:1880     –>     Node-RED
http://77.88.111.222:1883     –>     Mosquitto MQTT
http://77.88.111.222:2345     –>     WireGuard VPN
http://77.88.111.222:3000     –>     Grafana
http://77.88.111.222:8086     –>     InfluxDBv2
http://77.88.111.222:8080     –>     Chirpstack-v4
http://77.88.111.222:8085     –>     mynginx
http://77.88.111.222:xxxx     –>     tanks
```

Хотелось использовать доменное имя, вместо IP-адреса, а также посмотреть, как прикрутить https и ssl, не внося изменения в настройки всего софта выше (как оказалось, делается это через проксирование в NGINX). В результате я пришел к такому формату:

```
https://nodered.utmsoft.ru           –>     Node-RED
https://grafana.utmsoft.ru           –>     Grafana
https://influx.utmsoft.ru            –>     InfluxDBv2
https://chirpstack.utmsoft.ru        –>     Chirpstack-v4
https://test.utmsoft.ru    –>     mynginx
https://tanks.utmsoft.ru    –>     tanks
```

Что же для этого нужно? А всего лишь добавить в NGINX конфигурацию для проксирования обращения с соответствующего имени на внутренний сервис (который localhost).

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

```
nano /etc/nginx/sites-available/proxy
```

И вставляем туда следующее содержимое:

<pre><code># Grafana primary listener and redirect
# Ждет обращения к адресу grafana.utmsoft.ru по порту 80, с переадресацией на https. 
server {
  listen 80;
  server_name grafana.utmsoft.ru;
  return 301 https://$host$request_uri;
}

# Grafana ssl config
# Редиректимся сюда, указываем сертификаты и адрес сервиса к которому обращаемся: http://127.0.0.1:3000
server {
  listen 443 ssl http2;
  server_name grafana.utmsoft.ru;
 
#  ssl_certificate /etc/nginx/sites-available/utmsoft.crt;
#  ssl_certificate_key /etc/nginx/sites-available/utmsoft.pem;
	
  ssl_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/utmsoft.ru/privkey.pem;

  location / {
	proxy_pass http://127.0.0.1:3000;
	proxy_set_header Host $host;
	proxy_set_header Connection "upgrade";
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}


####################################################################


# Influxdb primary listener and redirect
server {
  listen 80;
  server_name influxdb.utmsoft.ru;
  return 301 https://$host$request_uri;
}

# Influxdb ssl config
server {
  listen 443 ssl http2;
  server_name influxdb.utmsoft.ru;

#  ssl_certificate /etc/nginx/sites-available/utmsoft.crt;
#  ssl_certificate_key /etc/nginx/sites-available/utmsoft.pem;
	
  ssl_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/utmsoft.ru/privkey.pem;

  location / {
	proxy_pass http://127.0.0.1:8086;
	proxy_set_header Host $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}


####################################################################


# Nodered primary listener and redirect
server {
  listen 80;
  server_name nodered.utmsoft.ru;
  return 301 https://$host$request_uri;
}

# Nodered ssl config
server {
  listen 443 ssl http2;
  server_name nodered.utmsoft.ru;

#  ssl_certificate /etc/nginx/sites-available/utmsoft.crt;
#  ssl_certificate_key /etc/nginx/sites-available/utmsoft.pem;
	
  ssl_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/utmsoft.ru/privkey.pem;
  
  location / {
	proxy_pass http://127.0.0.1:1880;
	proxy_set_header Host $host;
	proxy_set_header Connection "upgrade";
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}


####################################################################


# Chirpstack primary listener and redirect
server {
  listen 80;
  server_name chirpstack.utmsoft.ru;
  return 301 https://$host$request_uri;
}

# Chirpstack ssl config
server {
  listen 443 ssl http2;
  server_name chirpstack.utmsoft.ru;

#  ssl_certificate /etc/nginx/sites-available/utmsoft.crt;
#  ssl_certificate_key /etc/nginx/sites-available/utmsoft.pem;
	
  ssl_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/utmsoft.ru/privkey.pem;
  
  location / {
	proxy_pass http://127.0.0.1:8080;
	proxy_set_header Host $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}


####################################################################


<strong># mynginx primary listener and redirect
</strong>server {
  listen 80;
  server_name test.utmsoft.ru;
  return 301 https://$host$request_uri;
}

# mynginx ssl config
server {
  listen 443 ssl http2;
  server_name test.utmsoft.ru;

#  ssl_certificate /etc/nginx/sites-available/utmsoft.crt;
#  ssl_certificate_key /etc/nginx/sites-available/utmsoft.pem;
	
  ssl_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/utmsoft.ru/privkey.pem;
  
  location / {
	proxy_pass http://192.168.1.3:8085;
	proxy_set_header Host $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}


####################################################################


# tanks primary listener and redirect
server {
  listen 80;
  server_name tanks.utmsoft.ru;
  return 301 https://$host$request_uri;
}

# tanks ssl config
server {
  listen 443 ssl http2;
  server_name tanks.utmsoft.ru;

#  ssl_certificate /etc/nginx/sites-available/utmsoft.crt;
#  ssl_certificate_key /etc/nginx/sites-available/utmsoft.pem;
	
  ssl_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/utmsoft.ru/privkey.pem;
  
  location / {
	proxy_pass http://192.168.1.3:4000;
	proxy_set_header Host $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
</code></pre>

Записываем файл `ctrl+o`, `enter` и выходим из редактора `ctrl+x`.

Данная конфигурация приведена для определенного набора сервисов. Соответственно, в зависимости от вашего набора, содержимое и состав конфига может отличаться.

Остается только применить конфигурацию, по аналогии с сайтом.

<pre><code>ln -s /etc/nginx/sites-available/proxy /etc/nginx/sites-enabled/proxy
nginx -t &#x26;&#x26; \
<strong>service nginx reload &#x26;&#x26; \
</strong>systemctl restart nginx
</code></pre>

Теперь, при попытке открытия ссылки, например, "`grafana.utmsoft.ru`", ваш браузер обратится к reg.ru для получения IP-адреса сервера, который закреплен за доменом `utmsoft.ru`, а наш NGINX, получив данный запрос, перенаправит его на внутренний адрес сервиса Grafana `http://127.0.0.1:3000` . При этом используя https и сертификаты, путь к которым указывается в конфиге выше. В виду чего нет необходимости настраивать https на каждом из сервисов.

Момент конфигурации с проксированием можно порядком упростить, перенеся его в специальное по с графическим интерфейсом: [Nginx Proxy Manager](https://www.google.com/url?sa=t\&rct=j\&q=\&esrc=s\&source=web\&cd=\&cad=rja\&uact=8\&ved=2ahUKEwiD283h-ZL9AhUOxosKHTCXBbgQFnoECBMQAQ\&url=https%3A%2F%2Fnginxproxymanager.com%2F\&usg=AOvVaw14QNe-guLCVa2_YNwJ4M1H) поставить. Он, ко всему прочему, ещё и SSL-сертификаты может выдавать и обновлять.

</details>

<details>

<summary>Получение своих и бесплатных SSL Wildcard сертификатов при помощи сервиса Let's Encrypt для NGINX на Debian.</summary>

От сюда: [habr.com](https://habr.com/ru/articles/716002/)

Вкратце разберется, а что же за Wildcard сертификаты такие.

Сертификат Wildcard - это тип сертификата SSL/TLS, который используется для защиты домена и всех его поддоменов. Например, если у вас есть сайт с доменным именем `utmsoft.ru`, сертификат Wildcard защитит не только `utmsoft.ru`, но и все поддомены, такие как `blog.utmsoft.ru`, `grafana.utmsoft.ru` и так далее.

Принцип работы сертификата Wildcard заключается в использовании специального символа, звездочки (\*), в качестве обозначения любого поддомена. Поэтому вместо того, чтобы покупать отдельные SSL/TLS-сертификаты для каждого поддомена, вы можете использовать сертификат Wildcard для защиты всех поддоменов.

Основное преимущество использования сертификата Wildcard заключается в том, что он может сэкономить ваше время и деньги. Вместо того чтобы покупать и управлять отдельными SSL/TLS-сертификатами для каждого поддомена, вы можете использовать один Wildcard-сертификат для их защиты. Это может быть особенно полезно, если у вас большое количество поддоменов, поскольку управление отдельными сертификатами для каждого поддомена может отнимать много времени и средств.

Еще одним преимуществом использования сертификата Wildcard является упрощение управления сертификатами SSL/TLS. Поскольку все ваши поддомены покрываются одним сертификатом, вам нужно обновлять и управлять только одним сертификатом, а не несколькими. Это может облегчить отслеживание сертификатов и гарантировать, что они всегда актуальны и правильно настроены.

Однако есть и некоторые потенциальные недостатки использования сертификата Wildcard, о которых следует знать студентам. Во-первых, сертификаты Wildcard могут быть дороже отдельных сертификатов SSL/TLS, в зависимости от выбранного вами поставщика. Кроме того, сертификаты Wildcard не всегда подходят для определенных типов веб-сайтов, например, для тех, которые требуют сертификатов с расширенной проверкой (EV).

На reg.ru стоимость такого сертификата начинается с примерно с 10 тысяч рублей:

<figure><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/c5b/322/eb3/c5b322eb378d811ef81d0299c249ab08.png" alt="Б - Бизнес" height="1261" width="1614"><figcaption></figcaption></figure>

Б - Бизнес

Но можно не платить, а выпустить сертификат самостоятельно при помощи сервиса Let's Encrypt!

Let's Encrypt - это бесплатный, автоматизированный и открытый центр сертификации, который предоставляет SSL/TLS-сертификаты для веб-сайтов. Let's Encrypt предлагает сертификат Wildcard, который можно использовать для защиты домена и всех его поддоменов.

Используя сертификат Wildcard от Let's Encrypt, вы можете сэкономить время и деньги, поскольку вам не нужно приобретать SSL/TLS-сертификаты для каждого поддомена. Сертификат Wildcard от Let's Encrypt также прост в установке и управлении, поскольку его можно автоматически обновлять раз в три месяца (срок действия сертификатов) и настраивать с помощью автоматизированных инструментов Let's Encrypt.

Что для этого нужно?

Установим утилиту Certbot, которая занимается выпуском сертификатов через Let's Encrypt:

```
apt install -y certbot python3-certbot-nginx
```

После чего необходимо командой запустить процесс выпуска сертификатов:

Для utmsoft.ru

```
certbot -d *.utmsoft.ru -d utmsoft.ru --manual --preferred-challenges dns certonly --server https://acme-v02.api.letsencrypt.org/directory
```

Для utmsoft.online

```
certbot -d *.utmsoft.online -d utmsoft.online --manual --preferred-challenges dns certonly --server https://acme-v02.api.letsencrypt.org/directory
```

Вас попросят указать e-mail, на который зарегистрирован домен. И задать две TXT записи, после добавления каждой из TXT записей следует подождать 10-15 минут, чтобы эта запись обновилась на сервере и Certbot мог ее прочитать после чего можно переходить к следующему шагу. Добавление выглядит примерно следующим образом:

<figure><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/488/e9c/e55/488e9ce555c39bfe835bfc4e8e355d11.png" alt="" height="1277" width="1573"><figcaption></figcaption></figure>

Делается это для того, чтобы сервис проверил, действительно ли вы являетесь владельцем домена, так как только он может добавить указанные в терминале TXT строки в доменные записи.

В результате вам в терминал будут выведены пути сертификатов, которые необходимо будет поправить в файле /etc/nginx/sites-available/proxy (если речь про сторонние сервисы, которые проксируются) или /etc/nginx/sites-available/utmsoft.ru (если речь про ваш сайт). Соответственно, меняете этот фрагмент в конфингах:

```
  ssl_certificate /etc/nginx/sites-available/utmsoft.crt;
  ssl_certificate_key /etc/nginx/sites-available/utmsoft.pem;
```

На тот, что был выведен в терминале по завершении работы Cerbot:

Для utmsoft.ru:

```
  ssl_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/utmsoft.ru/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/utmsoft.ru/privkey.pem;
```

Для utmsoft.online:

```
  ssl_certificate /etc/letsencrypt/live/utmsoft.online/fullchain.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/utmsoft.online/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/utmsoft.online/privkey.pem;
```

После указания новых путей к сертификатам в конфигах, необходимо применить конфигурацию NGINX:

```
sudo nginx -t && \
sudo service nginx reload && \
sudo systemctl restart nginx
```

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

```
certbot renew --force-renewal --post-hook "systemctl restart nginx"
```

Можно создать службу:

```
nano /etc/systemd/system/certbot-renewal.service
```

С содержимым:

```
[Unit]
Description=Certbot Renewal
[Service]
ExecStart=/usr/bin/certbot renew --force-renewal --post-hook "systemctl restart nginx"
```

И таймер:

```
nano /etc/systemd/system/certbot-renewal.timer
```

С содержимым:

```
[Unit]
Description=Timer for Certbot Renewal
[Timer]
OnBootSec=100
OnUnitActiveSec=1w
[Install]
WantedBy=multi-user.target
```

Пофиксим ошибку не указания nginx в конфиге перевыпуск сертификата:

Для utmsoft.ru:

```
sudo sed -i 's/manual/nginx/' /etc/letsencrypt/renewal/utmsoft.ru.conf
```

Для utmsoft.online:

```
sudo sed -i 's/manual/nginx/' /etc/letsencrypt/renewal/utmsoft.online.conf
```

И запустим службу:

```
systemctl start certbot-renewal.timer && \
systemctl enable certbot-renewal.timer && \
systemctl status certbot-renewal.timer
```

У вас бесплатные Wildcard сертификаты на домен и его поддомены, а их выпуск автоматизирован на раз в неделю.

Перезапуск

```
systemctl restart certbot-renewal.timer && \
systemctl status certbot-renewal.timer
```

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://utm-1.gitbook.io/utm-docs/dokumentaciya/utm-it/programmnoe-obespechenie/virtualnye-servera/sistemnoe-po/nginx.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
