CNAME 및 Nginx Docker 컨테이너를 통해 보안 도메인을 다른 도메인으로 리디렉션

CNAME 및 Nginx Docker 컨테이너를 통해 보안 도메인을 다른 도메인으로 리디렉션

업데이트:이 게시물 하단에 2차 시도를 추가했습니다. 그것은 "작동 중"이지만, 나는 나의 독창적인 아이디어를 작동시키고 싶습니다.

리디렉션 서버를 통해 특정 도메인에 대한 https 요청을 다른 도메인으로 리디렉션하려고 합니다.

https://website.com예를 들어 , https://website2.com및 를 사용하겠습니다 https://myredirectserver.com.

에 대해 구매한 SSL 인증서가 있고 website.com해당 DNS는 에 CNAMED되어 www있습니다 myredirectserver.com. 에 대한 SSL 인증서도 있으며 mywebsite2.com현재 서버에 있습니다. 모두 독립형 도메인과 같습니다.

myredirectserver.com두 개의 IP 주소를 가리키는 두 개의 트래픽 관리 A 레코드(고가용성)가 있습니다.

이 두 IP 주소는 방화벽에서 프록시 서버로 NAT됩니다.

해당 프록시 서버에는 Alpine/Nginx를 실행하는 Docker 컨테이너가 있습니다.

컨테이너용 Dockerfile:

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

docker run시작 부분(백엔드 코드를 통해 동적 구성 파일 생성을 위해 마운트된 볼륨이 있음) :

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

해당 Docker 컨테이너에서 Nginx 구성 파일은 다음 위치에 있습니다 /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;

마지막에 있는 포함 파일에는원래의요청한 도메인 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
        }
        

도메인은 website2.com호스트 서버에 있으므로 평소와 같이 해당 도메인을 요청할 수 있습니다. 나는 내가 어디서 잘못되었는지 알 수 없습니다. 내 Nginx 구성에 있는 것 같지만 내 Nginx 구문이 최고는 아닙니다. 내가 return 301일하지 않고 도메인으로 리디렉션되는 이유는 무엇입니까?

문제 해결 중 몇 가지 참고 사항:

wget 0.0.0.0:8223보고:

  --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/브라우저와 마찬가지로 시간 초과를 반환합니다.

로컬 네트워크에 있는 동안 주소 표시줄( )에 Docker 컨테이너의 IP를 입력하면 192.168.69.140:8223으로 이동됩니다 https://www.website2.com.

입력하면 https://192.168.69.140:8224보안 스플래시 경고 페이지로 이동됩니다. 을 클릭 proceed하면 404.

CNAME의 IP에 도달하면 요청을 처리하는 방법을 모르기 때문에 헤매고 있습니다 myredirectserver.com. Nginx에게 원래 요청한 도메인을 보도록 지시하려면 어떻게 해야 합니까 website.com?

업데이트(두 번째 시도):

Docker 컨테이너를 중지하고 이미 존재하는 고가용성 IP를 가리키도록 DNS 수준 CNAME을 변경했습니다. www내가 전화할게 destinationserver.net. 그래서 기본적으로:

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

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

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

서버 의 destinationserver.netNginx 구성에는 다음이 있습니다 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;
        } 

질문 첫 번째 줄의 '업데이트'에서 언급했듯이 이는 "작동 중"이지만 이러한 리디렉션을 별도의 공간에서 처리하는 것이 좋을 것이므로 Docker 컨테이너 아이디어가 필요합니다.

답변1

나는 리디렉션 서버 아이디어를 버리고 대신 다음 두 가지를 선택했습니다.

www요청이 비요청과 동일한 고가용성 트래픽 관리자 위치로 이동되도록 루트 도메인에 ANAME(별칭)을 추가했습니다 www. 그런 다음 Nginx구성에서 요청을 리디렉션하기 위해 다음을 추가했습니다.

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

이것은 내가 해야 할 일을 위해 작동하고 있으므로 누군가 더 나은 방법을 제시하지 않는 한 그대로 두겠습니다.

관련 정보