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 и замочек на месте