GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Stellen Sie nginx.conf so ein, dass alle Verbindungen außer zu bestimmten Dateien oder Verzeichnissen verweigert werden

Der einfachste Weg wäre, zunächst den gesamten Zugriff zu verweigern und dann nur den gewünschten Verzeichnissen Zugriff zu gewähren. Wie ring0 betonte, können Sie das Standard-Flag (default_server in 0.8) in der Listen-Direktive verwenden. Wenn Sie jedoch bereits einen Server haben, den Sie als Standard für unbekannten benannten Zugriff auf Ihren Host verwenden möchten, können Sie auch einfach Anfragen ohne Host-Header oder mit der IP-Adresse Ihres Servers mit so etwas abfangen (ersetzen Sie 1.2.3.4 durch Ihre Server-IP:

upstream _php {
  server unix:/var/run/php-fpm/php-fpm.sock;
}

server {
  server_name "" 1.2.3.4;

  root /path/to/root;
  index index.php;

  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

  # deny everything that doesn't match another location
  location / { deny all; }

  # allow loading /index.php
  location = / { } # need to allow GET / to internally redirect to /index.php
  location = /index.php { fastcgi_pass _php; }

  # allow access to phpmyadmin
  location /phpmyadmin/ { } # Allow access to static files in /phpmyadmin/
  location ~ ^/phpmyadmin/.*\.php$ { fastcgi_pass _php; } # phpmyadmin php files
}

die fastcgi_params werden von beiden Orten geerbt, die fastcgi_pass, und nur /index.php und /phpmyadmin/ sind erlaubt. Ich habe auch einen Upstream-Block für PHP hinzugefügt, was es einfacher macht, falls Sie jemals etwas hinzufügen oder in Zukunft ändern müssen.


Kreative Nutzung der in Regex negierten Location- und Deny-Regeln, etwa so:

    location / {
        root   html;
        index  index.html index.htm index.php;
    }

    location ~* !^/(index.(php|html|htm)$)|(phpmyadmin/) {
        deny all;
    }

    location ~ \.php$ {
        root           html;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /srv/http/nginx/$fastcgi_script_name;
        include        fastcgi_params;
    }

Das ist ungetestet, aber Sie verstehen schon.

http://wiki.nginx.org/HttpAccessModule

http://wiki.nginx.org/HttpCoreModule#location

Auch dies kann Ihnen beim Schreiben helfen:

http://www.regextester.com/


Linux
  1. So finden Sie eine Datei in Linux rekursiv in allen Verzeichnissen

  2. Wie man Dateien tariert (komprimiert), bestimmte Dateien oder Verzeichnisse ausschließt

  3. Alle Dateien in einem Ordner außer den letzten (neuesten) 20 löschen?

  4. Verwenden von Umgebungsvariablen in Tmux.conf-Dateien?

  5. Alle Dateien in einem Verzeichnis rekursiv auflisten, einschließlich Dateien in Symlink-Verzeichnissen

So führen Sie eine Grep-Suche für alle Dateien und in allen Verzeichnissen durch

Löschen Sie alle Dateien außer den neuesten 3 im Bash-Skript

Wie setze ich nginx max offene Dateien?

Alle eingehenden Verbindungen mit iptables ablehnen?

Wie kann ich alle eindeutigen Dateien in zwei Verzeichnissen finden / auflisten?

Finden Sie Verzeichnisse, die eine bestimmte Anzahl von Dateien enthalten