Nginx-Subdomain neu schreiben

8

Noch eine Nginx-Frage zum Umschreiben von Regeln

Wie kann ich ein Umschreiben von http://www.*.domain.comzu http://*.domain.com?

Danke im Voraus

- Deb

BEARBEITEN:

Es tut mir leid, dass ich nicht gesehen habe, dass die Textilformatierung das * aus meiner Frage entfernt hat. Ich habe es jetzt behoben. Was ich tun muss, ist von www.joe.domain.com zu joe.domain.com zu gehen, wo Joe ein beliebiges Wort sein kann.

deb
quelle

Antworten:

7

Welche Bedeutung hat der zusätzliche Zeitraum vor domain.com? Ist das Ziel, das WWW aus der URL zu entfernen? Wenn ja, sollte dies den Trick tun:

if ($host ~* www\.(.*)) {
  set $host_without_www $1;
  rewrite ^(.*)$ http://$host_without_www$1 permanent; # $1 contains '/foo', not 'www.mydomain.com/foo'
}

Vergiss nicht: es sudo /etc/init.d/nginx restartzu laden

Quelle: NGINX Wiki

iainlbc
quelle
Es tut mir leid, dass ich nicht gesehen habe, dass die Textilformatierung das * aus meiner Frage entfernt hat. Was ich tun muss, ist von www.joe.domain.com zu joe.domain.com zu gehen, wo Joe ein beliebiges Wort sein kann. Damit Sie Recht haben, muss ich nur das WWW entfernen.
Deb
12

Das ist ein ziemlicher Hack.

Der schnellste Weg in Bezug auf die Leistung wäre

server {
  server_name www.domain.com;
  rewrite ^ http://domain.com$request_uri permanent;
}

Sie speichern eine Regex-Übereinstimmung sowie zwei Captures und erhalten den Vorteil, dass Nginx mithilfe von Hash-Tabellen den passenden Serverblock nachschlägt.

Außerdem müssen Sie nginx nicht neu starten - ein erneutes Laden ist alles, was erforderlich ist, und wer möchte mehr Ausfallzeiten als erforderlich haben?

Martin Fjordvald
quelle
+1 macht Sinn ...
Prost
1
Dies ist kein Hack. Nginx sucht sehr schnell nach Servernamen, daher ist dies der schnellste Ansatz.
Alexander Azarov
1
@Alaz Das war eine Antwort auf die Antwort von iainlbc. Ich meinte, dass die if-Bedingung ein Hack war und nicht die von mir empfohlene Server-Suche.
Martin Fjordvald
1

Die Lösung von Martin F ist gut und schön, bis Sie Hunderte von Domains haben. Ich würde jedoch vorschlagen, in die andere Richtung zu gehen - die App unter www.joe.domain.com bereitzustellen und von joe.domain.com weiterzuleiten. Ziemlich sicher, dass das in einem RFC ist.

Justin Alan Ryan
quelle
Wenn Nginx so viele Domänen verarbeitet, schreiben Sie ein Skript, um die Konfiguration zu generieren. Es ist eine ziemlich einfache Konfigurationssprache, und Sie möchten wirklich nicht bei jedem Laden einer Seite auf einem Server mit hohem Datenverkehr Regex-Parsing durchführen.
Martin Fjordvald
Im Prinzip vielleicht, aber haben Sie es profiliert? Ich hatte einige Websites mit sehr hoher Auslastung, die Regex für alle Anfragen verwendeten. Es kümmert sich. Viele Shared Hosting-Umgebungen haben keine ernsthaften Leistungsprobleme, aber Bedenken hinsichtlich des Verwaltungsaufwands. Beide Lösungen könnten innerhalb verschiedener Parameter gut funktionieren.
Justin Alan Ryan
Wenn Sie Hunderte von Domains haben, verwenden Sie Regexp in Servername: stackoverflow.com/questions/2498712/nginx-subdomain-rewrite
Alexander Azarov