GNU/Linux >> Tutoriels Linux >  >> Linux

Définissez nginx.conf pour refuser toutes les connexions sauf à certains fichiers ou répertoires

Le chemin le plus simple serait de commencer par refuser tous les accès, puis de n'accorder l'accès qu'aux répertoires souhaités. Comme ring0 l'a souligné, vous pouvez utiliser le drapeau par défaut (default_server en 0.8) sur la directive listen. Cependant, si vous avez déjà un serveur que vous souhaitez utiliser par défaut pour un accès nommé inconnu à votre hôte, vous pouvez également simplement intercepter les requêtes sans en-tête d'hôte ou avec l'adresse IP de votre serveur avec quelque chose comme ceci (en remplaçant 1.2.3.4 par votre IP du serveur :

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
}

les fastcgi_params seront hérités par les deux emplacements qui fastcgi_pass, et seuls /index.php et /phpmyadmin/ sont autorisés. J'ai également ajouté un bloc en amont pour php, ce qui facilite la tâche si jamais vous deviez l'ajouter ou le modifier à l'avenir.


Utilisation créative de l'emplacement et des règles de refus annulées dans regex, quelque chose comme :

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

Cela n'a pas été testé, mais vous voyez l'idée.

http://wiki.nginx.org/HttpAccessModule

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

De plus, cela peut vous aider à l'écrire :

http://www.regextester.com/


Linux
  1. Répertorier de manière récursive tous les fichiers d'un répertoire, y compris les fichiers des répertoires de liens symboliques

  2. Commande pour lister tous les fichiers sauf . (point) et .. (point point)

  3. Supprimez tous les fichiers sauf les 3 plus récents dans le script bash

  4. Comment définir les fichiers ouverts nginx max ?

  5. Comment trouver/lister tous les fichiers uniques dans deux répertoires ?

Comment effectuer une recherche Grep sur tous les fichiers et dans tous les répertoires

Comment lister récursivement tous les fichiers et répertoires

Déplacer tous les fichiers sauf un

Faites correspondre tous les fichiers sous tous les répertoires imbriqués avec shell globbing

Refuser toutes les connexions entrantes avec iptables ?

Trouver des répertoires contenant un certain nombre de fichiers