Archive: Month 9, Year 2011

NGINX: Verstecke Dateien und Ordner nicht ausliefern

16.09.2011 yahe administration legacy linux security

Eine eigentlich typische Anforderung: Versteckte Dateien und Ordner, denen unter Linux ein Punkt (".") vorangestellt wird, sollen nicht über den Webserver abrufbar sein. Wie man das beim Apache löst, hatte ich vor einiger Zeit bereits gezeigt. Für den Wechsel zu NGINX musste ich dieses Feature nun natürlich auch umsetzen. Meine erste Konfiguration, dies zu lösen, sah wie folgt aus:

  location ~ ^(.*)\/\.(.*)$ {
    return 404;
  }

Hier wird geprüft, ob, im Dateinamen ein Slash gefolgt von einem Punkt enthalten ist. Oder anders ausgedrückt, ob irgendwo eine Datei oder ein Ordner im Dateinamen steckt, der mit einem Punkt beginnt. Spannenderweise hat diese Variante einen Haken: Sie funktioniert nicht für Dateien, die sich in einem versteckten Ordner befinden. Warum das so ist, weiß ich persönlich nicht, denn wenn man den gleichen regulären Ausdruck in einem Rewrite verwendet, funktioniert es, wie gewünscht:

  rewrite ^(.*)\/\.(.*)$ @404 break;

  location = @404 {
    return 404;
  }

Falls jemand eine Idee hat, warum "location" hier anders reagiert als "rewrite", wäre ich über einen Hinweis dankbar.


NGINX: Subdomains umschreiben

10.09.2011 yahe administration legacy linux windows

Derzeit bin ich dabei, einfach konfigurierbare Domains nach NGINX umzuziehen. Heute war eine Domain darunter, die 1:1 auf eine andere Domain verweist. Dazu gehören auch die entsprechenden Subdomains. Leider fehlen der Rewrite-Sprache von NGINX hier und da ein paar Fähigkeiten wie verschachtelten IF-Blöcke und logischen Verknüpfungen in IF-Abfragen, um so etwas elegant zu lösen. Aus diesem Grund bin ich nun zu folgender Lösung gekommen, um Domains mitsamt ihrer Subdomains umzuleiten:

server {
  listen      80;
  server_name .example.com;

  set $subdomain "www";
  if ($host ~* "^(.*)\.example\.com$") {
    set $subdomain $1;
  }
  rewrite ^(.*)$ $scheme://$subdomain.example.net$1 break;
}

Der Server-Name mit vorangestelltem Punkt sorgt dafür, dass der Server-Block sich um alle Example.com-Hosts inklusive sämtlicher Subdomains kümmert. Anschließend setzen wir eine Variable "$subdomain" auf den Default-Wert "www". Im Anschluss wird geprüft, ob der Domain eine Subdomain vorangestellt ist. Falls ja, wird die Variable $subdomain auf den Namen dieser Subdomain gesetzt. Abschließend wird ein Redirect durchgeführt und der gespeicherte Subdomain-Wert dabei mit berücksichtigt.


Search

Links

RSS feed

Categories

administration (40)
arduino (12)
calcpw (2)
code (33)
hardware (16)
java (2)
legacy (113)
linux (27)
publicity (6)
review (2)
security (58)
thoughts (21)
windows (17)
wordpress (19)