私は、example.com というサイト用のサーバー上で Nginx をリバースプロキシとして設定しました。
クライアントがIPアドレスを使ってサイトにアクセスできるようにしたいのですが、http://192.0.2.67
問題は、example.comサイトでHTTPをHTTPSにリダイレクトするように設定しているリダイレクトがあることです。(このexample.comはCloudflareを使用しています)
クライアントが私のサイトにアクセスするとhttp://192.0.2.67
、https://example.com
Nginx リバース プロキシで HTTP から HTTPS へのリダイレクトを無効にする方法を教えてください。
私のコードは以下のようなものです:
server {
listen 80;
location / {
proxy_pass http://example.com;
}
}
答え1
質問に投稿されたコードにはリダイレクトが表示されません。これは、リダイレクトが example.com 側で実行されることを意味します。
リダイレクトがどのように行われるかによって異なります。リダイレクトが単に「http TCP/80 => https TCP/433」で行われ、次のチェックが行われない場合は、https に直接プロキシすることを試みることができます。
server {
listen 80;
location / {
proxy_pass https://example.com;
}
}
これが役に立たない場合、https リダイレクトの強制を実現するノードではないため、成功する可能性はあまりないと思われます。
ページに HTTP Strict Transport Security (HSTS) ヘッダーがある場合、リダイレクトはブラウザ レベルで行われ、IP をスキップする可能性も最小限になります (理論的には、このヘッダーをフィルター処理することができます)。
答え2
リダイレクトを行っているのは Web サーバーではなくページであるように思われます。PHP では、次のようにしてこれを実現できます。
<?php header('Location: http://google.com') ?>
その場合、Web サーバー自体を通じてそのような動作を禁止することは困難です。
答え3
Nginx はここでリダイレクトしません。この HTTP リダイレクトを送信するのはオリジン サーバーです。Nginx を使用すると、送信されたリダイレクトを独自のリダイレクト ターゲットに置き換えることができます。
server {
listen 80;
location / {
proxy_pass http://example.com;
# replace redirects
proxy_redirect http://example.com http://192.0.2.67;
}
}