透過 CNAME 和 Nginx Docker 容器將安全域重新導向到另一個網域

透過 CNAME 和 Nginx Docker 容器將安全域重新導向到另一個網域

更新:我在這篇文章的底部附加了第二次嘗試。它是“可行的”,但我想讓我最初的想法發揮作用。

我正在嘗試透過重定向伺服器將一個網域的 https 請求重定向到另一個網域。

我將使用https://website.comhttps://website2.com、 和https://myredirectserver.com作為範例。

我為 購買了 SSL 證書website.com,並且其 DNS 為 CNAMEDwwwmyredirectserver.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 容器的 IP192.168.69.140:8223會將我帶到https://www.website2.com

輸入後https://192.168.69.140:8224我會進入安全警告頁面。單擊proceed,它給了我一個404.

我很茫然,因為我不知道當請求到達 CNAME 的 IP 時如何處理該請求myredirectserver.com。我該如何告訴 Nginx 查看原始請求的網域website.com

更新(第二次嘗試):

我停止了 Docker 容器,並將 DNS 等級更改CNAMEwww指向已存在的高可用 IP。我會調用它destinationserver.net。所以基本上:

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

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

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

destinationserver.net伺服器上,我的 Nginx 設定如下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

我放棄了重定向伺服器的想法,轉而採用兩件事:

我向根網域新增了 ANAME(別名),因此www請求將轉到與非請求相同的高可用流量管理器位置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;
        } 

這正在滿足我需要它做的事情,所以除非有人提出更好的方法,否則我將保持原樣。

相關內容