Тренируемся локально
February 16, 2023

Тренируемся локально. WSL. NGINX.

Предисловие

Мы разобрались, как в WSL запустить шаблонный проект и настроить фаервол. Остался один шаг перед тем, как мы пойдем в облако пробовать наши силы на настоящей виртуальной машине. А сейчас мы разберемся с NGINX.

NGINX - это HTTP-сервер с большим количеством возможностей, сред которых нас будут интересовать:

  • реверс-прокси
  • балансировщик нагрузки
  • SSL

На этом шаге мы разберемся с первыми двумя пунктами.

Но сперва ответим на вопрос "зачем"? Ответ, на смом деле, прост - удобно. В жизни веб-проекта возникаем множество вопрос:

  • как мы будем переключаться со старой версии на новую?
  • как обеспечить отказоустойчивость? как справиться с повышенной нагрузкой на сайт? как ограничить нагрузку на сервис, чтобы он не подал?
  • как логировать входящие соединения?
  • как подключить SSL-сертификаты?
  • как включить сжатие трафика?
  • как настроить маршрутизацию между несколькими сервисами, фронтом, бэком и чем-нибудь ещё?

С этим всем прекрасно справляется NGINX. А наше приложение выполняет одну и так не простую функцию - обслуживает запросы пользователя.

Поехали

Нам понадобятся три терминала WSL с ОС Ubuntu. Открываем.

Сначала почистим и выключим фаервол после наших прошлых экспериментов.

sudo ufw reset
sudo ufw disable

Далее устанавливаем HTTP-сервер NGINX.

sudo apt-get install -y nginx

Разрешаем автозапуск сервера.

sudo systemctl enable nginx

Проверяем результат:

sudo systemctl is-enabled nginx

Теперь запустим NGINX и проверим его статус:

sudo service nginx start
sudo service nginx status

Проверяем работу NGINX в браузере http://127.0.0.1/

Работает! Прекрасно! Идем дальше.

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

NGINX настраивается через текстовые конфигурационные файлы.

Откроем и отредактируем конфигурационный файл в терминале. Делать мы это будем с помощью консольного текстового редактора nano:

sudo nano /etc/nginx/sites-available/default

Удаляем все содержимое и вводим следующие настройки:

upstream backend {
        server 127.0.0.1:5022;
        server 127.0.0.1:5122;
}
server {
        location / {
                proxy_pass http://backend;
        }
}

Закрываем редактор сочетанием клавиш Ctrl+X

nano спрашивает: "сохранить ли изменения"? Конечно, да, жмем "y".

Путь к файлу по которому нужно сохранить изменения оставляем без изменений, жмем "Enter".

На всякий случай проверим содержимое файла (перепроверять себя - хорошая привычка)

cat /etc/nginx/sites-available/default

Теперь перезапускаем NGINX, чтобы изменения настроек вступили в силу.

sudo service nginx restart

Далее переходим в другой терминал и запускаем первый проект на порту 5022 (вы уже знаете как это делать)

Затем открываем третий терминал и создаем второй шаблонный проект.

 mkdir deploy2production2
 cd deploy2production2

Этот проект мы запустим на порту 5122

dotnet run --urls http://127.0.0.1:5122

В итоге, быстро обновляя страницу в браузере, мы видим, что поочередно открывается то deploy2production, то deploy2production2.

ЗЫ

Не забудьте остановить приложения сочетанием клавиш Ctrl+C