AS-Programmer Laravel и среда исполнения на Docker
  • Telegram
  • Facebook
  • WhatsApp
  • Viber
  • Skype

Reverse proxy локальный

Как настроить reverse proxy с Docker, Nginx и Mkcert

Нам понадобятся настроенный особым образом Nginx веб сервер и утилита Mkcert для генерации локально-доверенных сертификатов с собственным центром сертификации. Чтобы можно было сразу посмотреть reverse proxy в действии, нужно уже иметь пару-тройку приложений позади него. Как развернуть Laravel приложение с Docker контейнерами на локальном компьютере или VPS, смотрим здесь. Nginx веб сервер создадим и настроим в контейнере, а утилиту Mkcert установим непосредственно на локальном компьютере.

Установка утилиты Mkcert

Начнем с установки certutil. Эта утилита работает из командной строки и может создавать и модифицировать сертификаты и базу данных с ключами.
sudo apt-get update
sudo apt install wget libnss3-tools
Теперь загрузим бинарный пакет mkcert из GitHub на момент написания статьи последняя версия v1.4.1
export VER="v1.4.1"
wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/${VER}/mkcert-${VER}-linux-amd64
Сделаем файл исполняемым и поместим его в директорию /usr/local/bin
chmod +x mkcert
sudo mv mkcert /usr/local/bin
На этом установка завершена. Cоздадим локальный CA (Certificate Authority)
mkcert -install
теперь мы можем простой командой mkcert name-1.local name-2.local ... сгенерировать SSL certificates для любого количества локальных доменов, но пока отложим это действие. Дело в том, что эта команда имеет ряд опций, указав которые мы можем задать нужную нам директорию и имена файлов SSL certificates. Директорию и имена файлов мы определим в настройках reverse proxy.

Reverse proxy как это работает

Reverse proxy это обычный Nginx, который слушает стандартные порты "80" и "443", но настроен таким образом, чтобы транслировать запросы приложениям позади него, в соответствии с доменом. А также, преобразовывать все HTTP запросы в HTTPS и проверять сертификаты. Таким образом, в центре внимания оказываются конфигурационные файлы.

Клонируем reverse proxy из GitHub репозитория
cd ~/my-projects
git clone https://github.com/acwstudio/nginx-reverse-proxy-ssl-local.git docker-reverse-proxy
cd docker-reverse-proxy

1. docker-compose.yml Инструкции для запуска и управления контейнерами
2. Makefile Инструкция для запуска генерации сертификатов
3. etc/ssl/private Директория для размещения SSL certificates

Обсудим содержимое директории etc/nginx

1. nginx.conf Основной конфигурационный файл, в который так или иначе инклюдятся все остальные файлы
2. laravel-1.conf
laravel-2.conf
laravel-3.conf
Каждый из файлов, содержит блок, ответственный за селекцию и редирект запроса к соответствующему приложению. Количество файлов зависит от количества приложений позади reverse proxy. На каждый файл создается симлинк, который инклюдится в nginx.conf
3. common.conf
common-location.conf
ssl.conf
Эти файлы содержат неизменные повторяющиеся блоки. Все три файла инклюдятся в каждый laravel-1,2,3.conf файл, чтобы каждый раз не писать там одни и те же блоки.
4. redirect.conf
Файл содержит блок, отвечающий за редирект HTTP в HTTPS. Инклюдится прямо в nginx.conf.

Произведем некоторые предварительные настройки. Прежде всего создадим файл с блоком ответственным за селекцию и редирект запроса к приложению, развернутому в разделе Laravel на Docker. Для этого воспользуемся специально заготовленным шаблоном etc/nginx/conf.d/sires-available/service-name.conf.example
cd etc/nginx/conf.d/sites-available/
cp service-name.conf.example laravel-1.conf
cd ../sites-enabled
ln -s ../sites-available/laravel-1.conf laravel-1.conf
nano ../sites-available/laravel-1.conf
Это полученный файл

1 строка изменим MyApp на laravel-1
3 строка изменим MyApp_nginx на LarApp1_nginx
9 строка изменим myapp.local на laravel-1.local
15 строка изменим http://MyApp на http://laravel-1

не забудьте добавить в файл /etc/hosts запись 127.0.0.1 laravel-1.local

Осталось сгенерировать SSL serificates, положить их в etc/ssl/private и запустить docker-compose.yml. Инструкция на генерацию сертификатов с указанием места расположения записана в Makefile при его запуске необходимо в DOMENS указать перечень доменов
cd ~/my-projects/docker-reverse-proxy
make init DOMENS=laravel-1.local
docker-compose up -d

Набираем в браузере http://laravel-1.local и замочек на месте

Меню

  • Вводная часть
  • Laravel на Docker
  • Reverse-proxy
    • Локальный сервер
    • VPS

Get in touch

  • acwstudio2018@gmail.com
  • +7(921) 439-9531
  • Russia, Saint-Petersburg

© Untitled. All rights reserved. Demo Images: Unsplash. Design: HTML5 UP.