it-swarm.com.de

nginx-Subdomain-Konfiguration

Ich habe Nginx als Reverse Proxy für Apache. Ich muss jetzt eine neue Subdomain .__ hinzufügen, die Dateien aus einem anderen Verzeichnis bereitstellt, aber gleichzeitig möchte ich, dass alle Standort- und Proxy_pass-Direktiven, die ich für den Standardhost habe, auch auf die Subdomain angewendet werden.

Ich weiß, dass es funktionieren wird, wenn ich die Regeln vom Standardhost in die neue Unterdomäne kopiere, aber gibt es eine Möglichkeit, wie die Unterdomäne die Regeln erben kann? Nachfolgend finden Sie eine Beispielkonfiguration

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

Vielen Dank

73
Thomas

Sie können die allgemeinen Teile aus beiden Serverkontexten in eine andere Konfigurationsdatei und include verschieben. Das sollte funktionieren:

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

Bearbeiten: Hier ist ein Beispiel, das tatsächlich von meinem laufenden Server kopiert wurde. Ich konfiguriere meine grundlegenden Servereinstellungen in /etc/nginx/sites-enabled (normales Material für Nginx unter Ubuntu/Debian). Zum Beispiel ist die Konfigurationsdatei meines Hauptservers bunkus.org/etc/nginx/sites-enabled und sieht folgendermaßen aus:

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

Als Beispiel ist hier die /etc/nginx/include.d/all-common-Datei, die aus beiden server-Kontexten enthalten ist:

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;
}
85
Moritz Bunkus

Eine andere Art der Lösung wäre, autogenerate die Nginx-Conf-Dateien über Jinja2-Templates von Ansible . Der Vorteil ist die einfache Bereitstellung in einer Cloud-Umgebung und die einfache Replizierung auf mehreren Entwicklungscomputern

0
Jonathan