Обновление: Я добавил вторую попытку внизу этого сообщения. Это «работает», но я бы хотел, чтобы моя первоначальная идея работала.
Я пытаюсь перенаправить 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
я попадаю на страницу с предупреждением о всплеске безопасности. Нажмите продолжить
, и я получу 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.
Я отказался от идеи сервера перенаправления и вместо этого использовал две вещи.:
Я добавил ANAME (Псевдоним)к корневому домену, чтобы www
запросы направлялись в одно и то же расположение высокодоступного диспетчера трафика. как не-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;
}
Это работает для того, что мне нужно, поэтому, если кто-то не предложит лучший метод, я оставлю его как есть.