2013-03-29 17 views
9

Lassen Sie uns sagen, ich habe eine nginx-Konfiguration für eine Domain wie folgt aufgebaut:Reuse Konfigurationsanweisungen für Domains 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; 
    } 

} 

Nun, wenn ich eine andere Domain mit unterschiedlichem Inhalt hinzufügen möchten, gibt es eine So kann ich äquivalente Anweisungen aus der vorherigen Domäne wiederverwenden oder muss ich für jede neue Domäne, die ich unterstützen möchte, alles duplizieren?

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; 
    } 

} 

Ich versuchte, die location Richtlinie außerhalb des server Schließung bewegt, aber offensichtlich wie die Dinge funktionieren nicht, weil ich einen Fehler „Standort-Richtlinie hier ist nicht erlaubt“ bekam, als nginx neu zu starten.

Antwort

8

können Sie tun:

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

wenn beide exacctly identisch sind mit Ausnahme der domänen

wenn Sie nur ähnlich locationblocks haben, können Sie diese Orte zu einer sepperaten Datei verschieben und führen Sie dann eine

include /etc/nginx/your-filename; 

zur einfachen Verwendung in jedem Serverblock

16

Dies ist ein gutes Beispiel für die Verwendung des nginx Map-Moduls. http://wiki.nginx.org/HttpMapModule

Folgendes ist, was ich ausprobiert habe. Es funktioniert in meiner Devoxbox. Hinweis

  1. map Direktive kann nur in den HTTP-Block eingefügt werden.
  2. Leistungseinbuße Karte Richtlinie zu erklären ist vernachlässigbar (Link oben sehen)
  3. Sie Freiheit unterschiedliche Stammordner haben kann, oder die Portnummer haben, usw.

    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; 
        } 
    }