![Перенаправление защищенного домена на другой с помощью CNAME и контейнера Nginx Docker](https://rvso.com/image/768928/%D0%9F%D0%B5%D1%80%D0%B5%D0%BD%D0%B0%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B7%D0%B0%D1%89%D0%B8%D1%89%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%B0%20%D0%BD%D0%B0%20%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B9%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20CNAME%20%D0%B8%20%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%B0%20Nginx%20Docker.png)
Обновлять:Я добавил вторую попытку внизу этого поста. Она "работает", но я хотел бы, чтобы моя изначальная идея работала.
Я пытаюсь перенаправить https-запрос для одного домена на другой через сервер перенаправления.
Я буду использовать https://website.com
, https://website2.com
, и https://myredirectserver.com
в качестве примеров.
У меня есть SSL-сертификат, купленный для website.com
, и его DNS имеет CNAMED в www
. myredirectserver.com
Также есть SSL-сертификат для mywebsite2.com
, и в настоящее время он находится на сервере. Все хорошо как отдельный домен.
myredirectserver.com
имеет две записи A управления трафиком (высокая доступность), которые указывают на два IP-адреса.
Эти два IP-адреса преобразуются в брандмауэре с помощью NAT на прокси-сервер.
На этом прокси-сервере находится Docker-контейнер, на котором запущен Alpine/Nginx.
Dockerfile для контейнера:
FROM nginx:1.17.7-alpine
RUN apk add --no-cache tzdata
ENV TZ America/Chicago
RUN rm /etc/nginx/conf.d/default.conf
COPY myredirectserver.com.conf /etc/nginx/conf.d/myredirectserver.com.conf
RUN rm /etc/nginx/nginx.conf
COPY nginx.conf /etc/nginx/nginx.conf
COPY myredirectserver.com.crt /etc/nginx/ssl/myredirectserver.com.crt
COPY myredirectserver.com.key /etc/nginx/ssl/myredirectserver.com.key
COPY proxy_params /etc/nginx/proxy_params
Часть docker run
для его запуска (имеются тома, смонтированные для динамического создания файла конфигурации через внутренний код):
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
:
#I DO NOT KNOW IF THIS IS CORRECT FOR WHAT I NEED
server {
listen 443 ssl;
server_name myredirectserver.com www.myredirectserver.com;
ssl_certificate /etc/nginx/ssl/myredirectserver.com.crt;
ssl_certificate_key /etc/nginx/ssl/myredirectserver.com.key;
}
server {
listen 80;
server_name myredirectserver.com www.myredirectserver.com;
return 301 https://www.myredirectserver.com$request_uri;
}
include /etc/nginx/myredirectserverBuild/*.conf;
Включаемый файл в конце содержиторигинальныйзапрошенный домен, mywebsite.com.conf
:
## www.mywebsite.com virtual host
server {
listen 443 ssl;
server_name mywebsite.com www.mywebsite.com;
ssl_certificate /etc/nginx/myredirectwebsiteSSL/mywebsite.com.crt;
ssl_certificate_key /etc/nginx/myredirectwebsiteSSL/mywebsite.com.key;
}
server {
listen 80;
server_name mywebsite.com www.mywebsite.com;
return 301 https://www.mywebsite2.com$request_uri; <--- The redirect
}
Домен website2.com
находится на хост-сервере, и я могу запросить его как обычно. Я просто не могу понять, где я ошибся. Мне кажется, что это в моих конфигурациях Nginx, но мой синтаксис Nginx не самый лучший. Почему у меня return 301
не работает и перенаправляет меня на домен?
Несколько замечаний по устранению неполадок:
wget 0.0.0.0:8223
возвращает:
--2021-07-26 23:44:19-- http://0.0.0.0:8223/
Connecting to 0.0.0.0:8223... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://www.mywebsite2.com/ [following]
--2021-07-25 23:44:19-- https://www.mywebsite2.com/
Resolving www.mywebsite2.com (www.mywebsite2.com)... XX.XXX.XXX.XXX
Connecting to www.mywebsite2.com (www.mywebsite2.com)|XX.XXX.XXX.XXX|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’
index.html [ <=> ] 37.56K 231KB/s in 0.2s
2021-07-25 23:44:20 (231 KB/s) - ‘index.html’ saved [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
переносит меня на страницу предупреждения о заставке безопасности. Щелкните proceed
, и он даст мне 404
.
Я в растерянности, потому что не знаю, как обрабатывать запрос, когда он достигает IP CNAME myredirectserver.com
. Как мне сказать Nginx, чтобы он посмотрел на исходный запрошенный домен website.com
?
Обновление (2-я попытка):
Я остановил контейнер Docker и изменил CNAME
на www
уровне DNS, чтобы указать на уже существующий высокодоступный IP. Я назову его destinationserver.net
. Так что в целом:
`mywebsite.com`
|
|---> CNAME 'destinationserver.net'
`destinationserver.net`
|
|----> A XX.XXX.XXX.XXX --> Firewall --> Proxy
|----> A XX.XXX.XXX.XXX --> Firewall --> Proxy
На destinationserver.net
сервере у меня в конфигурации Nginx есть следующее website.com
:
# ## www.mywebsite.com virtual host
server {
listen 8222 ssl;
server_name mywebsite.com www.mywebsite.com;
ssl_certificate /etc/nginx/ssl/mywebsite.com.crt;
ssl_certificate_key /etc/nginx/ssl/mywebsite.com.key;
return 301 http://www.mywebsite2.com$request_uri;
}
server {
listen 8221;
server_name mywebsite.com www.mywebsite.com;
return 301 https://www.mywebsite2$request_uri;
}
Как я уже сказал в «Обновлении» в первой строке вопроса, это «работает», но было бы неплохо обрабатывать эти перенаправления в отдельном пространстве, отсюда и идея контейнера Docker.
решение1
Я отказался от идеи сервера перенаправления и вместо этого сделал две вещи:
Я добавил ANAME (псевдоним) к корневому домену, чтобы www
запросы отправлялись в то же местоположение диспетчера трафика Highly Available, что и не-запросы www
. Затем в Nginx
конфигурации я добавил следующее для перенаправления запросов:
# ## www.mywebsite.com virtual host
server {
listen 8222 ssl;
server_name mywebsite.com www.mywebsite.com;
ssl_certificate /etc/nginx/ssl/mywebsite.com.crt;
ssl_certificate_key /etc/nginx/ssl/mywebsite.com.key;
return 301 https://www.mywebsite2.com$request_uri;
}
server {
listen 8221;
server_name mywebsite.com www.mywebsite.com;
return 301 https://www.mywebsite2$request_uri;
}
Это работает для тех целей, для которых я нуждаюсь, поэтому, если никто не предложит лучший метод, я оставлю все как есть.