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.com
e https://myredirectserver.com
como exemplos.
Eu tenho um certificado SSL adquirido para website.com
, e seu DNS é CNAMED em www
to myredirectserver.com
. Há também um certificado SSL para mywebsite2.com
e atualmente fica em um servidor. Tudo está bem como um domínio independente.
myredirectserver.com
possui 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 run
parte 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.com
domí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 301
funcionando e me redirecionando para o domínio?
Algumas notas durante a solução de problemas:
wget 0.0.0.0:8223
retorna:
--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:8224
me leva a uma página de aviso de segurança. Clique proceed
e 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 CNAME
nível www
no 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.net
servidor, 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 www
as solicitações fossem para o mesmo local do gerenciador de tráfego altamente disponível que as não www
solicitações. Então, na Nginx
configuraçã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á.