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

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

- **Установить пакет <span style="color: rgb(45, 194, 107);">apache2-utils</span>**

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

```bash
apt-get install apache2-utils -y
```

- **Создать файл с пользователями и паролями**

```bash
# С указанием имени пользователя:
htpasswd -c /etc/nginx/.htpasswd username
```

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

```bash
sudo chmod 640 /etc/nginx/.htpasswd
sudo chown root:www-data /etc/nginx/.htpasswd
```

- **Настроить Nginx**

```python
server {
    # ...
    location /protected  {
        # Сама аутентификация: заголовок запроса пароля и файл с доступным УЗ
        auth_basic "Restricted Area";
        auth_basic_user_file /etc/nginx/.htpasswd;
        # А дальше - произвольная конфигурация location
    }
    # ...
}
```

**Обратите внимание:** аутентификация работает <span style="text-decoration: underline;">только на конкретный location</span> (и все, что за ним), а не на весь возможный пул

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

```bash
nginx -t && nginx -s reload
```

При переходе на эндпоинт <span style="color: rgb(45, 194, 107);">/protected</span> (и все, что находится за ним), вам будет предложено ввести логин и пароль, который вы сгенерировали ранее

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

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

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

<span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);">**<span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span></span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span></span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span></span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span></span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span></span></span>ВАЖНО!<span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span></span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span></span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span></span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span></span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span><span style="color: rgb(255, 255, 255); background-color: rgb(186, 55, 42);"> </span></span>** </span>

**HTTPS обязателен для Basic Auth**, так как логин/пароль передаются в Base64. Любой, кто перехватит запрос, получит логин и пароль в открытом виде