![CNAME と Nginx Docker コンテナを介してセキュア ドメインを別のドメインにリダイレクトする](https://rvso.com/image/768928/CNAME%20%E3%81%A8%20Nginx%20Docker%20%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%82%92%E4%BB%8B%E3%81%97%E3%81%A6%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%20%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92%E5%88%A5%E3%81%AE%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%AB%E3%83%AA%E3%83%80%E3%82%A4%E3%83%AC%E3%82%AF%E3%83%88%E3%81%99%E3%82%8B.png)
アップデート:この投稿の最後に 2 回目の試みを追加しました。これは「機能」していますが、元のアイデアを機能させたいと思います。
リダイレクト サーバー経由で、あるドメインの https リクエストを別のドメインにリダイレクトしようとしています。
例としてhttps://website.com
、、https://website2.com
を使用します。https://myredirectserver.com
用に購入した SSL 証明書がありwebsite.com
、その DNS は から に CNAME されていますwww
。myredirectserver.com
用の SSL 証明書もありmywebsite2.com
、現在はサーバー上にあります。スタンドアロン ドメインとしてはすべて正常です。
myredirectserver.com
2 つの IP アドレスを指す 2 つのトラフィック管理 A レコード (高可用性) があります。
これら 2 つの 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
?
更新(2回目の試み):
Docker コンテナを停止し、 DNS のCNAME
レベルで をwww
、既存の高可用性 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
私はリダイレクト サーバーのアイデアを破棄し、代わりに次の 2 つのことを採用しました。
ルート ドメインに 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;
}
これは私が必要としていることを実現しているので、誰かがもっと良い方法を提案しない限り、そのままにしておきます。