Skip to main content

Настройка HTTP-аутентификации в Nginx

Чтобы настроить веб-аутентификацию в Nginx нужно сделать всего пару вещей:

  • Установить пакет apache2-utils

 В Ubuntu это делается довольно просто:

apt-get install apache2-utils -y
  • Создать файл с пользователями и паролями
# С указанием имени пользователя:
htpasswd -c /etc/nginx/.htpasswd username
# Или использовать имя пользователя, из-под которого вы работаете:
htpasswd -c /etc/nginx/.htpasswd

Для безопасности, лучше сразу установить права и владельца для этого файла:

sudo chmod 640 /etc/nginx/.htpasswd
sudo chown root:www-data /etc/nginx/.htpasswd
  • Настроить Nginx
server {
    # ...
    location / {
        # Сама аутентификация: заголовок запроса пароля и файл с доступным УЗ
        auth_basic "Restricted Area";
        auth_basic_user_file /etc/nginx/.htpasswd;
        # А дальше - произвольная конфигурация location
    }
    # ...
}

Обратите внимание: аутентификация работает только на конкретный location (и все, что за ним), а не на весь возможный пул 

После всех манипуляций, нужно перезапустить Nginx:

nginx -t && nginx -s reload

При переходе на эндпоинт /protected (и все, что находится за ним), вам будет предложено ввести логин и пароль, который вы сгенерировали ранее

Опционально, вы можете отключить аутентификацию для каких-то вложенных путей:

# ...
# Здесь есть аутентификация
location / {
    auth_basic "Restricted Area";
    auth_basic_user_file /etc/nginx/.htpasswd;
    # ...
}

# А эта часть - без аутентификации
location /public-page {
    auth_basic off;
    # ...
}
# ...