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

Перенаправление защищенного домена на другой с помощью 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переносит меня на страницу предупреждения о заставке безопасности. Щелкните 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;
        } 

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

Связанный контент