Это старая версия документа!
Ограничение доступа средствами Nginx
Небольшая заметка о том, как средствами Nginx-а закрыть доступ к файлам/папке по паролю. В nginx-е это решение не менее элегантно, чем в apache, а может и еще лучше, кому как нравится.
В конфигурационном файле, в папке, которую хотим закрыть надо только указать файл, где хранятся пароли. Вот два примера для закрытия папки с файлами:
location ^~ /files/ {
root /path/to/server;
autoindex on;
autoindex_exact_size off;
auth_basic "Hello, please login";
auth_basic_user_file /usr/nginx/passwords;
access_log /usr/nginx/logs/files.log download;
}
и админовской части c дополнительным ограничением по IP:
location ^~ /admin/ {
fastcgi_pass unix:/home/project/server.sock;
include conf/fastcgi.conf;
allow 11.11.0.0/16;
allow 22.22.22.22;
deny all;
auth_basic "Hello, Admin, please login";
auth_basic_user_file /usr/nginx/adminpassword;
access_log /usr/nginx/logs/admin.log main;
}
Добавить пользователя можно с помощью стандартной утилиты от apache:
htpasswd -b passwords NewUser NewPassword
- -c необходим только для создания нового файла
- -b
В файле запись с зашифрованным паролем имеет вид:
NewUser:P47ghZ4kloG78: Your Can Comment Here
Файл пароля
/usr/nginx/adminpassword
NewUser:P47ghZ4kloG78
php -r 'echo "user_name:" . crypt("your_password", "salt");' > ./httpd_passwd
python -c 'import crypt; print "user_name:" + crypt.crypt("your_password", "salt")' > ./httpd_passwd
perl -le 'print "user_name:" . crypt("password", "salt")' > ./httpd_passwd
Генерация хеша пароля
Apache
htpasswd -nd seriy New password: Re-type new password: seriy:4lQ0JcanrGr9E
php
php -r 'echo crypt("your_password", "salt");'
python
python -c 'import crypt; print crypt.crypt("your_password", "salt")'
perl
perl -le 'print crypt("password", "salt")'