====== Ограничение доступа средствами 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
  
====== Генерация файла пароля ======

==== PHP ====

  php -r 'echo "user_name:" . crypt("your_password", "salt") . ": Comment here";' > ./httpd_passwd

==== Python ====

  python -c 'import crypt; print "user_name:" + crypt.crypt("your_password", "salt")' > ./httpd_passwd

==== Perl =====

  perl -le 'print "user_name:" . crypt("password", "salt")' > ./httpd_passwd
