Закрываем Basic авторизацией страницы в standalone nginx

Когда nginx является фронтэндом для другого веб сервера (например apache), то закрывать странички авторизацией довольно просто - этим будет заниматься бэкэнд веб сервер. Однако можно эту функцию возложить и на сам nginx. Особенно это нужно, когда nginx работает без бэкэнда.
Суть закрытия нужного нам локейшна проста. Мы добавляем две строки конфигурации - вызов авторизации и путь до файла паролей. На данный момент Basic авторизация включена в nginx по умолчанию, дополнительных модулей собирать не нужно.

Допустим нам нужно закрыть страничку какой нибудь админки (mydomain.ru/adminka) дополнительной авторизацией. Для этого выделяем страничку админки в отдельный локейшн и прописываем правила для авторизации:

location /adminka {
auth_basic "Restricted";
auth_basic_user_file passwordfile;
root /usr/local/www/adminka;
}

Сам файл паролей passwordfile в моем случае должен лежать в каталоге конфигурации nginx, так как я не указываю путь до файла а только его название. Путь по умолчанию равен пути до конфигурации nginx. Впрочем можно указать произвольное месторасположение этого файла.
Теперь что касается генерации самого файла. Имея apache бэкэндом можно было пользоваться поставляемой к нему утилитой htpasswd, однако в случае standalone nginx этой утилиты у нас нет, но в принципе она нам и не нужна. Можно воспользоваться простым perl-скриптом, использующим функцию crypt.

Листинг скрипта:
#!/usr/bin/perl
use strict;

chomp(my $filename=$ARGV[0]);
chomp(my $username=$ARGV[1]);
chomp(my $password=$ARGV[2]);

if (!$filename || !$username || !$password) {
print "USAGE: ./crypt.pl filename username password\n\n";
} else {
open my $fh, ">>", $filename or die $!;
print $fh $username . ":" . crypt($password, $username) . "\n";
close $fh or die $!;
}

Теперь можно скрипту передать параметры в следующем виде:
crypt_script.pl passwordfile user password

После этого будет создан файл passwordfile содержащий имя пользователя и зашифрованный MD5 пароль, указанный в строке. Копируем файл в указанное в конфигурации nginx место, откуда он будет обращаться к этому файлу, и все. Простая авторизация готова.

Поделиться

Опубликовать в Facebook
Опубликовать в LiveJournal

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>