Redirigir un dominio seguro a otro mediante CNAME y un contenedor Nginx Docker

Redirigir un dominio seguro a otro mediante CNAME y un contenedor Nginx Docker

Actualizar:He adjuntado un segundo intento al final de esta publicación. Está "funcionando", pero me gustaría que mi idea original funcionara.

Estoy intentando redirigir una solicitud https de un dominio a otro a través de un servidor de redireccionamiento.

Usaré https://website.com, https://website2.comy https://myredirectserver.comcomo ejemplos.

Compré un certificado SSL para website.comy su DNS tiene CNAMED wwwen myredirectserver.com. También hay un certificado SSL para mywebsite2.com, y actualmente se encuentra en un servidor. Todo está bien como dominio independiente.

myredirectserver.comtiene dos Registros A de Gestión de Tráfico (alta disponibilidad) que apuntan a dos direcciones IP.

Esas dos direcciones IP están conectadas por NAT en un firewall a un servidor proxy.

En ese servidor proxy, hay un contenedor Docker que ejecuta Alpine/Nginx.

El Dockerfile para el contenedor:

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

La docker runparte para iniciarlo (hay volúmenes montados para la creación de archivos de configuración dinámica a través del 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

En ese contenedor Docker, el archivo de configuración de Nginx se encuentra en /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;

El archivo de inclusión al final contiene eloriginaldominio 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
        }
        

El website2.comdominio está en el servidor host y puedo solicitarlo con normalidad. Simplemente no puedo entender dónde me he equivocado. Siento que está en mis configuraciones de Nginx, pero mi sintaxis de Nginx no es la mejor. ¿Por qué return 301no funciona y me redirige al dominio?

Un par de notas durante la resolución de problemas:

wget 0.0.0.0:8223devoluciones:

  --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/devuelve un tiempo de espera, al igual que el navegador.

Mientras estoy en la red local, ingresar la IP del contenedor Docker en la barra de direcciones ( 192.168.69.140:8223) me lleva a https://www.website2.com.

Entrar https://192.168.69.140:8224me lleva a una página de advertencia de seguridad. Hago clic proceedy me da un 404.

Estoy perdido porque no sé cómo manejar la solicitud cuando llega a la IP del CNAME myredirectserver.com. ¿Cómo puedo decirle a Nginx que mire el dominio solicitado original website.com?

Actualización (segundo intento):

Detuve el contenedor Docker y cambié el CNAMEnivel wwwen DNS para que apunte a una IP de alta disponibilidad ya existente. Lo llamaré destinationserver.net. Así que básicamente:

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

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

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

En el destinationserver.netservidor, tengo lo siguiente en la configuración de 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 dije en la 'Actualización' en la primera línea de la pregunta, esto está "funcionando", pero sería bueno manejar estas redirecciones en un espacio separado, de ahí la idea del contenedor Docker.

Respuesta1

Descarté la idea del servidor de redireccionamiento y opté por dos cosas:

Agregué un ANAME (Alias) al dominio raíz para que wwwlas solicitudes vayan a la misma ubicación del administrador de tráfico de alta disponibilidad que las que no son wwwsolicitudes. Luego, en la Nginxconfiguración, agregué lo siguiente para redirigir las solicitudes:

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

Esto funciona para lo que necesito, así que, a menos que alguien intervenga con un método mejor, lo dejaré como está.

información relacionada