Nginx. Ограничение доступа к директориям

В этой статье я приведу примеры ограничения доступа к файлам или директориям по IP адресу или логину и паролю.

Полностью запретить доступ к конкретной директории можно так:

1
2
3
location ^~ /folder1/ {
        deny all;
    }

Несколько директорий можно указать так:

1
2
3
location ~* ^/(folder1|folder2)($|\/) {
        deny all;
    }

Или так:

1
2
3
4
5
6
7
location ^~ /folder1/ {
        deny all;
    }
 
location ^~ /folder2/ {
        deny all;
    }

Приведу пример как разрешить доступ конкретным IP адресам или сетям:

1
2
3
4
5
6
location ^~ /folder1/ {
        allow 192.168.0.0/24;
        allow 192.168.5.5;
        allow 192.168.5.8/32;
        deny all;
    }

Ограничить доступ по логину и паролю можно так:

1
2
3
4
location ^~ /folder1/ {
        auth_basic "Hello, please login";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }

Генерируем пароль командой ниже (или например тут https://hostingcanada.org/htpasswd-generator):

1
openssl passwd

Допустим логин «admin», а пароль «ixnfo», после ввода команды выше, в зашифрованном виде пароль выглядит так — q7h194Y1SBgxo, теперь добавим его в файл .htpasswd:

1
admin:q7h194Y1SBgxo

Чтобы применить изменения в конфигурации, допустим если операционная система Ubuntu, необходимо выполнить команду:

1
service nginx reload

Или просто перезагрузим nginx:

1
service nginx restart

Перед применением конфигурации желательно ее проверить (так как в случае ошибок nginx не запустится):

1
nginx -t

Можно ограничивать доступ одновременно по IP адресам и по логину/паролю:

1
2
3
4
5
6
location ^~ /folder1/ {
        allow 192.168.0.100;
        deny all;
        auth_basic "Hello, please login";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }

Пример ограничения по логину/паролю для директории с php файлами:

1
2
3
4
5
6
7
8
9
10
11
12
location ^~ /folder1 {
 
 location ~ \.php$ {
              try_files $uri =404;
              fastcgi_pass unix:/var/run/php5-fpm.sock;
              include fastcgi_params;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
 
   auth_basic "Hello, please login";
   auth_basic_user_file /var/www/.htpasswd;
 }

Чтобы ограничить доступ например только для файлов php в директории «folder1»:

1
2
3
4
location ~* ^/folder1/.+\.php {
        allow 192.168.0.100;
        deny all;
    }

Смотрите также мою статью:
Как настроить доступ по IP в nginx

Оставьте комментарий

Добавить комментарий