Nginx 잘못된 URL 경로 접두어 .. 클라이언트로 보내는 중

Nginx 잘못된 URL 경로 접두어 .. 클라이언트로 보내는 중

한 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이 유효하지 않기 때문입니다.

  1. echo $saved_redirect_location 사용;

    성공

    URL:

    https://lfdocs.mohave.gov/Forms/RequestToSpeak

    반품:

    https://10.4.1.81/Forms/RequestToSpeak

    실패:

    URL:

    https://lfdocs.mohave.gov/bos/0/doc/1652027/Page1.aspx

    보고:

    /bos/CookieCheck.aspx?redirect=%2fbos%2fDocView.aspx%3fdbid%3d0%26id%3d1652027%26page%3d1

  2. 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

    반품:

    http://10.4.1.81/bos/CookieCheck.aspx?redirect=%2fbos%2fDocView.aspx%3fdbid%3d0%26id%3d1652027%26page%3d1

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

관련 정보