Prefijo de ruta de URL de Nginx no válido... mientras se envía al cliente

Prefijo de ruta de URL de Nginx no válido... mientras se envía al cliente

Tengo la siguiente configuración de servidor que funciona para una URL pero parece fallar en otra 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;
}   

Cuando voy a la siguiente URL:

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

Recibo el siguiente error de 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"

Investigué un poco pero parece que no puedo entenderlo. ¿Algún consejo?

Gracias

Actualizar

Aquí está lo que parece ser el problema: los válidos son los que tienen una URL válida. Cuando falla es porque la URL no es válida.

  1. Usando eco $saved_redirect_location;

    Éxito

    URL:

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

    Devolver:

    https://10.4.1.81/Forms/RequestToSpeak

    falla:

    URL:

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

    Devoluciones:

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

  2. Usando echo http://10.4.1.81$saved_redirect_location;

    falla

    URL:

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

    Devolver:

    http://10.4.1.81https://10.4.1.81/Forms/RequestToSpeak

    Éxito

    URL:

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

    Devolver:

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

Al usar $saved_redirect_location para proxy_pass, ¿hay alguna manera de verificar si el dominio existe y, en caso contrario, agregarlo?

Actualizar

Mi solución fue hacer lo siguiente:

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

Respuesta1

Esta es la solución que terminó funcionando para mí. Gracias Iván por el consejo.

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

información relacionada