По работе потребовалось: на некоторый период времени перенаправлять запросы на другой сайт (отправлять клиентов, которые не платят за услугу, на страницу оплаты). Используется автоматический обратный прокси-сервер nginx от jwilder.
Решение кажется очевидным и простым (и, вероятно, грубым), но я определённо рада, что нашла хоть такое. Основное преимущество: настройки в отдельном файле для каждого сайта, что делает проще автоматизацию перенаправления.
Для этого при создании контейнера с nginx нужно прописать дополнительные тома для настроек: conf.d для общих настроек и vhost.d, где будут храниться файлы для каждого виртуального хоста.
1 | $ docker run -d -p 80:80 -p 443:443 \ |
Или, если nginx-контейнер запускаем с помощью docker-compose (version: ‘2’), добавить строчки
1 | volumes: |
Перед созданием контейнера с сайтом в папку vhost.d поместить файл с названием, которое соответствует нашему сайту с добавлением “_location”. Для перенаправления в него нужно записать только одну строчку – об этом ниже. Если пока никаких специфических настроек нет, оставить пустым.
Далее как при обычном запуске контейнера с обратным прокси от jwilder с помощью docker run или docker-compose в переменную среды VITRUAL_HOST вписать “example.com”.
При перезапуске контейнера nginx он кроме прочих автоматически добавит в /path/to/conf.d/default.conf строчки
1 | location / { |
Основная настройка на этом завершена.
В случае, когда потребуется сделать перенаправление, в файл добавим строчку с даннными о том, куда перенаправить сайт:
1 | $ echo 'return 302 http://new-path.com;' > /path/to/vhost.d/example.com_location |
Код 302 – “Moved Temporarily”.
Теперь для автоматизации нужно найти конкретный файл, изменить таким образом его содержимое и перезагрузить настройки для nginx:
1 | $ docker exec nginx sh -c 'exec nginx -s reload' |
Если дойдём до той пресловутой автоматизации, напишу об этом после.
Замечание: если сайт доступен по нескольким адресам – например, www.example.com и example.com, – рекомендуют использовать символические ссылки.