Обновлять: Я добавил вторую попытку внизу этого поста. Это «работает», но я хотел бы, чтобы моя первоначальная идея работала.
Я пытаюсь перенаправить https-запрос для домена на другой через сервер перенаправления.
я использую https://website.com
, https://website2.com
, и https://myredirectserver.com
Например.
У меня есть SSL-сертификат, приобретенный для сайт.com
, и его DNS CNAMED в www
к myredirectserver.com
. Существует также SSL-сертификат для мой сайт2.com
, и в настоящее время он находится на сервере. Все хорошо, как отдельный домен.
myredirectserver.com
имеет две записи A управления трафиком (высокая доступность), которые указывают на два IP-адреса.
Эти два IP-адреса подключены через NAT в брандмауэре к прокси-серверу.
На этом прокси-сервере есть контейнер Docker, на котором работает Alpine/Nginx.
Dockerfile для контейнера:
ОТ nginx: 1.17.7-alpine
ЗАПУСК apk добавить --no-cache tzdata
ENV TZ Америка/Чикаго
ЗАПУСК rm /etc/nginx/conf.d/default.conf
КОПИРОВАТЬ myredirectserver.com.conf /etc/nginx/conf.d/myredirectserver.com.conf
ЗАПУСК rm /etc/nginx/nginx.conf
скопируйте nginx.conf /etc/nginx/nginx.conf
КОПИРОВАТЬ myredirectserver.com.crt /etc/nginx/ssl/myredirectserver.com.crt
КОПИРОВАТЬ myredirectserver.com.key /etc/nginx/ssl/myredirectserver.com.key
КОПИРОВАТЬ proxy_params /etc/nginx/proxy_params
докер запустить
часть, чтобы запустить его (есть тома, смонтированные для динамического создания файла конфигурации с помощью внутреннего кода):
docker run --name=myredirectserver --restart always --log-opt max-size=50m --log-opt max-file=5 -d -v /etc/nginx/myredirectserverBuild:/etc/nginx/myredirectserverBuild -v /etc/nginx/myredirectserverSSL:/etc/nginx/myredirectserverSSL -p 8224:443 -p 8223:80 myredirectserver
В этом контейнере Docker файл конфигурации Nginx находится в /etc/nginx/conf.d/myredirectserver.com.conf
:
#Я НЕ ЗНАЮ, ПОДХОДИТ ЛИ ЭТО ПРАВИЛЬНО ДЛЯ ТО, ЧТО МНЕ НУЖНО
сервер {
слушать 443 ssl;
имя_сервера myredirectserver.com www.myredirectserver.com;
ssl_certificate /etc/nginx/ssl/myredirectserver.com.crt;
ssl_certificate_key /etc/nginx/ssl/myredirectserver.com.key;
}
сервер {
слушать 80;
имя_сервера myredirectserver.com www.myredirectserver.com;
вернуть 301 https://www.myredirectserver.com$request_uri;
}
включить /etc/nginx/myredirectserverBuild/*.conf;
Включаемый файл в конце содержит оригинальный запрошенный домен, мой веб-сайт.com.conf
:
## виртуальный хост www.mywebsite.com
сервер {
слушать 443 ssl;
имя_сервера mywebsite.com www.mywebsite.com;
ssl_certificate /etc/nginx/myredirectwebsiteSSL/mywebsite.com.crt;
ssl_certificate_key /etc/nginx/myredirectwebsiteSSL/mywebsite.com.key;
}
сервер {
слушать 80;
имя_сервера mywebsite.com www.mywebsite.com;
вернуть 301 https://www.mywebsite2.com$request_uri; <--- Перенаправление
}
сайт2.com
домен находится на хост-сервере, и я могу запросить его как обычно. Я просто не могу понять, где я ошибся. Я чувствую, что это в моей конфигурации Nginx, но мой синтаксис Nginx не самый лучший.
Почему мой вернуть 301
не работает и перенаправляет меня на домен?
Несколько замечаний во время устранения неполадок:
wget 0.0.0.0:8223
возвращает:
--2021-07-26 23:44:19-- http://0.0.0.0:8223/
Подключение к 0.0.0.0:8223... подключено.
HTTP-запрос отправлен, ожидается ответ... 301 Перемещено навсегда
Расположение: https://www.mywebsite2.com/ [следующий]
--2021-07-25 23:44:19-- https://www.mywebsite2.com/
Разрешение www.mywebsite2.com (www.mywebsite2.com)... XX.XXX.XXX.XXX
Подключение к www.mywebsite2.com (www.mywebsite2.com)|XX.XXX.XXX.XXX|:443... подключено.
HTTP-запрос отправлен, ожидается ответ... 200 OK
Длина: не указана [текст/html]
Сохранение в: «index.html».
index.html [ <=> ] 37,56K 231 КБ/с за 0,2 с
25.07.2021, 23:44:20 (231 КБ/с) — «index.html» сохранен [38461]
curl --resolve www.myredirectserver.com:8223:0.0.0.0 http://www.myredirectserver.com/
возвращает тайм-аут, как и браузер.
Находясь в локальной сети, ввод IP-адреса Docker-контейнера в адресную строку (192.168.69.140:8223
) приводит меня к https://www.website2.com
.
Вход https://192.168.69.140:8224
переводит меня на страницу с предупреждением о безопасности. Нажмите продолжить
, и это дает мне 404
.
Я в недоумении, потому что не знаю, как обрабатывать запрос, когда он достигает IP-адреса CNAME. myredirectserver.com
. Как я могу сказать Nginx посмотреть исходный запрошенный домен сайт.com
?
Обновление (вторая попытка):
Я остановил контейнер Docker и изменил CNAME
в www
уровень в DNS, чтобы указать на уже существующий высокодоступный IP-адрес. я позвоню сервер назначения.net
. Итак, в основном:
`mywebsite.com`
|
|---> CNAME 'destinationserver.net'
`destinationserver.net`
|
|----> A XX.XXX.XXX.XXX --> Брандмауэр --> Прокси
|----> A XX.XXX.XXX.XXX --> Брандмауэр --> Прокси
На сервер назначения.net
сервер, у меня есть следующее в конфигурации Nginx для сайт.com
:
# ## www.mywebsite.com виртуальный хост
сервер {
слушать 8222 ssl;
имя_сервера mywebsite.com www.mywebsite.com;
ssl_certificate /etc/nginx/ssl/mywebsite.com.crt;
ssl_certificate_key /etc/nginx/ssl/mywebsite.com.key;
вернуть 301 http://www.mywebsite2.com$request_uri;
}
сервер {
слушать 8221;
имя_сервера mywebsite.com www.mywebsite.com;
вернуть 301 https://www.mywebsite2$request_uri;
}
Как я сказал в «Обновлении» в первой строке вопроса, это «работает», но было бы неплохо обрабатывать эти перенаправления в отдельном пространстве, отсюда и идея контейнера Docker.