2012-03-28 21 views
64

Tengo nginx actuando como un proxy inverso para apache. Ahora necesito agregar un nuevo subdominio que servirá archivos de otro directorio, pero al mismo tiempo quiero que todas las directivas de ubicación y proxy_pass que tengo para el host predeterminado también se apliquen al subdominio.configuración del subdominio nginx

Sé que si copio las reglas del host predeterminado al nuevo subdominio funcionará, pero ¿hay alguna manera para que el subdominio herede las reglas? A continuación se muestra un ejemplo de configuración

server { 
    listen  80; 
    server_name www.somesite.com; 
    access_log logs/access.log; 
    error_log logs/error.log error; 


    location /mvc { 
     proxy_pass http://localhost:8080/mvc; 
    } 


    location /assets { 
     alias /var/www/html/assets; 
     expires  max; 
    } 

    ... a lot more locations 
} 

server { 
    listen  80; 
    server_name subdomain.somesite.com; 

    location/{ 
       root /var/www/some_dir; 
       index index.html index.htm; 
     } 
} 

Gracias

Respuesta

76

Se podía mover las partes comunes a otro archivo de configuración y include de ambos contextos servidor. Esto debería funcionar:

server { 
    listen 80; 
    server_name server1.example; 
    ... 
    include /etc/nginx/include.d/your-common-stuff.conf; 
} 

server { 
    listen 80; 
    server_name another-one.example; 
    ... 
    include /etc/nginx/include.d/your-common-stuff.conf; 
} 

Editar: Aquí hay un ejemplo que se ha copiado de mi servidor en ejecución. Configuro la configuración básica de mi servidor en /etc/nginx/sites-enabled (cosas normales para nginx en Ubuntu/Debian). Por ejemplo, mi archivo del servidor principal bunkus.org 's configuración es /etc/nginx/sites-enabled y se ve así:

server { 
    listen 80 default_server; 
    listen [2a01:4f8:120:3105::101:1]:80 default_server; 

    include /etc/nginx/include.d/all-common; 
    include /etc/nginx/include.d/bunkus.org-common; 
    include /etc/nginx/include.d/bunkus.org-80; 
} 

server { 
    listen 443 default_server; 
    listen [2a01:4f8:120:3105::101:1]:443 default_server; 

    include /etc/nginx/include.d/all-common; 
    include /etc/nginx/include.d/ssl-common; 
    include /etc/nginx/include.d/bunkus.org-common; 
    include /etc/nginx/include.d/bunkus.org-443; 
} 

A modo de ejemplo aquí está el archivo /etc/nginx/include.d/all-common que se incluye tanto server contextos:

index index.html index.htm index.php .dirindex.php; 
try_files $uri $uri/ =404; 

location ~ /\.ht { 
    deny all; 
} 

location = /favicon.ico { 
    log_not_found off; 
    access_log off; 
} 

location ~ /(README|ChangeLog)$ { 
    types { } 
    default_type text/plain; 
} 
+1

buena idea. ¿Tengo que ajustar las directivas en otra, como hice lo que sugiere y nginx se queja cuando lo reinicio nginx: [emerg] directiva de "ubicación" no está permitido aquí – Thomas

+0

Estoy editando mi respuesta en lugar de este comentario :) –

+0

Bueno, eso es lo que probé y obtuve el error que mencioné. ¿Lo has probado y funcionó? – Thomas

Cuestiones relacionadas