Leiten Sie eine sichere Domäne über CNAME und einen Nginx-Docker-Container auf eine andere um

Leiten Sie eine sichere Domäne über CNAME und einen Nginx-Docker-Container auf eine andere um

Aktualisieren:Ich habe unten an diesen Beitrag einen zweiten Versuch angehängt. Er „funktioniert“, aber ich möchte, dass meine ursprüngliche Idee funktioniert.

Ich versuche, eine https-Anfrage für eine Domäne über einen Umleitungsserver auf eine andere umzuleiten.

Ich werde https://website.com, https://website2.com, und https://myredirectserver.comals Beispiele verwenden.

Ich habe ein SSL-Zertifikat für gekauft website.comund sein DNS ist unter CNAMED wwwauf myredirectserver.com. Es gibt auch ein SSL-Zertifikat für mywebsite2.comund es befindet sich derzeit auf einem Server. Als eigenständige Domäne ist alles in Ordnung.

myredirectserver.comverfügt über zwei Traffic Management A Records (hohe Verfügbarkeit), die auf zwei IP-Adressen verweisen.

Diese beiden IP-Adressen werden in einer Firewall per NAT an einen Proxyserver übermittelt.

Auf diesem Proxyserver befindet sich ein Docker-Container, auf dem Alpine/Nginx läuft.

Das Dockerfile für den Container:

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

Der docker runTeil zum Starten (es sind Volumes für die dynamische Erstellung von Konfigurationsdateien über Backend-Code gemountet):

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

In diesem Docker-Container befindet sich die Nginx-Konfigurationsdatei an folgendem Ort /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;

Die Include-Datei am Ende enthält dieOriginalangeforderte Domain, 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
        }
        

Die website2.comDomäne befindet sich auf dem Hostserver und ich kann sie wie gewohnt anfordern. Ich kann einfach nicht herausfinden, was ich falsch gemacht habe. Ich habe das Gefühl, dass es an meiner/meinen Nginx-Konfiguration(en) liegt, aber meine Nginx-Syntax ist nicht die beste. Warum funktioniert es return 301nicht und ich werde nicht auf die Domäne umgeleitet?

Einige Hinweise zur Fehlerbehebung:

wget 0.0.0.0:8223kehrt zurück:

  --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/gibt ein Timeout zurück, ebenso wie der Browser.

Wenn ich im lokalen Netzwerk bin, gelange ich durch Eingabe der IP des Docker-Containers in die Adressleiste ( 192.168.69.140:8223) zu https://www.website2.com.

Wenn ich die Eingabetaste drücke, https://192.168.69.140:8224gelange ich zu einer Seite mit einer Sicherheitswarnung. Wenn ich klicke proceed, wird mir ein angezeigt 404.

Ich bin ratlos, weil ich nicht weiß, wie ich mit der Anfrage umgehen soll, wenn sie die IP des CNAME erreicht myredirectserver.com. Wie kann ich Nginx anweisen, sich die ursprünglich angeforderte Domäne anzusehen website.com?

Update (2. Versuch):

Ich habe den Docker-Container gestoppt und die CNAMEauf der wwwEbene im DNS geändert, sodass sie auf eine bereits vorhandene hochverfügbare IP verweist. Ich werde sie nennen destinationserver.net. Im Wesentlichen also:

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

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

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

Auf dem destinationserver.netServer habe ich Folgendes in der Nginx-Konfiguration für 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;
        } 

Wie ich im „Update“ in der ersten Zeile der Frage sagte, „funktioniert“ dies, aber es wäre schön, diese Weiterleitungen in einem separaten Bereich zu handhaben, daher die Idee mit dem Docker-Container.

Antwort1

Ich habe die Idee mit dem Umleitungsserver verworfen und mich stattdessen für zwei Dinge entschieden:

Ich habe der Stammdomäne einen ANAME (Alias) hinzugefügt, damit wwwdie Anfragen an denselben hochverfügbaren Traffic Manager-Standort gehen wie die Nicht- wwwAnfragen. Dann Nginxhabe ich in der Konfiguration Folgendes hinzugefügt, um die Anfragen umzuleiten:

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

Für meinen Zweck funktioniert es. Sofern mir also niemand eine bessere Methode vorschlägt, lasse ich es so.

verwandte Informationen