2012-07-19 14 views
128

Estoy buscando para servir la url raíz de un subdominio y el directorio de un subdominio a dos carpetas diferentes en mi servidor. Esta es la sencilla puesta a punto que tengo y no está funcionando ...Configurar nginx con varias ubicaciones con diferentes carpetas raíz en el subdominio

server { 

    index index.html index.htm; 
    server_name test.example.com; 

    location/{ 
      root /web/test.example.com/www; 
    } 

    location /static { 
      root /web/test.example.com/static; 
    } 
} 

En este ejemplo va a test.example.com/ traería el archivo de índice en /web/test.example.com/ www

e ir a test.example.com/static traería el archivo de índice en /web/test.example.com/static

Respuesta

156

Es necesario utilizar la directiva alias para location /static:

server { 

    index index.html; 
    server_name test.example.com; 

    root /web/test.example.com/www; 

    location /static { 
    alias /web/test.example.com/static; 
    } 

} 

El nginx wiki explica la diferencia entre la raíz y el alias mejor que yo:

en cuenta que puede ser similar a la directiva de la raíz a primera vista, pero la raíz del documento no cambia, sólo la ruta del sistema de archivos utilizado para la solicitud La parte de ubicación de la solicitud se elimina en la solicitud de problemas de Nginx.

+42

Él no necesita 'alias'. Por favor, lea [los documentos oficiales] (http://nginx.org/r/alias), no la wiki de la comunidad llena por los usuarios. Cita: * Cuando la ubicación coincide con la última parte del valor de la directiva, es mejor usar la directiva raíz *. – VBart

+4

Esto funcionó para mí, excepto que falta una barra inclinada. El alias debe leer: alias /web/test.example.com/static/; – ajma

+4

@VBart los documentos dicen exactamente lo que usted dice, pero no justifican esa instrucción en absoluto; parece una elección de estilo arbitraria. ¿Ves alguna razón lógica detrás de esto? –

35
server { 

    index index.html index.htm; 
    server_name test.example.com; 

    location/{ 
     root /web/test.example.com/www; 
    } 

    location /static { 
     root /web/test.example.com; 
    } 
} 

http://nginx.org/r/root

+6

@Todo, no: http://nginx.org/en/docs/http/ngx_http_core_module.html#alias – Athlan

+0

¿cuál es la diferencia con la pregunta? – TangMonk

+1

@Wooden la diferencia: 'root /web/test.example.com;' en lugar de 'root /web/test.example.com/static;'.nginx mapea la ruta especificada por * ubicación * al árbol direccional y dado que la ruta y el directorio fuente comparten el mismo nombre, funciona con 'root'. – rmoestl

58

el Sistema de Localización Directiva es

Al igual que desea reenviar todas las solicitudes que comienzan /static y sus datos presentes en /var/www/static

Así que un simple El método está separado de la última carpeta de la ruta completa , Eso significa

Ruta completa: /var/www/static

última ruta: /static y la Primera ruta: /var/www

location <lastPath> { 
    root <FirstPath>; 
} 

los que puede pasar lo que hizo error y ¿cuál es su soluciones

Su error:

location /static { 
    root /web/test.example.com/static; 
} 

Sus soluciones:

location /static { 
    root /web/test.example.com; 
} 
+0

Eso me ayudó: me di cuenta de que necesitaba cambiar el nombre de mi carpeta o configurar un enlace simbólico para que todo funcionara. – cjm

+1

muchas gracias, estaba fallando exactamente de esta manera :) – bobmoff

Cuestiones relacionadas