Redirecionar domínio seguro para outro via CNAME e um Nginx Docker Container

Redirecionar domínio seguro para outro via CNAME e um Nginx Docker Container

Atualizar:Anexei uma segunda tentativa no final deste post. Está "funcionando", mas eu gostaria de fazer minha ideia original funcionar.

Estou tentando redirecionar uma solicitação https de um domínio para outro por meio de um servidor de redirecionamento.

Usarei https://website.com, https://website2.come https://myredirectserver.comcomo exemplos.

Eu tenho um certificado SSL adquirido para website.com, e seu DNS é CNAMED em wwwto myredirectserver.com. Há também um certificado SSL para mywebsite2.come atualmente fica em um servidor. Tudo está bem como um domínio independente.

myredirectserver.compossui dois registros A de gerenciamento de tráfego (alta disponibilidade) que apontam para dois endereços IP.

Esses dois endereços IP são NAT em um firewall para um servidor proxy.

Nesse servidor proxy, há um Docker Container, executando Alpine/Nginx.

O Dockerfile do contêiner:

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

A docker runparte para iniciá-lo (há volumes montados para criação de arquivo de configuração dinâmica via código backend):

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

Nesse Docker Container, o arquivo de configuração do Nginx está localizado em /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;

O arquivo de inclusão no final contém ooriginaldomínio solicitado 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
        }
        

O website2.comdomínio está no servidor host e posso solicitá-lo normalmente. Eu simplesmente não consigo descobrir onde errei. Sinto que está em minhas configurações do Nginx, mas minha sintaxe do Nginx não é a melhor. Por que não está return 301funcionando e me redirecionando para o domínio?

Algumas notas durante a solução de problemas:

wget 0.0.0.0:8223retorna:

  --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/retorna um tempo limite, assim como o navegador.

Enquanto estou na rede local, inserir o IP do contêiner Docker na barra de endereço ( 192.168.69.140:8223) me leva para https://www.website2.com.

Entrar https://192.168.69.140:8224me leva a uma página de aviso de segurança. Clique proceede isso me dá um 404.

Estou perdido porque não sei como lidar com a solicitação quando ela atinge o IP do CNAME myredirectserver.com. Como posso dizer ao Nginx para examinar o domínio original solicitado website.com?

Atualização (2ª tentativa):

Parei o contêiner do Docker e alterei o CNAMEnível wwwno DNS para apontar para um IP altamente disponível já existente. Eu vou ligar destinationserver.net. Então, basicamente:

`mywebsite.com`
|
|---> CNAME 'destinationserver.net'

`destinationserver.net`
|
|----> A XX.XXX.XXX.XXX --> Firewall --> Proxy

|----> A XX.XXX.XXX.XXX --> Firewall --> Proxy

No destinationserver.netservidor, tenho o seguinte na configuração do Nginx para 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;
        } 

Como afirmei na 'Atualização' na primeira linha da pergunta, isso está "funcionando", mas seria bom lidar com esses redirecionamentos em um espaço separado, daí a ideia do contêiner Docker.

Responder1

Descartei a ideia do servidor de redirecionamento e optei por duas coisas:

Adicionei um ANAME (Alias) ao domínio raiz para que wwwas solicitações fossem para o mesmo local do gerenciador de tráfego altamente disponível que as não wwwsolicitações. Então, na Nginxconfiguração, adicionei o seguinte para redirecionar as solicitações:

# ## 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;
        } 

Isso está funcionando para o que eu preciso fazer, então, a menos que alguém intervenha com um método melhor, deixarei como está.

informação relacionada