GNU/Linux >> Znalost Linux >  >> Linux

Nastavte nginx.conf tak, aby odmítal všechna připojení kromě určitých souborů nebo adresářů

Nejjednodušší cestou by bylo začít odepřením veškerého přístupu a poté udělit přístup pouze k těm adresářům, které chcete. Jak poukázal ring0, můžete použít výchozí příznak (default_server v 0.8) v direktivě listen. Pokud však již máte server, který chcete použít jako výchozí pro neznámý pojmenovaný přístup k vašemu hostiteli, můžete také jednoduše zachytit požadavky bez hlavičky hostitele nebo s ip adresou vašeho serveru něčím takovým (nahrazení 1.2.3.4 vaším IP serveru:

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
}

parametry fastcgi_params zdědí obě umístění, která fastcgi_pass, a pouze /index.php a /phpmyadmin/ jsou povoleny. Přidal jsem také upstream blok pro php, který usnadňuje, pokud jej budete někdy v budoucnu potřebovat přidat nebo změnit.


Kreativní využití místa a pravidla odepření negovaná v regulárním výrazu, něco jako:

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

To je nevyzkoušeno, ale chápete to.

http://wiki.nginx.org/HttpAccessModule

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

Také vám to může pomoci napsat:

http://www.regextester.com/


Linux
  1. Jak najít soubor v Linuxu ve všech adresářích rekurzivně

  2. Smazat všechny soubory kromě určitého podadresáře pomocí funkce Najít?

  3. Smazat všechny soubory ve složce kromě posledních (nejnovějších) 20?

  1. Používání proměnných prostředí v souborech Tmux.conf?

  2. Použijte Najít k nalezení určitého adresáře a odstranění všech souborů v něm kromě jednoho adresáře?

  3. Jak rekurzivně vypsat všechny soubory a adresáře

  1. Přesuňte všechny soubory kromě jednoho

  2. Příkaz pro výpis všech souborů kromě . (tečka) a .. (tečka tečka)

  3. Najděte adresáře obsahující určitý počet souborů