Cómo evitar que nginx invierta subdirectorios específicos de proxy

11

En Apache puede ProxyPass todo excepto uno o más subdirectorios (con "!").

    ProxyPass /subdir !
    ProxyPass / http://localhost:9999/

¿Cuál es el equivalente de Nginx?

Mi primera suposición obviamente no está funcionando:

 location /subdir {
      root /var/www/site/subdir;
  }

 location / {
      proxy_pass http://localhost:9999/ ;
  }
Falken
fuente

Respuestas:

11

Puede vincular el proxy_pass a EXACTAMENTE la ruta que desee, de esta manera

location = / {
    proxy_pass http://localhost:9999/;
}

Esto asegura que no se pasará ninguna otra ruta sino /

O

puede usar esta sintaxis solo para que coincidan los subdirectorios

location ^~ /subdir {
     alias /var/www/site/subdir;
}

location / {
    proxy_pass http://localhost:9999/ ;
}

El ^~coincide con el subdirectorio y luego deja de buscar para /que no se ejecute. Se describe aquí .

Christopher Perrin
fuente
root / var / www / site / subdir debería ser root / var / www / site en mi caso, de lo contrario nginx intentará acceder a / var / www / site / subdir / subdir.
Tinus
Tienes razón. O eso, o puedes usarlo en aliaslugar deroot
Christopher Perrin
1
¿Podrías explicar esto ^~más? No pude entender qué hace. Intenté leer el enlace que enviaste, pero aún no puedo obtenerlo. Si la ubicación de prefijo coincidente más larga tiene el modificador "^ ~", entonces no se verifican las expresiones regulares.
Mohammed Noureldin
@MohammedNoureldin significa esencialmente que intenta hacer coincidir un prefijo en una ruta y no evalúa las expresiones regulares.
Christopher Perrin
1
@MohammedNoureldin es la primera parte del camino que desea usar para la ubicación. Y sí, es sin expresiones regulares.
Christopher Perrin