Перенаправить защищенный домен на другой через CNAME и контейнер Nginx Docker

Обновление: Я добавил вторую попытку внизу этого сообщения. Это «работает», но я бы хотел, чтобы моя первоначальная идея работала.

Я пытаюсь перенаправить 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.

1
задан 27 July 2021 в 19:33
1 ответ

Я отказался от идеи сервера перенаправления и вместо этого использовал две вещи.:

Я добавил 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;
        } 

Это работает для того, что мне нужно, поэтому, если кто-то не предложит лучший метод, я оставлю его как есть.

0
ответ дан 9 August 2021 в 16:35

Теги

Похожие вопросы