Nginx maneja rutas relativas provoca errores 404

Nginx maneja rutas relativas provoca errores 404

Tengo el problema de que cuando inverso el proxy de una página, no se encuentran las rutas relativas de los archivos.

Ejemplo de trabajo:

https://lfportal.mohavecounty.us/bos/search.aspx?dbid=0&searchcommand=%28%7B%5BBOS%20Agenda%20Packets%5D%3A%5BMeeting%20Date%5D%3D%2211/23/2020%22%7D%20%26%20%7B%5BBOS%20Agenda%20Packets%5D%3A%5BMeeting%20Type%5D%3D%22Special%22%7D%20%26%20%7B%5BBOS%20Agenda%20Packets%5D%3A%5BItem%20Number%5D%3D%22Item%20001%22%7D%29%20

Que redirige al resultado de la búsqueda:

https://lfportal.mohavecounty.us/bos/0/doc/1652027/Page1.aspx

En el archivo Page1.aspx hay rutas que utilizan la ruta relativa como se muestra en el siguiente ejemplo

<img id="A_T0_0_1" unselectable="on" src="../../../Helper/TileData.aspx?reposName=MohaveDocs&amp;docID=1652027&amp;x=0&amp;y=1&amp;pageNum=1&amp;scale=3782&amp;ro=0&amp;time=1607098159588&amp;showAnn=1&amp;pageID=7493796&amp;search=">

Ahora con mi redireccionamiento

https://lfdocs.mohave.gov/bos/search.aspx?dbid=0&searchcommand=%28%7B%5BBOS%20Agenda%20Packets%5D%3A%5BMeeting%20Date%5D%3D%2211/23/2020%22%7D%20%26%20%7B%5BBOS%20Agenda%20Packets%5D%3A%5BMeeting%20Type%5D%3D%22Special%22%7D%20%26%20%7B%5BBOS%20Agenda%20Packets%5D%3A%5BItem%20Number%5D%3D%22Item%20001%22%7D%29%20

La página se carga pero no continúa porque falla. Da una asignación de 404 y al mirar la dirección de una de las imágenes de arriba en el desarrollador de Chrome, el error 404 muestra la dirección:

https://lfdocs.mohave.gov/Helper/TileData.aspx?reposName=MohaveDocs&docID=1652027&x=0&y=1&pageNum=1&scale=3782&ro=0&time=1607098058369&showAnn=1&pageID=7493796&search=

Entonces parece que falta la carpeta raíz bos. https://lfdocs.mohave.gov/Helper/TileData.aspx?

Debería ser la URL: https://lfportal.mohavecounty.us/bos/Helper/TileData.aspx?

Entonces parece que mi pase de proxy no maneja correctamente el atributo relativo. A continuación se muestra mi configuración de sitio Nginx de muestra. El problema ocurre en el segundo si la condición

if ($saved_redirect_location !~* "10.4.1.81") { .. }

Mi archivo de configuración:

server{

    listen       443 ssl http2; # default_server;
    server_name  lfdocs.mohave.gov;

    access_log  /var/log/nginx/lfdocs_mohave_gov_access.log;
    error_log   /var/log/nginx/lfdocs_mohave_gov_error.log info;
    
    include /etc/nginx/sites-available/mohave_gov_ssl.conf;

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

    
        if ($saved_redirect_location ~* "10.4.1.81") {
            add_header X-debug-message 1$saved_redirect_location always;
            proxy_pass $saved_redirect_location;
        }

        if ($saved_redirect_location !~* "10.4.1.81") {
            add_header X-debug-message http://10.4.1.81$saved_redirect_location always;
            proxy_pass http://10.4.1.81$saved_redirect_location;
        }       
    }   
}

En el desarrollador de Chrome miro el encabezado personalizado x-debug-message y tiene el valor:

x-debug-message: http://10.4.1.81/bos/0/doc/1652027/Page1.aspx

Intenté eliminar la barra diagonal debajo de la sección de ubicación de un artículo que leí, pero no funcionó.

¿Alguna idea sobre por qué las rutas relativas no se cargan?

Respuesta1

Las rutas relativas las agrega su aplicación de backend. nginx no toca los caminos de ninguna manera.

Si su aplicación de backend utiliza rutas relativas, entonces su URL de frontend debe tener la misma profundidad que la URL de backend.

En su primer ejemplo:

https://lfportal.mohavecounty.us/bos/0/doc/1652027/Page1.aspx

La URL está en el cuarto nivel del subdirectorio. Esto significa que el navegador puede ../../../resolver /bos.

En su segundo ejemplo:

https://lfdocs.mohave.gov/bos/search.aspx?dbid=0&searchcommand=%28%7B%5BBOS%20Agenda%20Packets%5D%3A%5BMeeting%20Date%5D%3D%2211/23/2020%22%7D%20%26%20%7B%5BBOS%20Agenda%20Packets%5D%3A%5BMeeting%20Type%5D%3D%22Special%22%7D%20%26%20%7B%5BBOS%20Agenda%20Packets%5D%3A%5BItem%20Number%5D%3D%22Item%20001%22%7D%29%20

La URL está en el segundo nivel de subdirectorio. Ahora, el navegador intenta resolver ../../../la URL y termina siendo /una URL.

Mi recomendación es que reemplace las URL relativas con URL relativas a la raíz del sitio:/bos/Helper/TileData.aspx?reposName=MohaveDocs&amp;docID=1652027&amp;x=0&amp;y=1&amp;pageNum=1&amp;scale=3782&amp;ro=0&amp;time=1607098159588&amp;showAnn=1&amp;pageID=7493796&amp;search

Otro problema con sus URL es que los caracteres comerciales están codificados en URL, lo que puede provocar un resultado final no deseado.

información relacionada