次のサーバー設定は、1 つの URL では機能しますが、別の URL では失敗するようです。
location / {
proxy_buffers 16 4k;
proxy_buffer_size 2k;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_pass http://10.4.1.81/;
# This is used to handle the multiple redirect 301 that the server is doing
proxy_intercept_errors on;
error_page 301 302 307 = @handle_redirects;
}
location @handle_redirects {
set $saved_redirect_location '$upstream_http_location';
proxy_pass $saved_redirect_location;
}
次の URL にアクセスすると:
https://lfdocs.mohave.gov/bos/0/doc/1652027/Page1.aspx
Nginxから次のエラーが発生します
2020/12/03 19:10:40 [error] 31251#31251: *1 invalid URL prefix in "/bos/CookieCheck.aspx?redirect=%2fbos%2fDocView.aspx%3fdbid%3d0%26id%3d1652027%26page%3d1" while sending to client, client: 10.10.82.151, server: lfdocs.mohave.gov, request: "GET /bos/0/doc/1652027/Page1.aspx HTTP/2.0", host: "lfdocs.mohave.gov"
調べてみたのですが、わかりません。何かアドバイスはありますか?
ありがとう
アップデート
問題は、有効なのは有効な URL を持つものであるということのようです。失敗した場合は、URL が無効であるために発生します。
echo $saved_redirect_location; を使用する
成功
URL:
https://lfdocs.mohave.gov/Forms/RequestToSpeak
戻る:
https://10.4.1.81/フォーム/リクエストToSpeak
失敗:
URL:
https://lfdocs.mohave.gov/bos/0/doc/1652027/Page1.aspx
戻り値:
/bos/CookieCheck.aspx?リダイレクト=%2fbos%2fDocView.aspx%3fdbid%3d0%26id%3d1652027%26ページ%3d1
echo http://10.4.1.81$saved_redirect_location; を使用します
失敗
URL:
https://lfdocs.mohave.gov/Forms/RequestToSpeak
戻る:
http://10.4.1.81https://10.4.1.81/Forms/RequestToSpeak
成功
URL:
https://lfdocs.mohave.gov/bos/0/doc/1652027/Page1.aspx
戻る:
$saved_redirect_location を proxy_pass に使用する場合、ドメインが存在するかどうかを確認し、存在しない場合は追加する方法はありますか?
アップデート
私の解決策は次の通りでした:
location @handle_redirects {
set $saved_redirect_location '$upstream_http_location';
# If IP exists just proxy pass
if ($saved_redirect_location ~* "10.4.1.81") {
proxy_pass $saved_redirect_location;
}
# If IP doesnt exist append it first
if ($saved_redirect_location !~* "10.4.1.81") {
proxy_pass http://10.4.1.81$saved_redirect_location;
}
}
答え1
これは私にとって最終的にうまくいった解決策です。ヒントを教えてくれた Ivan に感謝します。
location @handle_redirects {
set $saved_redirect_location '$upstream_http_location';
# If IP exists just proxy pass
if ($saved_redirect_location ~* "10.4.1.81") {
proxy_pass $saved_redirect_location;
}
# If IP doesnt exist append it first
if ($saved_redirect_location !~* "10.4.1.81") {
proxy_pass http://10.4.1.81$saved_redirect_location;
}
}