2013-03-29 12 views
9

Diciamo che ho una configurazione di nginx impostato per un dominio come questo:dichiarazioni di configurazione riutilizzo per i domini in nginx.conf

server { 

    root /path/to/one; 
    server_name one.example.org; 

    location ~ \.php$ { 
    try_files  $uri =404; 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include   fastcgi_params; 
    } 

} 

Ora, se voglio aggiungere un altro dominio con contenuti diversi, c'è un modo in cui posso riutilizzare le dichiarazioni equivalenti dal dominio precedente, o devo duplicare tutto per ogni nuovo dominio che voglio supportare?

server { 

    root /path/to/two; # different 
    server_name two.example.org; # different 

    location ~ \.php$ { 
    try_files  $uri =404; 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include   fastcgi_params; 
    } 

} 

ho provato a spostare la direttiva location esterno la chiusura server, ma ovviamente le cose non funzionano così perché ho ottenuto un errore "direttiva posizione non è permesso qui" al riavvio nginx.

risposta

8

si può fare:

server_name one.example.org two.example.org; 

se entrambi sono exacctly identiche tranne che per il nome di dominio

se avete locationblocks basta simili è possibile spostare quei luoghi in un file sepperate e poi fare un

include /etc/nginx/your-filename; 

per utilizzarlo facilmente in ogni serverblock

16

Questo è un buon esempio per usare il modulo Nginx Map. http://wiki.nginx.org/HttpMapModule

In seguito è quello che ho provato. Funziona nel mio devbox. Nota

  1. direttiva di mappa può essere inserito solo nel blocco http.
  2. penalizzazione delle prestazioni di dichiarare una direttiva mappa è trascurabile (vedi link sopra)
  3. si può avere la libertà di avere cartella radice, o il numero di porta, ecc

    map $subdomain $root_folder { 
        one /path/to/one; 
        two /path/to/two; 
    } 
    
    map $subdomain $port_number { 
        one 9000; 
        two 9100; 
    } 
    
    server { 
        listen 80; 
        server_name ~^(?P<subdomain>.+?)\.mydomain\.com$; 
        root $root_folder; 
    
        location ~ \.php$ { 
        try_files  $uri =404; 
        fastcgi_pass 127.0.0.1:$port_number; 
        fastcgi_index index.php; 
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
        include   fastcgi_params; 
        } 
    } 
    
Problemi correlati