Actualizați: Am atașat o a doua încercare în partea de jos a acestei postări. Este „funcționează”, dar aș dori ca ideea mea originală să funcționeze.
Încerc să redirecționez o solicitare https pentru un domeniu către altul printr-un server de redirecționare.
voi folosi https://website.com
, https://website2.com
, și https://myredirectserver.com
de exemplu.
Am un certificat SSL achiziționat pentru website.com
, iar DNS-ul său este CNAMED la www
la myredirectserver.com
. Există, de asemenea, un certificat SSL pentru site-ul meu2.com
, iar în prezent se află pe un server. Totul este bine ca domeniu independent.
myredirectserver.com
are două înregistrări A de gestionare a traficului (disponibilitate ridicată) care indică două adrese IP.
Aceste două adrese IP sunt NAT într-un firewall către un server proxy.
Pe acel server proxy, există un Docker Container, care rulează Alpine/Nginx.
Fișierul Docker pentru container:
DE LA nginx:1.17.7-alpin
RUN apk add --no-cache tzdata
ENV TZ America/Chicago
RUN rm /etc/nginx/conf.d/default.conf
COPIEAZĂ myredirectserver.com.conf /etc/nginx/conf.d/myredirectserver.com.conf
RUN rm /etc/nginx/nginx.conf
COPIEAZĂ nginx.conf /etc/nginx/nginx.conf
COPIEAZĂ myredirectserver.com.crt /etc/nginx/ssl/myredirectserver.com.crt
COPIEAZĂ myredirectserver.com.key /etc/nginx/ssl/myredirectserver.com.key
COPIAȚI proxy_params /etc/nginx/proxy_params
The docker run
porțiune pentru a-l porni (există volume montate pentru crearea unui fișier de configurare dinamic prin codul backend):
rulare docker --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
În acel container Docker, fișierul de configurare Nginx se află în /etc/nginx/conf.d/myredirectserver.com.conf
:
#NU STIU DACA ASTA ESTE CORECT PENTRU CE AM NEVOIE
Server {
asculta 443 ssl;
nume_server myredirectserver.com www.myredirectserver.com;
certificat_ssl /etc/nginx/ssl/myredirectserver.com.crt;
ssl_certificate_key /etc/nginx/ssl/myredirectserver.com.key;
}
Server {
asculta 80;
nume_server myredirectserver.com www.myredirectserver.com;
returnează 301 https://www.myredirectserver.com$request_uri;
}
includ /etc/nginx/myredirectserverBuild/*.conf;
Fișierul include de la sfârșit conține fișierul original domeniul solicitat, site-ul meu.com.conf
:
## www.mywebsite.com gazdă virtuală
Server {
asculta 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 {
asculta 80;
server_name mywebsite.com www.mywebsite.com;
return 301 https://www.mywebsite2.com$request_uri; <--- Redirecționarea
}
The website2.com
domeniul este pe serverul gazdă și îl pot solicita la fel de normal. Pur și simplu nu pot să-mi dau seama unde am greșit. Simt că se află în configurația(ele) mea Nginx, dar sintaxa mea Nginx nu este cea mai bună.
De ce este al meu întoarce 301
nu funcționează și mă redirecționează către domeniu?
Câteva note în timpul depanării:
wget 0.0.0.0:8223
se intoarce:
--2021-07-26 23:44:19-- http://0.0.0.0:8223/
Se conectează la 0.0.0.0:8223... conectat.
Solicitare HTTP trimisă, așteaptă răspuns... 301 Mutat permanent
Locație: https://www.mywebsite2.com/ [urmează]
--2021-07-25 23:44:19-- https://www.mywebsite2.com/
Se rezolvă www.mywebsite2.com (www.mywebsite2.com)... XX.XXX.XXX.XXX
Se conectează la www.mywebsite2.com (www.mywebsite2.com)|XX.XXX.XXX.XXX|:443... conectat.
Solicitare HTTP trimisă, se așteaptă răspuns... 200 OK
Lungime: nespecificată [text/html]
Se salvează în: âindex.htmlâ
index.html [ <=> ] 37,56K 231KB/s în 0,2s
25-07-2021 23:44:20 (231 KB/s) - âindex.htmlâ salvat [38461]
curl --resolve www.myredirectserver.com:8223:0.0.0.0 http://www.myredirectserver.com/
returnează un timeout, la fel ca și browserul.
În timp ce sunteți în rețeaua locală, introduceți IP-ul containerului Docker în bara de adrese (192.168.69.140:8223
) mă duce la https://www.website2.com
.
Intrând https://192.168.69.140:8224
mă duce la o pagină de avertizare de securitate. Clic continua
, și îmi oferă o 404
.
Sunt în pierdere pentru că nu știu cum să gestionez cererea când ajunge la IP-ul CNAME myredirectserver.com
. Cum îi pot spune lui Nginx să se uite la domeniul solicitat inițial website.com
?
Actualizare (a doua încercare):
Am oprit containerul Docker și l-am schimbat CNAME
la www
nivel în DNS pentru a indica un IP de înaltă disponibilitate deja existent. Îl voi suna destinationserver.net
. Deci practic:
`site-ul meu.com`
|
|---> CNAME „destinationserver.net”
`destinationserver.net`
|
|----> A XX.XXX.XXX.XXX --> Firewall --> Proxy
|----> A XX.XXX.XXX.XXX --> Firewall --> Proxy
Pe destinationserver.net
server, am următoarele în configurația Nginx pentru website.com
:
# ## www.mywebsite.com gazdă virtuală
Server {
asculta 8222 ssl;
server_name mywebsite.com www.mywebsite.com;
certificat_ssl /etc/nginx/ssl/mywebsite.com.crt;
ssl_certificate_key /etc/nginx/ssl/mywebsite.com.key;
return 301 http://www.mywebsite2.com$request_uri;
}
Server {
asculta 8221;
server_name mywebsite.com www.mywebsite.com;
returnează 301 https://www.mywebsite2$request_uri;
}
După cum am afirmat în „Actualizare” de pe prima linie a întrebării, aceasta este „funcționează”, dar ar fi bine să gestionăm aceste redirecționări într-un spațiu separat, de unde ideea containerului Docker.