В этой статье я приведу примеры ограничения доступа к файлам или директориям по 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