Defina nginx.conf para negar todas as conexões, exceto para determinados arquivos ou diretórios

3

Estou tentando configurar o Nginx para que todas as conexões com o meu IP numérico sejam negadas, com a exceção de alguns diretórios e arquivos arbitrários. Então, se alguém for ao meu IP, eles têm permissão para acessar o arquivo index.php e o diretório phpmyadmin, por exemplo, mas se tentarem acessar outros diretórios, eles serão negados.

Este é o meu bloco de servidor de nginx.conf :

server {
        listen       80;
        server_name  localhost;

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

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

Como eu devo proceder? Muito obrigado!

    
por Ben 15.01.2011 / 16:49

4 respostas

6

O caminho mais fácil seria começar negando todo o acesso e, em seguida, concedendo apenas acesso aos diretórios desejados. Como ring0 apontou, você pode usar o sinalizador default (default_server in 0.8) na diretiva listen. No entanto, se você já tiver um servidor que deseja usar como padrão para acesso com nome desconhecido ao seu host, também poderá capturar apenas solicitações sem um cabeçalho de host ou com o endereço IP do servidor com algo assim (substituindo 1.2.3.4 ip do servidor:

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
}

os fastcgi_params serão herdados pelos dois locais que fastcgi_pass, e somente /index.php e / phpmyadmin / são permitidos. Eu também adicionei um bloco upstream para php, o que torna mais fácil se você precisar adicioná-lo ou alterá-lo no futuro.

    
por 15.01.2011 / 23:42
2

Uso criativo das regras de localização e negação negadas na regex, algo como:

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

Isso não foi testado, mas você entendeu.

link

link

Além disso, isso pode ajudar você a escrever:

link

    
por 15.01.2011 / 17:28
1

É mais fácil declarar servidores que são chamados com um nome de domínio e declarar um servidor padrão que incluirá os acessos IP diretos.

Por exemplo, sua configuração de domínio pode ser usada para, digamos, mydomain.com

server {
        listen       80;
        server_name  mydomain.com *.mydomain.com;
        root /var/www/html/mydomain.com
        ...

Tendo seus arquivos regulares no diretório /var/www/html/mydomain.com .

E a entrada padrão só permitiria o acesso a alguns arquivos específicos em um local diferente.
Observe a palavra-chave padrão após o listen 80 .

server {
        listen       80 default;
        server_name  _ *;
        root /var/www/html/restricted
        ...

E você coloca os arquivos padrão em /var/www/html/restricted , que serão servidos para localhost e endereços IP brutos.

    
por 15.01.2011 / 17:27
0

Você pode definir diretamente todo o caminho para o index.php e definir apenas neste arquivo fastcgi php7 para nginx

    //redirect all to index.php
    location / {
        autoindex off;
        set $redirect_url $uri;
        try_files $uri $uri/ /index.php$is_args$query_string;
    }

    location = /index.php {
        include fastcgi.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;

        //Extra Params script PHP
        fastcgi_param PATH_INFO $redirect_url;
        fastcgi_param HTTP_HOST $server_name;
    }
    
por 06.04.2018 / 07:13