2012-05-22 12 views
11

tengo esta configuración que funciona como se esperaba en un server { } definición vacía¿Cómo hacer que nginx deje de procesar otras reglas y sirva una ubicación específica?

location ^~ /foo/ { 
    alias /var/www/foo/; 
    } 

Pero cuando muevo esto en una definición de servidor considerablemente más grande (que se utiliza para una configuración multi-sitio de wordpress), dejará de funcionar y wordpress responderá a eso (que obviamente no fue mi intención).

Intenté poner al principio o al final del bloque del servidor, pero esto no lo cambió.

¿Cómo puedo forzar a nginx a utilizar esta ubicación?

Respuesta

14

Probablemente estés buscando break.

location ^~ /foo/ { 
    alias /var/www/foo/; 
    break; 
} 

Desde el HttpRewriteModule documentation:

last - completado el procesamiento de directivas de reescritura actuales y reinicia el proceso (incluyendo la reescritura) con una búsqueda de una coincidencia en la URI de todas las ubicaciones disponibles.

break - completado el procesamiento de directivas de reescritura actuales y procesamiento no reescritura continúa dentro del bloque de ubicación actual solamente.

Tenga en cuenta que los bloques de ubicación externa, última y ruptura son efectivamente los mismos .

+1

Es para las reglas de reescritura y no para las directivas de ubicación. – peterh

1

Los bloques de ubicación en Nginx son exclusivos. Si usa location ^~, entonces otras reglas, probablemente, los encabezados de vencimiento para objetos estáticos no se aplicarán a menos que copie esas reglas anidadas bajo el mismo bloque de ubicación.

Si pudiera compartir su configuración completa, entonces puedo hacerlo funcionar. Lo más probable es que necesite utilizar bloques de ubicación anidados.

+0

Su segunda oración es indescifrable. – peterh

+0

Me refiero a si los encabezados de caducidad se enumeran en un bloque común separado, entonces no se aplicarán a este bloque que está usando 'location^~' –

Cuestiones relacionadas