![Leiten Sie eine sichere Domäne über CNAME und einen Nginx-Docker-Container auf eine andere um](https://rvso.com/image/768928/Leiten%20Sie%20eine%20sichere%20Dom%C3%A4ne%20%C3%BCber%20CNAME%20und%20einen%20Nginx-Docker-Container%20auf%20eine%20andere%20um.png)
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.com
als Beispiele verwenden.
Ich habe ein SSL-Zertifikat für gekauft website.com
und sein DNS ist unter CNAMED www
auf myredirectserver.com
. Es gibt auch ein SSL-Zertifikat für mywebsite2.com
und es befindet sich derzeit auf einem Server. Als eigenständige Domäne ist alles in Ordnung.
myredirectserver.com
verfü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 run
Teil 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.com
Domä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 301
nicht und ich werde nicht auf die Domäne umgeleitet?
Einige Hinweise zur Fehlerbehebung:
wget 0.0.0.0:8223
kehrt 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:8224
gelange 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 CNAME
auf der www
Ebene 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.net
Server 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 www
die Anfragen an denselben hochverfügbaren Traffic Manager-Standort gehen wie die Nicht- www
Anfragen. Dann Nginx
habe 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.