Nginx авторизация http: HTTP авторизация Nginx
HTTP авторизация Nginx
Иногда возникает необходимость ограничить доступ к сайту или определенному его разделу на уровне HTTP. Для веб-сервера Apache доступ ограничивается через файл .htaccess, который размещается в корне сайта или раздела. http авторизация Nginx задается только непосредственно в конфигурационном файле.
Ограничение может быть необходимо для административной части сайта или служебным ресурсам, к которым нужен веб-доступ — например, таким как мониторинг.
Чтобы описанные ниже действия принесли результат на сервере должен быть установлен и использоваться в качестве веб-сервера Nginx.
Создаем файл указывая путь к нему и имя пользователя вместо USERNAME
htpasswd -c /etc/nginx/htpasswd.users USERNAME
После выполнения команды возникнет диалог с запросом пароля. После его ввода пароль будет зашифрован и более недоступен в виде открытого текста.
Теперь осталосу указать в конфиге веб-сервера, что нужно использовать созданный только что файл для определенного виртуального хоста — пусть это будет хост, существующий по умолчанию. В качестве имени сайта укажем example.com
 В качестве имени сайта укажем example.com
mcedit /etc/nginx/sites-available/default
server {
 listen 80;
 server_name example.com;
 auth_basic «Restricted Access»;
 auth_basic_user_file /etc/nginx/htpasswd.users;
 location / {
 ..}
 }
Проверяем конфигурацию Nginx
nginx -t
Даем команду на перечитывание конфигурационных файлов
nginx -s reload
На этом настройка HTTP авторизации средствами Nginx завершена. Сейчас при обращении к сайту будет открываться диалог, запрашивающий имя пользователя и пароль.
Любая попытка авторизоваться с неверными реквизитами или без них будет заканчиваться ошибкой 400.
Ограничение доступа с помощью HTTP basic authentication
Иногда возникает потребность ограничить доступ к определенному сайту-проекту, например, на время разработки или к сайту, который должен быть доступен только для определенного круга лиц. При этом не всегда удобно добавлять модуль авторизации в сам проект.
На простом примере будет показана настройка доступа для веб-серверов Nginx и Apache.
Создание файла с ключами
Для создания пар пользователь-пароль воспользуемся утилитой htpasswd. Установить её можно следующей командой:
 $ apt install apache2-utils
Создадим файл с ключами .htpasswd и добавим первого пользователя. Для этого запустим утилиту htpasswd с флагом -c и путем к файлу, где будут храниться ключи, а также именем первого пользователя.
 Рекомендуется разместить этот файл в рабочей директории  вашего веб-сервера /etc/nginx или /etc/apache2.
 $ htpasswd -c /etc/nginx/.htpasswd user1
Во время выполнения команды вам будет предложено дважды ввести пароль пользователя user1.
Если файл с ключами уже создан и вы добавляете уже не первого пользователя, то не нужно больше передавать ключ -c. Создадим второго пользователя.
 $ htpasswd /etc/nginx/.htpasswd user2
Когда все пользователи будут созданы, можно проверить, что находится в файле с ключами
 $ cat /etc/nginx/.htpasswd 
На каждой строчке есть имя пользователя и его зашифрованный пароль
 user1:$apr1$cuyHIt1g$KBw/cVxx/0AwGg8Xab6yd/
 user2:$apr1$FmoTpfYo$VTOJN10R98RRie7r7t46w1
 Далее необходимо настроить веб-сервер Nginx или Apache, в зависимости от того, какой из них вы используете.
Настройка Nginx
Добавьте следующие директивы в конфигурационный файл вашего проекта.
- auth_basic — включение проверки авторизации
- auth_basic_user_file — путь к файлу с ключами
Их можно использовать в контекстах: http, server, location, limit_except. Это значит, что можно, например, ограничить доступ ко всему серверу (файл /etc/nginx/nginx.conf):
 http {
 ...
 auth_basic "Restricted Area";
 auth_basic_user_file /etc/nginx/.htpasswd;
 ...
 }
к определенному проекту:
 server {
 ...
 auth_basic "Restricted Area";
 auth_basic_user_file /etc/nginx/.htpasswd;
 ...
 }
или к конкретному адресу в проекте:
 server {
 ...
 location / {
 auth_basic "Restricted Area";
 auth_basic_user_file /etc/nginx/. htpasswd;
 htpasswd;
 ...
 }
 }
Настройка Apache
Документация по модулю mod_authn_core доступна на официальном сайте.
- AuthType — тип авторизации пользователя
- AuthName — название защищенной области
- AuthUserFile — путь к файлу с ключами
- Require — проверка доступа
Можно настроить обязательную проверку авторизации для всего сервера. Для этого в конфигурационном файле /etc/apache2/apache2.conf добавим в соответствующие теги Directory требование.
 <Directory /var/www/>
 Options Indexes FollowSymLinks
 AllowOverride None
 # Require all granted
 AuthType Basic
 AuthName "Restricted Content"
 AuthUserFile /etc/apache2/.htpasswd
 Require valid-user
 </Directory>
Если необходимо настроить доступ только к определенному хосту, то редактируем его конфигурационный файл
 <VirtualHost *:80>
 DocumentRoot /var/www/html
 . ..
 ..
 <Directory "/var/www/html">
 AuthType Basic
 AuthName "Restricted Area"
 AuthUserFile /etc/apache2/.htpasswd
 Require valid-user
 </Directory>
 </VirtualHost>
Файл .htaccess
Вместо редактирования настроек хоста можно добавить параметры авторизации в файл .htaccess в самом проекте.
 ...
 AuthType Basic
 AuthName "Restricted Content"
 AuthUserFile /etc/apache2/.htpasswd
 Require valid-user
 ...
Чтобы Apache мог применять настройки файлов .htaccess в проектах, необходимо установить для AllowOverride значение «All» в соответствующей директории в настройках сервера.
 <Directory /var/www/>
 Options Indexes FollowSymLinks
 # AllowOverride None
 AllowOverride All
 Require all granted
 </Directory>
 О том, как работать с файлом . htaccess можно прочитать в этой статье.
 htaccess можно прочитать в этой статье.
Результат
После перезагрузки сервера можно открыть страницу проекта и увидеть окно с просьбой авторизоваться.
Ссылки
Документация по модулю ngx_http_auth_basic_module для Nginx.
Документация по модулю mod_authn_core для Apache.
Модуль ngx_http_auth_request_module
Модуль ngx_http_auth_request_module
 Модуль ngx_http_auth_request_module (1.5.4+) предоставляет
 возможность авторизации клиента, основанной на результате подзапроса.
 Если подзапрос возвращает код ответа 2xx, доступ разрешается.
 Если 401 или 403 — доступ запрещается с соответствующим кодом ошибки.
 Любой другой код ответа, возвращаемый подзапросом, считается ошибкой.
 При ошибке 401 клиенту также передаётся заголовок
 “WWW-Authenticate” из ответа подзапроса.
 По умолчанию этот модуль не собирается, его сборку необходимо
 разрешить с помощью конфигурационного параметра
 --with-http_auth_request_module.
 Модуль может быть
 скомбинирован с другими модулями доступа, такими как
 ngx_http_access_module,
 ngx_http_auth_basic_module
 и
 ngx_http_auth_jwt_module,
 с помощью директивы satisfy.
До версии 1.7.3 ответы на авторизационные подзапросы не могли быть закэшированы
(с использованием директив
proxy_cache,
proxy_store и т.п.).
Пример конфигурации
location /private/ {
    auth_request /auth;
    ...
}
location = /auth {
    proxy_pass ...
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Original-URI $request_uri;
}
Директивы
| Синтаксис: | auth_request  | 
|---|---|
| Умолчание: | auth_request off; | 
| Контекст: | http,server,location | 
 Включает авторизацию, основанную на результате выполнения подзапроса,
 и задаёт URI, на который будет отправлен подзапрос.
| Синтаксис: | auth_request_set  | 
|---|---|
| Умолчание: | — | 
| Контекст: | http,server,location | 
 Устанавливает переменную в запросе в заданное
 значение после завершения запроса авторизации.
 Значение может содержать переменные из запроса авторизации,
 например, $upstream_http_*.
basic авторизация с капчей / Хабр
Для приготовления авторизации с капчей нам понадобится сам nginx и его плагины encrypted-session, form-input, ctpp2, echo, headers-more, auth_request, auth_basic, set-misc. (Я дал ссылки на свои форки, т.к. делал некоторые изменения, которые пока не удалось пропихнуть в оригинальные репозитории. Можно также воспользоваться готовым образом.)
 (Я дал ссылки на свои форки, т.к. делал некоторые изменения, которые пока не удалось пропихнуть в оригинальные репозитории. Можно также воспользоваться готовым образом.)
Для начала зададим
encrypted_session_key "abcdefghijklmnopqrstuvwxyz123456";Дальше, на всякий случай, отключаем авторизационный заголовок
more_clear_input_headers Authorization;Теперь защищаем всё авторизацией
auth_request /auth;
location =/auth {
    internal;
    subrequest_access_phase on; # разрешаем авторизационную фазу в подзапросе
    auth_request off; # не использовать авторизацию
    set_decode_base64 $auth_decode $cookie_auth; # раскодируем авторизационную куку
    set_decrypt_session $auth_decrypt $auth_decode; # расшифровываем авторизационную куку
    if ($auth_decrypt = "") { return 401 UNAUTHORIZED; } # если не удалось расшифровать, то значит пользователь не авторизован
    more_set_input_headers "Authorization: Basic $auth_decrypt"; # подменить авторизацию на basic (чтобы использовать переменную $remote_user)
    auth_basic_user_file /data/nginx/. htaccess; # задаём файл basic авторизации
    auth_basic Auth; # включаем basic авторизацию
    echo -n OK; # пользователь авторизован
}
 htaccess; # задаём файл basic авторизации
    auth_basic Auth; # включаем basic авторизацию
    echo -n OK; # пользователь авторизован
}Для авторизованных пользователей показываем контент из их папки
location / {
    alias html/$remote_user/;
}А при отсутствии авторизации показываем авторизационную форму с капчей
error_page 401 = @error401;
location @error401 {
    set_escape_uri $request_uri_escape $request_uri; # кодируем запрос
    return 303 /login?request_uri=$request_uri_escape; # перенаправляем на авторизационную форму с капчей, сохранив запрос
}
location =/login {
    default_type "text/html; charset=utf-8"; # задаём тип
    if ($request_method = GET) { # если только показать авторизационную форму с капчей
        template login.html.ct2; # задаём шаблон
        ctpp2 on; # включаем шаблонизатор
        set_secure_random_alphanum $csrf_random 32; # задаём случайное csrf
        encrypted_session_expires 300; # задаём время жизни csrf 5 минут (5 * 60 = 300)
        set_encrypt_session $csrf_encrypt $csrf_random; # зашифровываем случайное csrf
        set_encode_base64 $csrf_encode $csrf_encrypt; # кодируем зашифрованное csrf
        add_header Set-Cookie "CSRF=$csrf_encode; Max-Age=300"; # помещаем зашифрованное csrf в куку на 5 минут (5 * 60 = 300)
        return 200 "{\"csrf\":\"$csrf_random\"}"; # возвращаем json для шаблонизатора
    } # иначе - обработать авторизационную форму с капчей
    set_form_input $csrf_form csrf; # получаем csrf из формы
    set_unescape_uri $csrf_unescape $csrf_form; # раскодируем csrf из формы
    set_decode_base64 $csrf_decode $cookie_csrf; # раскодируем csrf из куки
    set_decrypt_session $csrf_decrypt $csrf_decode; # расшифровываем csrf из куки
    if ($csrf_decrypt != $csrf_unescape) { return 303 $request_uri; } # если csrf из формы не совпадает с csrf из куки, то перенаправить на показ формы снова
    set_form_input $captcha_form captcha; # получаем капчу из формы
    set_unescape_uri $captcha_unescape $captcha_form; # раскодируем капчу из формы
    set_md5 $captcha_md5 "secret${captcha_unescape}${csrf_decrypt}"; # считаем md5
    if ($captcha_md5 != $cookie_captcha) { return 303 $request_uri; } # если md5 не совпадает с капчей из куки, то перенаправить на показ формы снова
    set_form_input $username_form username; # получаем логин из формы
    set_form_input $password_form password; # получаем пароль из формы
    set_unescape_uri $username_unescape $username_form; # раскодируем логин из формы
    set_unescape_uri $password_unescape $password_form; # раскодируем пароль из формы
    encrypted_session_expires 2592000; # задаём время жизни сессии 30 дней (30 * 24 * 60 * 60 = 2592000)
    set $username_password "$username_unescape:$password_unescape"; # задаём basic авторизацию
    set_encode_base64 $username_password_encode $username_password; # кодируем basic авторизацию
    set_encrypt_session $auth_encrypt $username_password_encode; # зашифровываем basic авторизацию
    set_encode_base64 $auth_encode $auth_encrypt; # кодируем зашифрованную basic авторизацию
    add_header Set-Cookie "Auth=$auth_encode; Max-Age=2592000"; # помещаем зашифрованную basic авторизацию в авторизационную куку на 30 дней (30 * 24 * 60 * 60 = 2592000)
    set $arg_request_uri_or_slash $arg_request_uri; # копируем запрос из аргумента
    set_if_empty $arg_request_uri_or_slash "/"; # если аргумент не задан, то начало
    set_unescape_uri $request_uri_unescape $arg_request_uri_or_slash; # раскодируем запрос
    return 303 $request_uri_unescape; # перенаправляем на сохранённый запрос
} login. html
 html
<html>
    <body>
        <form method="post">
            <input type="hidden" name="csrf" value="<TMPL_var csrf>" />
            username: <input type="text" name="username" placeholder="Enter User Name..." /><br />
            password: <input type="password" name="password" /><br />
            captcha: <img src="/captcha?csrf=<TMPL_var csrf>"/><input type="text" name="captcha" autocomplete="off" /><br />
            <input type="submit" name="submit" value="submit" />
        </form>
    </body>
</html>Jenkins/Nginx-двойной запрос на базовую аутентификацию, почему? Почему существует внутренний Jenkins auth?
Ниже приведен мой конфигурационный файл nginx для Jenkins. Большая часть его в точности соответствует тому, что я читал в документации.
Конфигурационный файл:
upstream app_server {
    server 127. ~ /jenkins/ {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    if (!-f $request_filename) {
        proxy_pass http://app_server;
        break;
    }
    auth_basic "[....] Please confirm identity...";
    auth_basic_user_file /etc/nginx/.htpasswd;
}
 ~ /jenkins/ {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    if (!-f $request_filename) {
        proxy_pass http://app_server;
        break;
    }
    auth_basic "[....] Please confirm identity...";
    auth_basic_user_file /etc/nginx/.htpasswd;
}
}
При переходе к http://sub.mydomain.net/jenkins мне предлагают мой базовый auth с сервером говорит: [….] Пожалуйста, подтвердите идентификацию… .
Это правильно, но как только я ввожу правильные учетные данные, мне снова предлагают базовую аутентификацию, но на этот раз: сервер говорит: Jenkins .
Откуда берется этот второй скрытый basic_auth?! Для меня это не имеет никакого смысла.
Нажав CANCEL в первом приглашении, я затем правильно получаю ошибку 401 authorization required .
Нажав CANCEL на второй базовый auth ( «Server says: Jenkins» ), я получаю:
HTTP ERROR 401
Problem accessing /jenkins/. Reason:
Invalid password/token for user: _____
Powered by Jetty://
  Reason:
Invalid password/token for user: _____
Powered by Jetty://
Кто-нибудь знает, что это, возможно, происходит?
authentication
nginx
jenkins
nginx-location
Поделиться
Источник
 skålfyfan    
22 февраля 2016 в 20:47
 2 ответа
 
-  Jenkins за nginx без подкаталогаУ меня есть Jenkins, работающий внутри моей установки Glassfish, так что Jenkins может быть достигнуто @ http://localhost:8090/jenkins/ Мне удалось настроить nginx так, чтобы до Jenkins можно было добраться снаружи @ http://build.example.com/jenkins/ Эта установка работает хорошо до сих пор, но я… 
-  почему Jenkins не может видеть некоторые файлы System32?Ситуация : Раб, о котором идет речь, — настоящий Windows (а не VM) Проблема : Я запускаю следующую команду windows line в своей системе Bcdedit.exe -set TESTSIGNING ON Когда я пытаюсь запустить его через Jenkins, я получаю это сообщение : Bcdedit.  exe не распознается как внутренняя или внешняя… exe не распознается как внутренняя или внешняя…
33
Я нашел решение своей проблемы, выполнив поиск Nginx, используемого в качестве обратного прокси-сервера для любого другого приложения с basic_auth.
Решение было ответом, найденным здесь:
 https://serverfault.com/questions/511846/basic-auth-for-a-tomcat-app-jira-with-nginx-as-reverse-proxy
Строка, которую я пропустил в своей конфигурации nginx, была:
 # Don't forward auth to Tomcat
 proxy_set_header   Authorization "";
По умолчанию кажется, что после basic auth Nginx дополнительно переадресует заголовки auth в Jenkins, и именно это привело к моей проблеме. Jenkins получает переадресованные заголовки auth, а затем думает, что ему тоже нужно авторизоваться?!
Если мы настроим наш обратный прокси-сервер так, чтобы он не пересылал никаких заголовков авторизации, как показано выше, то все будет работать так, как должно. Nginx запросит basic_auth, и после успешной аутентификации мы явно очистим (сбросим?) заголовки auth при пересылке на наш обратный прокси-сервер.
 Nginx запросит basic_auth, и после успешной аутентификации мы явно очистим (сбросим?) заголовки auth при пересылке на наш обратный прокси-сервер.
Поделиться
 skålfyfan    
26 февраля 2016 в 20:30
0
У меня тоже была эта проблема, в моем случае она была вызвана включением безопасности в самом jenkins, отключение безопасности решило эту проблему.
Согласно их документам:
Если вы делаете контроль доступа в Apache, не включайте безопасность в Jenkins, так как эти две вещи будут мешать друг другу.
https://wiki.jenkins-ci.org/display/JENKINS/Apache+приложение+для+безопасность
По-видимому, происходит то, что nginx пересылает ответ auth_basic на jenkins, который пытается выполнить auth_basic в ответ. Я еще не нашел удовлетворительного решения этой проблемы.
Поделиться
 Ohm    
24 февраля 2016 в 21:50
Похожие вопросы:
Github Jenkins проблемы безопасности webhook
 Я уже некоторое время использую Github Jenkins webhook без каких-либо проблем. У меня есть мой Jenkins, работающий за прокси-сервером Nginx, и единственной установленной системой безопасности был…
 У меня есть мой Jenkins, работающий за прокси-сервером Nginx, и единственной установленной системой безопасности был…
Защитите Jenkins с помощью nginx http auth, кроме обратного вызова url
Я установил jenkins на свой сервер и хочу защитить его с помощью nginx http auth, чтобы запросы: http://my_domain.com:8080 http://ci.my_domain.com будет защищен кроме одного места:…
Проксирование Jenkins с nginx
Я бы хотел прокси-сервер Jenkins использовать nginx. У меня уже есть рабочая версия этого файла с использованием этого конфигурационного файла в /etc/sites-available/jenkins : server { listen 80;…
Jenkins за nginx без подкаталога
У меня есть Jenkins, работающий внутри моей установки Glassfish, так что Jenkins может быть достигнуто @ http://localhost:8090/jenkins/ Мне удалось настроить nginx так, чтобы до Jenkins можно было…
почему Jenkins не может видеть некоторые файлы System32?
 Ситуация : Раб, о котором идет речь, — настоящий Windows (а не VM) Проблема : Я запускаю следующую команду windows line в своей системе Bcdedit. exe -set TESTSIGNING ON Когда я пытаюсь запустить его…
 exe -set TESTSIGNING ON Когда я пытаюсь запустить его…
поддомены + nginx + обратный прокси-сервер + jenkins + gitlab
Поиск в интернете полного руководства и объяснения о том, как запустить веб-сайт + jenkins + gitlab вот так: Jenkins @ jenkins.domain.com GitLab @ gitlab.domain.com статический сайт @ domain.com т….
Jenkins за nginx (docker)
У меня есть nginx-контейнер со следующим местоположением и восходящей конфигурацией: upstream jenkins-docker { server jenkins:8080 fail_timeout=0; } # configuration file…
Jenkins за Nginx не может загружать статические ресурсы
У меня есть автономный Jenkins, с которым можно связаться по адресу http://1.2.3.4:8080 , и настроить экземпляр Nginx, работающий на порту 80. Вот мой конфигурационный файл для Nginx: location…
используя SSL на Nginx или Jenkins?
 У меня есть Jenkins, работающий на Nginx на виртуальной машине. Мне нужно обезопасить трафик, если я применю SSL на Nginx или Jenkins. (Jenkins-это единственная служба, работающая на этой машине).
 (Jenkins-это единственная служба, работающая на этой машине).
K8s Helm-Jenkins с Nginx входом
Я пытаюсь развернуть Jenkins, перед которым стоит nginx-вход через шлем. Цель состоит в том, чтобы обеспечить Jenkins за HTTPs с окончанием SSL на nginx. В настоящее время я использую самозаверяющий…
Nginx + LDAP авторизация : DevOps: servers abuse
Задача
Довольно часто в корпоративной среде встречаются два сервиса:
- Nginx
- LDAP
И очень часто надо сделать авторизацию к какому-то сервису авторизацию
 через LDAP на Nginx. Сам Nginx не имеет встроенного модуля авторизации в
 LDAP, в отличие от Apache или Tomcat.
Итак, давайте сделаем basic авторизацию пользователей в Nginx через
 LDAP.
Сервер авторизации
Метод, который предлагают сами разработчики Nginx заключается в
 следующем: необходимо поднять промежуточный сервер, который будет
 проверять введеные данные в LDAP и возвращать результат в Nginx. В
 В
 случае ответа HTTP/200 — пользователь авторизован. В любом другом случае
 — даные не верны.
Компания Nginx предоставляет такой простой демон, который можно взять
 тут.
Клонируем репу к себе на сервер:
$ git clone https://github.com/nginxinc/nginx-ldap-auth.git /opt/nginx-ldap-auth
и запускаем этот сервер (дополнительной настройки он не требует):
$ /opt/nginx-ldap-auth/nginx-ldap-auth-daemon-ctl.sh start
Остальная настройка будет производиться из конфига Nginx. Для этого нам
 надо добавить в Nginx что-то типа такого:
        location = /auth-proxy {
            internal;
            proxy_pass_request_body off;
            proxy_set_header Content-Length "";
            proxy_pass http://127.0.0.1:8888;
            proxy_set_header X-Ldap-URL "ldap://127.0.0.1:389";
            proxy_set_header X-Ldap-Template "(uid=%(username)s)";
            proxy_set_header X-Ldap-BaseDN "dc=example,dc=com";
        }
        location /private-storage {
            auth_request /auth-proxy;
            proxy_pass http://application-backend;
        }
По умолчанию, будет произведена попытка simple bind с анонимным
 пользователем. Если же у вас не поддерживается этот метод, то вам
 Если же у вас не поддерживается этот метод, то вам
 необходимо раскомментировать строки и указать DN и пароль пользователя,
 который может искать по дереву LDAP. Это самая простая конфигурация и
 она может быть расширена другими модулями авторизации.
Tweet
LDAP — Nginx + LDAP Auth
 OS: «Linux Debian 8/9/10», «Linux Ubuntu 16/18 LTS».
Application: Nginx, Python, LDAP.
Задача: обеспечить аутентификацию пользователей сайта через внешний LDAP-сервис, средствами web-сервера «Nginx».
С точки зрения эксплуатационщика на предприятии удобно проводить аутентификацию пользователей внутренних сервисов через некий централизованный каталог с учётными данными. Чаще всего для этого применяется сервис «Microsoft Active Directory», но технически почти всегда в этой роли можно использовать иные реализации LDAP, вроде «OpenLDAP» или «389-DS».
В сложносочинённых сайтах задачи аутентификации и авторизации обычно возлагаются на специально для этого предназначенные компоненты внутри информационной системы, для реализации которых во всех распространённых языках программирования имеются библиотеки функций взаимодействия с LDAP. С мелкими сайтами, возможно даже полностью статическими, сложнее — у них нет подкапотных механизмов, посредством которых можно было бы проверять право доступа пользователя к запрашиваемым данным. В таком случае на роль привратника остаётся один кандидат — web-браузер. И вот на этом этапе выясняется, что любимый нами «Nginx» не имеет модуля аутентификации через LDAP.
 С мелкими сайтами, возможно даже полностью статическими, сложнее — у них нет подкапотных механизмов, посредством которых можно было бы проверять право доступа пользователя к запрашиваемым данным. В таком случае на роль привратника остаётся один кандидат — web-браузер. И вот на этом этапе выясняется, что любимый нами «Nginx» не имеет модуля аутентификации через LDAP.
Как вариант решения поставленной задачи, можно воспользоваться системных модулем «auth_pam», указав «Nginx» проводить аутентификацию через PAM несущей операционной системы («Linux» или xBSD), в которой настроена связка с LDAP. Лет пять назад разрабатывалась реализация в виде модуля «nginx-auth-ldap», но он устарел сейчас разработчики «Nginx» официально предлагают использовать другой подход, с промежуточным сервисом «nginx-ldap-auth-daemon».
Предлагаемая схема взаимодействий проста и прозрачна. Когда пользователь обращается к защищённому разделу сайта, web-сервер «Nginx» запрашивает посредством протокола «HTTP Basic authentication» логин и пароль. Полученные аутентификационные данные встроенным модулем «http_auth_request» сразу отправляются по протоколу проксирования фоновому web-сервису «LDAP Auth Daemon», который в свою очередь обращается к указанному в его настройках LDAP-серверу за подтверждением существования пользователя с предъявленными логином и паролем. Положительный или отрицательный ответ доставляется обратно по цепочке web-серверу «Nginx», который допускает или нет пользователя до запрашиваемого контента. Этот процесс красиво расписан в официальной документации.
 Полученные аутентификационные данные встроенным модулем «http_auth_request» сразу отправляются по протоколу проксирования фоновому web-сервису «LDAP Auth Daemon», который в свою очередь обращается к указанному в его настройках LDAP-серверу за подтверждением существования пользователя с предъявленными логином и паролем. Положительный или отрицательный ответ доставляется обратно по цепочке web-серверу «Nginx», который допускает или нет пользователя до запрашиваемого контента. Этот процесс красиво расписан в официальной документации.
Перейдём же к практике.
Установка «Nginx LDAP Auth Daemon».
Простенькое приложение-посредник написано на «Python», который почти всегда уже установлен:
# aptitude install python2.7-minimal python-ldap git
Загружаем дистрибутив «Nginx LDAP Auth Daemon»:
# cd /usr/src
# git clone https://github.com/nginxinc/nginx-ldap-auth
Копируем единственный нужный исполняемый файл в наиболее подходящее ему место в файловой системе:
# cp . /nginx-ldap-auth/nginx-ldap-auth-daemon.py /usr/local/bin/
 /nginx-ldap-auth/nginx-ldap-auth-daemon.py /usr/local/bin/
Заготавливаем место для журналов событий (аутентификация дело ответственное):
# mkdir -p -m 740 /var/log/nginx-ldap-auth
# chown -R www-data /var/log/nginx-ldap-auth
Пробуем запустить приложение:
# cd /usr/local/bin
# LOG=/var/log/nginx-ldap-auth/daemon.log ./nginx-ldap-auth-daemon.py start
По умолчанию «Nginx LDAP Auth Daemon» прослушивает запросы только на «локальной сетевой петле», на обычно свободном порту, что меня полностью устраивает и освобождает от необходимости что-то настраивать:
# netstat -apn | grep -i python
tcp … 127.0.0.1:8888 0.0.0.0:* LISTEN …/python
Оставим пока приложение запущенным и перейдём к настройке web-сервера.
Настройка аутентификации через LDAP в «Nginx».
Принимая за данность, что web-сервер «Nginx» уже корректно настроен, дополним настройки конкретного сайта блоком параметров проксирования запросов аутентификации к «Nginx LDAP Auth Daemon»:
# vi /etc/nginx/sites-available/site. example.net.conf
 example.net.conf
….
server {
  ….
  # Перечисляем требования, которым должны удовлетворять пользователи сайта
  satisfy all;
  #
  # (пользователи из локальных сетей)
  allow 10.0.0.0/8;
  allow 172.16.0.0/12;
  allow 192.168.0.0/16;
  deny  all;
  #
  # (прошедшие аутентификацию)
  auth_request /auth-proxy;
  # Блок параметров запроса к «Nginx LDAP Auth Daemon»
  location = /auth-proxy {
    internal;
    proxy_pass_request_body off;
    proxy_set_header Content-Length «»;
    proxy_pass http://127.0.0.1:8888;
    proxy_set_header X-Ldap-URL «ldaps://ldap.example.net:636»;
    proxy_set_header X-Ldap-Template «(&(uid=%(username)s)(objectclass=person)(memberOf=cn=web-service-users,ou=groups,dc=example,dc=net))»;
    proxy_set_header X-Ldap-BaseDN «ou=People,dc=example,dc=net»;
    proxy_set_header X-Ldap-BindDN «uid=nginx-web-service,ou=Accounts,ou=Services,dc=example,dc=net»;
    proxy_set_header X-Ldap-BindPass «***»;
  }
  . …
 …
}
….
Конструкция «%(username)s» в примере выше используется для получения из набора внутренних переменных «Nginx» имени пользователя (логина), введённого в форму «HTTP Basic authentication».
Проверяем синтаксическую корректность конфигурации «Nginx» и применяем её:
# nginx -t && nginx -s reload
Сразу после запуска можно пробовать обращаться к закрытой части сайта и проверять, работает ли связка «Nginx», «Nginx LDAP Auth Daemon» и LDAP в соответствии с ожиданиями. Если что-то пошло не так, смотрим предусмотрительно заготовленный журнал событий.
Подключение к LDAP с «самоподписанным» SSL-сертификатом.
Почти наверняка LDAP-сервер, работающий только в локальной сети, для шифрования соединений будет предлагать «self-signed» SSL-сертификат. Типовое python-приложение доверяет сертификатам, размещённым в соответствующем хранилище несущей операционной системы, так что самым простым способом наладить связь будет добавление публичной части самодельного сертификата LDAP-сервиса в перечень «доверенных»:
# cp . /ss-rootCA.crt /usr/local/share/ca-certificates/
 /ss-rootCA.crt /usr/local/share/ca-certificates/
# update-ca-certificates
Последующая проверка (с несущего «Nginx LDAP Auth Daemon» сервера) не должна демонстрировать предупреждений о проблемах распознавания подписи SSL-сертификата целевого сервера:
$ echo QUIT | openssl s_client -connect ldap.exfmple.net:636 -CApath /etc/ssl/certs
О кешировании запросов аутентификации.
Аутентификация через «auth_request» в «Nginx» работает так, что на каждый запрос любого ресурса (даже мелкой картинки в составе страницы) генерируется внутреннее событие требования аутентификации, по которому отправляется запрос в промежуточную подсистему «ldap‑auth», которая в свою очередь обращается за подтверждением подлинности пользователя в LDAP. Таким образом на каждый запрос web-страницы создаётся от десятка до нескольких сотен подзапросов, в которых совершенно нет необходимости. Для снижения затрат ресурсов на такую непродуктивную деятельность в «Nginx» применяется кеширование.
Вначале на уровне глобальной конфигурации «Nginx» указываем желаемое месторасположение директории для файлов данных кешируемых запросов и максимальное время хранения таковых, а после в конфигурации сайта, для доступа к которому требуется аутентификация через LDAP, добавляем указание кешировать успешно завершённые запросы к подсистеме «ldap-auth» на срок до десяти минут:
# vi /etc/nginx/sites-available/site. example.net.conf
 example.net.conf
proxy_cache_path /var/lib/nginx/cache/ keys_zone=auth_cache:10m;
….
server {
  ….
  location = /auth-proxy {
    internal;
    proxy_cache auth_cache;
    proxy_cache_valid 200 10m;
    ….
# nginx -t && nginx -s reload
Настройка автозапуска «Nginx LDAP Auth Daemon» посредством «Systemd».
Ранее мы запустили приложение-прослойку вручную. Автоматизируем эту процедуру, описав подсистему аутентификации как постоянно работающий простой сервис:
# vi /etc/systemd/system/nginx-ldap-auth-daemon.service
[Unit]
Description=LDAP authentication helper for Nginx
After=network.target network-online.target
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/var/run
Environment=LOG=/var/log/nginx-ldap-auth/daemon.log
ExecStart=/usr/local/bin/nginx-ldap-auth-daemon.py
KillMode=process
KillSignal=SIGINT
Restart=on-failure
[Install]
WantedBy=multi-user. target
 target
Указываем «Systemd» перечитать и принять новую конфигурацию, а также явно активируем и запускаем новый сервис:
# systemctl daemon-reload
# systemctl enable nginx-ldap-auth-daemon.service
# systemctl start nginx-ldap-auth-daemon
Журналы событий нам в помощь, если что-то работает не так, как задумывалось:
# systemctl status nginx-ldap-auth-daemon
# journalctl -xe
Наладка ротации журналов событий.
Выше упоминалось, что реализация аутентификации в «Nginx» склонна генерировать массу запросов, которые записываются в журнал событий. Если забыть об этом, то через полгода в файловой системе вырастет огромный ненужный файл. Заранее натравим на него подсистему усечения и оборота журналов:
# vi /etc/logrotate.d/nginx-ldap-auth-daemon
/var/log/nginx-ldap-auth/*.log {
  monthly
  rotate 12
  compress
  delaycompress
  missingok
  notifempty
  copytruncate
  su www-data www-data
}
Проверяем корректность конфигурации, не воздействуя при этом на файлы журналов:
# logrotate -d /etc/logrotate. d/nginx-ldap-auth-daemon
 d/nginx-ldap-auth-daemon
документов NGINX | Ограничение доступа с помощью базовой аутентификации HTTP
Введение
 Вы можете ограничить доступ к своему веб-сайту или его частям, реализовав аутентификацию по имени пользователя и паролю. Имена пользователей и пароли берутся из файла, созданного и заполняемого инструментом создания файла паролей, например,  apache2-utils .
Базовая аутентификация
HTTP также может быть объединена с другими методами ограничения доступа, например, ограничением доступа по IP-адресу или географическому положению.
Предварительные требования
- NGINX Plus или NGINX с открытым исходным кодом
-  Утилита для создания файлов паролей, например apache2-utils(Debian, Ubuntu) илиhttpd-tools(RHEL / CentOS / Oracle Linux).
Создание файла паролей
 Чтобы создать пары имя пользователя и пароль, используйте утилиту для создания файла паролей, например,  apache2-utils  или  httpd-tools 
- Убедитесь, что установлено - apache2-utils(Debian, Ubuntu) или- httpd-tools(RHEL / CentOS / Oracle Linux). 
- Создайте файл паролей и первого пользователя. Запустите утилиту - htpasswdс флагом- -c(для создания нового файла), указав путь к файлу в качестве первого аргумента и имя пользователя в качестве второго аргумента:- $ sudo htpasswd -c /etc/apache2/.htpasswd пользователь1 - Нажмите Enter и введите пароль для user1 по запросу. 
- Создайте дополнительные пары пользователь-пароль. Опустите флаг - -c, потому что файл уже существует:- $ sudo htpasswd / etc / apache2 /.htpasswd user2 
- Вы можете подтвердить, что файл содержит парные имена пользователей и зашифрованные пароли: - $ cat /etc/apache2/.htpasswd user1: $ apr1 $ / woC1jnP $ KAh0SsVn5qeSMjTtn0E9Q0 user2: $ apr1 $ QdR8fNLT $ vbCEEzDj7LyqCMyNpSoBh / user3: $ apr1 $ Mr5A0e.U $ 0j39Hp5FfxRkneklXaMrr / 
Настройка NGINX и NGINX Plus для базовой аутентификации HTTP
- Внутри области, которую вы собираетесь защищать, укажите директиву - auth_basicи дайте имя защищенной паролем области. Имя области будет показано в диалоговом окне имени пользователя / пароля при запросе учетных данных: Имя области будет показано в диалоговом окне имени пользователя / пароля при запросе учетных данных:- location / api { auth_basic «Администраторский кабинет»; # ... }
- Укажите директиву - auth_basic_user_fileс путем к файлу .htpasswd , который содержит пары пользователь / пароль:- location / api { auth_basic «Администраторский кабинет»; auth_basic_user_file /etc/apache2/.htpasswd; }
 В качестве альтернативы вы можете ограничить доступ ко всему веб-сайту с помощью базовой аутентификации, но все же сделать некоторые области сайта общедоступными.В этом случае укажите параметр  off  в директиве  auth_basic , которая отменяет наследование с верхних уровней конфигурации:
 server {
    ...
    auth_basic «Администраторский кабинет»;
    auth_basic_user_file conf / htpasswd;
    location / public / {
        auth_basic off;
    }
}
 Сочетание базовой аутентификации с ограничением доступа по IP-адресу
Базовую аутентификацию
 HTTP можно эффективно комбинировать с ограничением доступа по IP-адресу. Вы можете реализовать как минимум два сценария:
 Вы можете реализовать как минимум два сценария:
- пользователь должен быть аутентифицирован и иметь действующий IP-адрес
- пользователь должен быть аутентифицирован или иметь действующий IP-адрес
- Разрешить или запретить доступ с определенных IP-адресов с помощью директив - allowи- deny:- location / api { # ... отрицать 192.168.1.2; разрешить 192.168.1.1/24; разрешить 127.0.0.1; все отрицать; }- Доступ будет предоставлен только для - 192.168.1.1 / 24 сеть, за исключением адреса- 192.168.1.2. Обратите внимание, что директивы- allowи- denyбудут применяться в том порядке, в котором они определены.
- Совместное ограничение по IP и HTTP-аутентификации с - соответствует директиве.
 Если вы установите для директивы значение- для всех, доступ предоставляется, если клиент удовлетворяет обоим условиям. Если вы установите для директивы значение Если вы установите для директивы значение- любое, доступ предоставляется, если клиент удовлетворяет хотя бы одному условию:- location / api { #... удовлетворить всех; отрицать 192.168.1.2; разрешить 192.168.1.1/24; разрешить 127.0.0.1; все отрицать; auth_basic «Администраторский кабинет»; auth_basic_user_file conf / htpasswd; }
Полный пример
В примере показано, как защитить область состояния с помощью простой аутентификации в сочетании с ограничением доступа по IP-адресу:
 http {
    server {
        слушайте 192.168.1.23:8080;
        корень / usr / share / nginx / html;
        location / api {
            api;
            удовлетворить всех;
            Сказать 192.168.1.2;
            разрешить 192.168.1.1/24;
            разрешить 127.0.0.1;
            все отрицать;
            auth_basic «Администраторский кабинет»;
            auth_basic_user_file /etc/apache2/.htpasswd;
        }
    }
}
 При переходе на страницу статуса вам будет предложено войти в систему:
 Если предоставленное имя и пароль не совпадают с файлом паролей, вы получите ошибку  401 (требуется авторизация) .
Как настроить HTTP-аутентификацию с Nginx в Ubuntu 12.10
Что означает красный
Строки, которые пользователь должен ввести или настроить, будут в этом уроке красным! Остальные в основном должны быть скопированы и вставлены.
О Nginx
Nginx (произносится как «движок x») — это HTTP и обратный прокси-сервер, а также почтовый прокси-сервер, написанный Игорем Сысоевым, который является гибкой и легкой программой по сравнению с apache. Официальная документация nginx находится здесь.
Предварительные требования
В качестве предварительного условия мы предполагаем, что вы прочитали статью о том, как настроить свой VPS, а также установили на нем Nginx.Если нет, вы можете найти статью о настройке VPS в статье о начальной настройке сервера, а также дополнительную информацию об установке nginx в нашем сообществе.
Шаг 1. Apache Utils
 Нам нужен htpasswd для создания и генерации зашифрованного файла для пользователя с использованием базовой аутентификации. Установите apache2-utils, используя команду ниже.
 Установите apache2-utils, используя команду ниже.
sudo apt-get install apache2-utils
Шаг 2: Создайте пользователя и пароль
Создайте файл .htpasswd в каталоге вашего веб-сайта, обслуживаемого nginx.Следующая команда создаст файл, а также добавит в него пользователя и зашифрованный пароль.
sudo htpasswd -c /etc/nginx/.htpasswd exampleuser
Инструмент предложит вам ввести пароль.
Новый пароль: Введите повторно новый пароль: Добавление пароля для пользователя exampleuser
Структура файла htpasswd будет такой:
логин Пароль
Обратите внимание, что этот htpasswd должен быть доступен учетной записи пользователя, на которой запущен Nginx.
Шаг 3. Обновите конфигурацию Nginx
Ваш файл конфигурации nginx для веб-сайта должен находиться в / etc / nginx / sites-available /. Добавьте две записи ниже для пути к домену, который вы хотите защитить.
    auth_basic «Ограничено»;
    auth_basic_user_file /etc/nginx/. htpasswd;
 htpasswd;
 Вторая строка — это расположение файла htpasswd для вашего веб-сайта.
Например, предположим, что наш файл конфигурации nginx — это / etc / nginx / sites-available / website_nginx.conf откройте файл с помощью vi или любого другого редактора по вашему выбору.
sudo vi /etc/nginx/sites-available/website_nginx.conf
Затем добавьте две строки в следующий путь:
 
 server {
  прослушивать номер порта;
  server_name ip_address;
  место расположения / {
      root /var/www/mywebsite.com;
      index index.html index.htm;
      auth_basic «Ограничено»; # For Basic Auth
      auth_basic_user_file / etc / nginx /.htpasswd; # For Basic Auth
  }
}
 Шаг 4. Перезагрузите Nginx
.
Чтобы отразить изменения на нашем веб-сайте, перезагрузите конфигурацию nginx и попробуйте получить доступ к домену, который был защищен с помощью базовой проверки подлинности.
$ sudo /etc/init.d/nginx reload * Перезагрузка конфигурации nginx ...
Теперь попробуйте получить доступ к своему веб-сайту или пути к домену, который вы защитили, и вы увидите запрос браузера, в котором вас попросят ввести логин и пароль.Введите данные, которые вы использовали при создании файла .htpasswd. Запрос не позволяет вам получить доступ к веб-сайту, пока вы не введете правильные учетные данные.
И вуаля! У вас есть путь к домену вашего сайта, защищенный с помощью базовой аутентификации Nginx.
Как настроить базовую HTTP-аутентификацию с Nginx в Ubuntu 14.04
Введение
Nginx — один из ведущих активно используемых веб-серверов. Он и его коммерческая версия Nginx Plus разработаны Nginx, Inc.
В этом руководстве вы узнаете, как ограничить доступ к веб-сайту на базе Nginx, используя базовый метод аутентификации HTTP в Ubuntu 14.04. Базовая аутентификация HTTP — это простой метод аутентификации по имени пользователя и (хешированному) паролю.
Предварительные требования
Для выполнения этого руководства вам понадобится следующее:
 Вам понадобится команда  htpassword , чтобы настроить пароль, который будет ограничивать доступ к целевому веб-сайту. Эта команда является частью пакета
 Эта команда является частью пакета  apache2-utils , поэтому первым шагом является установка этого пакета.
   -  sudo apt-get install apache2-utils
 
 Шаг 2. Настройка учетных данных базовой аутентификации HTTP
На этом шаге вы создадите пароль для пользователя, запустившего веб-сайт.
 Этот пароль и соответствующее имя пользователя будут сохранены в указанном вами файле. Пароль будет зашифрован, а имя файла может быть любым. Здесь мы используем файл  /etc/nginx/.htpasswd  и имя пользователя  nginx .
Чтобы создать пароль, выполните следующую команду. Вам нужно будет пройти аутентификацию, а затем указать и подтвердить пароль.
   -  sudo htpasswd -c /etc/nginx/.htpasswd nginx
 
  Вы можете проверить содержимое вновь созданного файла, чтобы увидеть имя пользователя и хешированный пароль.
 Пример /etc/nginx/.htpasswd
  nginx: $ apr1 $ ilgq7ZEO $ OarDX15gjKAxuxzv0JTrO /
  Шаг 3. Обновление конфигурации Nginx
Теперь, когда вы создали учетные данные для базовой аутентификации HTTP, следующим шагом будет обновление конфигурации Nginx для использования целевым веб-сайтом.
 Базовая аутентификация HTTP стала возможной благодаря директивам  auth_basic  и  auth_basic_user_file . Значение  auth_basic  — это любая строка, которая будет отображаться при запросе аутентификации; значение  auth_basic_user_file  — это путь к файлу паролей, который был создан на шаге 2.
 Обе директивы должны быть в файле конфигурации целевого веб-сайта, который обычно находится в каталоге  / etc / nginx / sites-available .Откройте этот файл с помощью  nano  или вашего любимого текстового редактора.
   -  sudo nano / etc / nginx / сайты-доступные / по умолчанию
 
 В разделе location добавьте обе директивы:
 /etc/nginx/sites-available/default. conf
 conf
 . . .
server_name localhost;
место расположения / {
        # Сначала пытаемся обработать запрос как файл, затем
        # в качестве каталога, затем вернитесь к отображению 404.
        try_files $ uri $ uri / = 404;
        # Раскомментируйте, чтобы включить naxsi в этом месте
        # включить / etc / nginx / naxsi.правила
        auth_basic «Частная собственность»;
        auth_basic_user_file /etc/nginx/.htpasswd;
}
. . .
  Сохраните и закройте файл.
Шаг 4 — Тестирование установки
Чтобы применить изменения, сначала перезагрузите Nginx.
   -  sudo service nginx reload
 
  Теперь попробуйте получить доступ к только что защищенному веб-сайту, перейдя по адресу  http: // your_server_ip /  в своем любимом браузере. Вам должно быть представлено окно аутентификации (в котором написано «Частная собственность», строка, которую мы установили для  auth_basic ), и вы не сможете получить доступ к веб-сайту, пока не введете правильные учетные данные. Если вы введете заданные вами имя пользователя и пароль, вы увидите домашнюю страницу Nginx по умолчанию.
 Если вы введете заданные вами имя пользователя и пароль, вы увидите домашнюю страницу Nginx по умолчанию.
Заключение
Вы только что завершили базовое ограничение доступа к веб-сайту Nginx. Дополнительная информация об этой технике и других средствах ограничения доступа доступна в документации Nginx.
Модуль ngx_http_auth_request_module
Модуль ngx_http_auth_request_module
 Модуль  ngx_http_auth_request_module  (1.5.4+) реализует
 авторизация клиента на основе результата подзапроса.Если подзапрос возвращает код ответа 2xx, доступ разрешен.
 Если он возвращает 401 или 403,
 доступ запрещен с соответствующим кодом ошибки.
 Любой другой код ответа, возвращенный подзапросом, считается ошибкой.
 Для ошибки 401 клиент также получает
 Заголовок «WWW-Authenticate» из ответа на подзапрос.
 Этот модуль не собирается по умолчанию, его нужно включить с помощью
  --with-http_auth_request_module 
 параметр конфигурации.
 Модуль можно комбинировать с
 другие модули доступа, такие как
 ngx_http_access_module,
 ngx_http_auth_basic_module,
 и
 ngx_http_auth_jwt_module,
 через директиву удовлетворения.
До версии 1.7.3 ответы на подзапросы авторизации нельзя было кэшировать.
(используя proxy_cache,
proxy_store и т. д.).
Пример конфигурации
location / private / {
    auth_request / auth;
    ...
}
location = / auth {
    proxy_pass ...
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Original-URI $ request_uri;
}
 Директивы
| Синтаксис: |   auth_request   | 
|---|---|
| Дефолт: | auth_request off; | 
| Контекст: |  http , сервер , расположение  | 
 Включает авторизацию на основе результата подзапроса и устанавливает
 URI, на который будет отправлен подзапрос.
| Синтаксис: |   auth_request_set   | 
|---|---|
| Дефолт: | — | 
| Контекст: |  http , сервер , расположение  | 
 Устанавливает для переменной запроса     заданное значение
   значение   после завершения запроса авторизации.Значение может содержать переменные из запроса авторизации,
 например  $ upstream_http_ * .
Как настроить базовую HTTP-аутентификацию в Nginx
 Базовая HTTP-аутентификация — это механизм безопасности для ограничения доступа к вашему веб-сайту / приложению или некоторым его частям путем настройки простой аутентификации по имени пользователя и паролю. Его можно использовать по существу для защиты всего HTTP-сервера, отдельных блоков сервера (виртуальных хостов в Apache) или блоков местоположения.
 Его можно использовать по существу для защиты всего HTTP-сервера, отдельных блоков сервера (виртуальных хостов в Apache) или блоков местоположения.
Читайте также : Как настроить виртуальные хосты на основе имен и IP (серверные блоки) с NGINX
Как следует из названия, полагаться на этот метод небезопасно; вы должны использовать его вместе с другими более надежными мерами безопасности.Например, если ваше веб-приложение работает по протоколу HTTP, учетные данные пользователя передаются в виде обычного текста, поэтому вам следует рассмотреть возможность включения HTTPS.
Цель этого руководства — помочь вам добавить небольшой, но полезный уровень безопасности для защиты частного / привилегированного контента в ваших веб-приложениях (таких как, но не ограничиваясь, стороны администратора). Вы также можете использовать его для предотвращения доступа к веб-сайту или приложению, которое все еще находится на стадии разработки.
Требования
- Установить стек LEMP в CentOS / RHEL 7
- Установите стек LEMP в Ubuntu / Debian
Создать файл пользователя HTTP-аутентификации
 Вы должны начать с создания файла, в котором будет храниться  пар имя пользователя: пароль . Для создания этого файла мы воспользуемся утилитой  htpasswd  от Apache HTTP Server.
 Для создания этого файла мы воспользуемся утилитой  htpasswd  от Apache HTTP Server.
Сначала убедитесь, что в вашей системе установлены пакеты apache2-utils или httpd-tools , которые предоставляют утилиту htpasswd , в противном случае выполните соответствующую команду для вашего дистрибутива, чтобы установить ее:
# yum install httpd-tools [RHEL / CentOS] $ sudo apt install apache2-utils [Debian / Ubuntu]
 Затем запустите команду  htpasswd  ниже, чтобы создать файл паролей для первого пользователя.Параметр  -c  используется для указания файла passwd. Как только вы нажмете  [Enter] , вам будет предложено ввести пароль пользователя.
# htpasswd -c /etc/nginx/conf.d/.htpasswd разработчик
 Добавьте второго пользователя и не используйте здесь опцию  -c .
# htpasswd /etc/nginx/conf.d/.htpasswd admin
 Теперь, когда у вас есть готовый файл паролей, переходите к настройке частей вашего веб-сервера, к которым вы хотите ограничить доступ. Чтобы просмотреть содержимое файла паролей (включая имена пользователей и зашифрованные пароли), используйте команду cat ниже.
 Чтобы просмотреть содержимое файла паролей (включая имена пользователей и зашифрованные пароли), используйте команду cat ниже.
# cat /etc/nginx/conf.d/.htpasswd
Просмотр файла паролей HTTP
Настройка аутентификации HTTP для Nginx
Как мы упоминали ранее, вы можете ограничить доступ к своему веб-серверу, отдельному веб-сайту (используя его серверный блок) или директиве местоположения. Для этого можно использовать две полезные директивы.
- auth_basic — включает проверку имени пользователя и пароля по протоколу « HTTP Basic Authentication ».
- auth_basic_user_file — указывает файл паролей.
Защита паролем виртуальных хостов Nginx
Чтобы реализовать базовую аутентификацию для всего веб-сервера, которая применяется ко всем блокам сервера, откройте файл /etc/nginx/nginx.conf и добавьте следующие строки в контекст http:
 http {
auth_basic «Ограниченный доступ!»;
    auth_basic_user_file /etc/nginx/conf. d/.htpasswd;
…… ...
}
 d/.htpasswd;
…… ...
}
 Защита паролем веб-сайта или домена Nginx
Чтобы включить базовую аутентификацию для определенного домена или субдомена, откройте его файл конфигурации в / etc / nginx / conf.d / или / etc / nginx / conf / sites-available (в зависимости от того, как вы установили Nginx), затем добавьте конфигурацию ниже в серверный блок или контекст:
 server {
слушать 80;
имя_сервера example.com;
auth_basic «Ограниченный доступ!»;
    auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
место расположения /  {
…… ..
}
…… ...
}
 Защита паролем веб-каталога в Nginx
 Вы также можете включить базовую аутентификацию в директиве местоположения.В приведенном ниже примере всем пользователям, пытающимся получить доступ к блоку местоположения  / admin , будет предложено пройти аутентификацию.
 server {
слушать 80;
имя_сервера example.com www.example.com;
место расположения / {
…… . .
}
location  / admin /  {
auth_basic «Ограниченный доступ!»;
    auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
}
location / public / {
auth_basic off; # отключает базовую HTTP-аутентификацию для этого блока
}
……..
}
 .
}
location  / admin /  {
auth_basic «Ограниченный доступ!»;
    auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
}
location / public / {
auth_basic off; # отключает базовую HTTP-аутентификацию для этого блока
}
……..
}
 Если вы настроили базовую HTTP-аутентификацию, у всех пользователей, которые попытаются получить доступ к вашему веб-серверу, субдомену или определенной части сайта (в зависимости от того, где вы это реализовали), будет запрошено имя пользователя и пароль, как показано на снимке экрана. ниже.
Nginx Basic Authentication
В случае неудачной аутентификации пользователя отобразится ошибка « 401 Требуется авторизация », как показано ниже.
401 Требуется авторизация. Ошибка
. Дополнительные сведения см. В разделе «Ограничение доступа с помощью обычной проверки подлинности HTTP».
Вы также можете прочитать следующие полезные руководства по HTTP-серверу Nginx.
- Как защитить паролем веб-каталоги в Nginx
- Полное руководство по защите, укреплению и повышению производительности Nginx
- Настройка HTTPS с помощью SSL-сертификата Let’s Encrypt для Nginx
 В этом руководстве мы показали, как реализовать базовую HTTP-аутентификацию на веб-сервере Nginx HTTP. Чтобы задать любые вопросы, воспользуйтесь формой обратной связи ниже.
 Чтобы задать любые вопросы, воспользуйтесь формой обратной связи ниже.
Если вы цените то, что мы делаем здесь, на TecMint, вам следует принять во внимание:
TecMint — это самый быстрорастущий и пользующийся наибольшим доверием сайт сообщества, где можно найти любые статьи, руководства и книги по Linux в Интернете.Миллионы людей посещают TecMint! для поиска или просмотра тысяч опубликованных статей доступны БЕСПЛАТНО для всех.
Если вам нравится то, что вы читаете, пожалуйста, купите нам кофе (или 2) в знак признательности.
Мы благодарны за вашу бесконечную поддержку.
Как настроить HTTP-аутентификацию (базовую) с Nginx в Ubuntu 16.04
 Ограничение частей веб-приложения или каталогов на веб-сервере небольшой группой доверенных пользователей может значительно повысить безопасность веб-сайта или веб-приложения.Большинство веб-приложений предоставляют свои собственные методы аутентификации на основе форм, однако мы также можем использовать встроенные возможности HTTP-аутентификации веб-сервера, когда аутентификация по форме не реализована или недостаточна.
В этом практическом руководстве мы будем защищать ресурсы на веб-сервере Nginx, работающем в Ubuntu 16.04. Дополнительные советы по укреплению Nginx можно найти в нашей серии статей по укреплению Nginx, состоящей из двух частей.
Начало работы
Для начала вам понадобится Ubuntu 16.04 серверная среда, а также установлен Nginx.
Если вы еще не установили Nginx, вы можете сделать это, выполнив следующие две команды.
sudo apt update sudo apt установить nginx
Чтобы убедиться, что Nginx установлен и запущен, выполните следующую команду. Он должен вернуть что-то похожее на вывод ниже.
sudo service nginx status -> ● nginx.service - высокопроизводительный веб-сервер и обратный прокси-сервер. Загружен: загружен (/ lib / systemd / system / nginx.служба; включено; предустановка поставщика: включена) Активен: активен (работает) с среды 2016-08-03 09:42:19 UTC; 2мин 38с назад Основной PID: 12947 (nginx) CGroup: /system.slice/nginx.service ├─12947 nginx: главный процесс / usr / sbin / nginx -g демон включен; master_process на ├─12948 nginx: рабочий процесс └─12949 nginx: рабочий процесс 03 августа, 09:42:19 ubuntu-xenial systemd [1]: Запуск высокопроизводительного веб-сервера и обратного прокси-сервера ... 03 августа, 09:42:19 ubuntu-xenial systemd [1]: запущен Высокопроизводительный веб-сервер и обратный прокси-сервер.
Создание файла паролей
Чтобы настроить HTTP-аутентификацию с помощью Nginx, нам нужно сохранить комбинацию имен пользователей и хешированных паролей в файле. Чтобы сгенерировать этот файл, мы можем использовать OpenSSL (который уже должен быть автоматически установлен в вашей системе).
  Heads up  — Если вы переносите существующую установку HTTP-сервера Apache на Nginx, вы обычно можете сохранить один и тот же файл, поскольку Nginx и HTTP-сервер Apache используют один и тот же формат пароля (APR1).Вы также можете использовать специальную утилиту  htpasswd  из пакета  apache2-utils , если вы предпочитаете ее OpenSSL.
 Мы начнем с создания файла с именем  .htpasswd  в  / etc / nginx , который является каталогом конфигурации Nginx по умолчанию для хранения наших комбинаций имени пользователя и пароля.
 Вы можете добавить имена пользователей в  .htpasswd , выполнив следующую команду. Мы выбрали имя пользователя  alice , разумеется, измените его в соответствии со своими требованиями.
sudo bash -c "echo -n 'alice:' >> /etc/nginx/.htpasswd"
Затем нам нужно будет добавить хешированный пароль только что созданному пользователю, выполнив следующую команду. Вам будет предложено ввести пароль, и вам будет предложено подтвердить этот пароль еще раз.
sudo bash -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd" -> Пароль: Проверка - Пароль:
 Этот процесс можно повторять столько раз, сколько необходимо для добавления дополнительных пользователей.Чтобы увидеть всех пользователей и их хешированные пароли, вы можете просто указать файл  .. htpasswd
 htpasswd 
кот /etc/nginx/.htpasswd -> Алиса: $ apr1 $ rxVhn96T $ nm0 / ZD4J0w9xv6rDvYQ36 /
Настройка HTTP-аутентификации Nginx
Предупреждение — При HTTP / базовой аутентификации учетные данные не зашифрованы, , поскольку они передаются между клиентом и сервером. Следовательно, небезопасно использовать HTTP-аутентификацию , если соединение не зашифровано с помощью TLS .
 После создания файла  .htpasswd  мы можем настроить Nginx для просмотра этого файла перед обслуживанием содержимого в определенном каталоге.
 Мы будем настраивать конфигурацию сайта  по умолчанию , поскольку она устанавливается через пакет Ubuntu Nginx. Если вы установили Nginx из другого пакета или самостоятельно скомпилировали его из исходного кода, путь ниже может быть другим.
судо нано / и т. Д. / Nginx / сайты-включены / по умолчанию
 Прежде чем что-либо ограничивать, вам нужно решить, что вы хотите ограничить. Nginx здесь очень гибкий и позволяет ограничить доступ ко всему серверу (следовательно, ваша конфигурация должна находиться в блоке сервера конфигурации) или в определенном месте (следовательно, ваша конфигурация должна находиться в блоке
 Nginx здесь очень гибкий и позволяет ограничить доступ ко всему серверу (следовательно, ваша конфигурация должна находиться в блоке сервера конфигурации) или в определенном месте (следовательно, ваша конфигурация должна находиться в блоке  location  конфигурации).
Мы будем ограничивать каталог с именем private, который находится в корне сервера. Мы хотим, чтобы остальная часть сервера работала нормально и была доступна для всех пользователей.
 Чтобы добиться этого, мы будем использовать директиву Nginx  auth_basic , чтобы обеспечить соблюдение этого ограничения.Нам нужно будет указать  имя области , которое будет отображаться пользователю, пытающемуся пройти аутентификацию. Мы будем использовать директиву  auth_basic_user_file , чтобы направить Nginx в файл  .htpasswd , который мы создали ранее.
  сервер {
слушаем 80 default_server;
слушать [::]: 80 default_server;
корень / вар / www / html;
индекс index. html index.htm index.nginx-debian.html;
server_name localhost;
место расположения / {
try_files $ uri $ uri / = 404;
}
location / private {
try_files $ uri $ uri / = 404;
auth_basic «Зона ограниченного доступа»;
auth_basic_user_file / etc / nginx /.htpasswd;
}
}
 html index.htm index.nginx-debian.html;
server_name localhost;
место расположения / {
try_files $ uri $ uri / = 404;
}
location / private {
try_files $ uri $ uri / = 404;
auth_basic «Зона ограниченного доступа»;
auth_basic_user_file / etc / nginx /.htpasswd;
}
}
  После сохранения и закрытия файла нам нужно перезапустить демон Nginx, чтобы наши изменения вступили в силу.
sudo service nginx перезапуск
Вот и все! Теперь все, что находится в частном каталоге, теперь должно требовать HTTP-аутентификации, прежде чем веб-сервер обслужит клиента с запрошенным ресурсом.
Тестирование
Чтобы убедиться, что мы все реализовали правильно, лучше всего протестировать нашу конфигурацию.Мы можем просто использовать для этого веб-браузер, пытаясь перейти на нужную страницу.
Страница с ограничениями отображается только в том случае, если введены правильные учетные данные.
 В противном случае мы получаем ответ HTTP 401, сообщающий нам, что нам требуется авторизация для просмотра запрошенного ресурса.
 Получайте последнюю информацию о веб-безопасности 
 в свой почтовый ящик каждую неделю.
АВТОР
Ян Маскат
Разработчики и технические агенты Acunetix регулярно вносят вклад в блог.Все разработчики Acunetix имеют многолетний опыт работы в сфере веб-безопасности.
Использование nginx для добавления аутентификации в любое приложение
 Вы когда-нибудь обнаруживали, что хотите поместить приложение за формой входа в систему, но боитесь написать весь этот код для работы с OAuth 2.0 или паролями? В этом руководстве я покажу вам, как использовать модуль nginx  auth_request  для защиты любого приложения, работающего за вашим сервером nginx, с помощью OAuth 2.0, без написания кода! Vouch, микросервис, написанный на Go, обрабатывает танец OAuth для любого количества различных провайдеров аутентификации, поэтому вам не придется это делать.
Совет: Если вы хотите добавить логин (и авторизацию на основе URL-адреса) к большему количеству приложений через пользовательский интерфейс, интегрировать их с более сложными приложениями, такими как Oracle или SAP, или заменить устаревшую систему единого входа на месте, проверьте шлюз Okta Access. .
Зачем нужна аутентификация на веб-сервере?
Представьте, что вы используете nginx для запуска небольшой частной вики для своей команды.Сначала вы, вероятно, начнете с добавления учетной записи пользователя вики для каждого человека. Это не так уж и плохо — добавлять новые аккаунты для новых сотрудников и удалять их, когда они уходят.
 Несколько месяцев спустя, когда ваша команда и компания начинают расти, вы добавляете программное обеспечение для мониторинга серверов, и вы хотите поместить его за логином, чтобы только ваша компания могла его просматривать. Поскольку это не очень сложное программное обеспечение, самый простой способ сделать это — создать единый пароль для всех в файле  .htpasswd  и поделиться этим пользователем с офисом.
Проходит еще месяц, и вы добавляете систему непрерывной интеграции, которая идет с аутентификацией GitHub в качестве опции, что кажется разумным, поскольку у большей части вашей команды уже есть учетные записи GitHub.
На этом этапе, когда кто-то новый присоединяется, вы должны создать для него вики-аккаунт, добавить его в организацию GitHub и дать им общий пароль для другой системы. Когда кто-то уходит, вы можете удалить его вики-аккаунт и удалить его из GitHub, но давайте посмотрим правде в глаза, вы, вероятно, не будете менять общий пароль какое-то время, так как необходимость снова распространять его среди всех раздражает.
Конечно, должен быть лучший способ интегрировать все эти системы для использования общей системы общего входа! Проблема в том, что вики написана на PHP, система мониторинга сервера просто публикует папку статического HTML, а система CI написана на Ruby, писать которую может только один человек в вашей команде.
Если бы веб-сервер мог обрабатывать аутентификацию пользователей, то каждой бэкэнд-системе не нужно было бы беспокоиться об этом, поскольку единственные запросы, которые могли бы пройти, уже были бы аутентифицированы!
Использование модуля nginx auth_request
 Введите модуль nginx  auth_request .
 Этот модуль поставляется с nginx, но требует включения при компиляции nginx. Когда вы загружаете исходный код nginx и компилируете, просто включите флаг  --with-http_auth_request_module  вместе с любыми другими, которые вы используете.
 Модуль  auth_request  находится между Интернетом и вашим внутренним сервером, на который nginx передает запросы, и каждый раз, когда поступает запрос, он сначала перенаправляет запрос на отдельный сервер, чтобы проверить, аутентифицирован ли пользователь, и использует ответ HTTP. чтобы решить, разрешить ли передачу запроса на серверную часть.
 На этой диаграмме показан запрос, который поступает для имени сервера  stats.avocado.lol . Сначала nginx запускает подзапрос на  login.avocado.lol  (1), и если ответ (2) на этот запрос возвращает HTTP 200, он затем продолжает пересылку запроса на бэкэнд  stats.avocado. ржунимагу. 
Выбор прокси для аутентификации
 Поскольку модуль nginx  auth_request  не имеет понятия о пользователях или способах аутентификации кого-либо, нам нужно что-то еще в этом миксе, которое действительно может обрабатывать вход пользователей в систему.На диаграмме выше это проиллюстрировано именем сервера  login.avocado.lol .
Этот сервер должен обрабатывать HTTP-запрос и возвращать HTTP 200 или 401 в зависимости от того, вошел ли пользователь в систему. Если пользователь не вошел в систему, ему необходимо знать, как заставить их войти в систему и установить cookie сеанса.
Для этого мы воспользуемся проектом с открытым исходным кодом Vouch. Vouch написан на Go, поэтому его очень легко развернуть. Все можно настроить с помощью одного файла YAML.Vouch можно настроить для аутентификации пользователей через различные серверные части OAuth и OpenID Connect, такие как GitHub, Google, Okta или любые другие настраиваемые серверы.
Мы вернемся к настройке Vouch через несколько минут, а пока давайте продолжим настройку защищенного сервера в nginx.
Настройте защищенный хост nginx
 Начиная с типичного серверного блока nginx, вам просто нужно добавить пару строк, чтобы включить модуль  auth_request . Вот пример серверного блока, который должен быть похож на вашу собственную конфигурацию.В этом примере просто обслуживается папка со статическими HTML-файлами, но та же идея применима независимо от того, передаете ли вы запрос в серверную часть fastcgi или используете  proxy_pass .
  сервер {
  прослушать 443 ssl http2;
  имя_сервера stats.avocado.lol;
  ssl_certificate /etc/letsencrypt/live/avocado.lol/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/avocado.lol/privkey.pem;
  корень /web/sites/stats.avocado.lol;
  index index.html;
}
   Добавьте следующее к существующему блоку  server :
  # Любой запрос к этому серверу сначала будет отправлен на этот URL
auth_request / vouch-validate;
location = / vouch-validate {
  # Это адрес, по которому Вач будет слушать
  proxy_pass http: // 127.0.0.1: 9090 / проверить;
  proxy_pass_request_body off; # не нужно отправлять тело POST
  proxy_set_header Content-Length "";
  proxy_set_header X-Real-IP $ remote_addr;
  proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
  proxy_set_header Схема X-Forwarded-Proto $;
  # эти возвращаемые значения передаются вызову @ error401
  auth_request_set $ auth_resp_jwt $ upstream_http_x_vouch_jwt;
  auth_request_set $ auth_resp_err $ upstream_http_x_vouch_err;
  auth_request_set $ auth_resp_failcount $ upstream_http_x_vouch_failcount;
}
error_page 401 = @ error401;
# Если пользователь не вошел в систему, перенаправьте его на URL-адрес входа в Vouch
location @ error401 {
  вернуть 302 https: // логин.avocado.lol/login?url=https://$http_host$request_uri&vouch-failcount=$auth_resp_failcount&X-Vouch-Token=$auth_resp_jwt&error=$auth_resp_err;
}
   Давайте посмотрим, что здесь происходит. Первая строка,  auth_request / vouch-validate;  — вот что обеспечивает этот поток. Это сообщает модулю  auth_request  сначала отправлять любой запрос по этому URL-адресу, прежде чем решить, разрешено ли ему продолжить работу с внутренним сервером.
 Блок  location = / vouch-validate  захватывает этот URL и передает его на сервер Vouch, который будет прослушивать порт 9090.Нам не нужно отправлять тело POST в Vouch, поскольку все, что нас действительно волнует, — это файлы cookie.
 Строка  error_page 401 = @ error401;  сообщает nginx, что делать, если Vouch возвращает ответ HTTP 401, который должен передать его в блок, определенный как  location @ error401 . Этот блок перенаправит браузер пользователя на URL-адрес входа Vouch, который запустит поток к реальному серверу аутентификации.
Настроить серверный блок для поручения
 Затем настройте новый блок сервера для Vouch, чтобы он имел общедоступный URL-адрес, например  https: // login.avocado.lol . Все, что для этого нужно, — это проксировать запрос на внутренний Vouch-сервер.
  сервер {
  слушайте 443 ssl;
  имя_сервера login.avocado.lol;
  ssl_certificate /etc/letsencrypt/live/login.avocado.lol/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/login.avocado.lol/privkey.pem;
  # Прокси для вашего экземпляра Vouch
  место расположения / {
    proxy_set_header Host login.avocado.lol;
    proxy_set_header X-Forwarded-Proto https;
    proxy_pass http: //127.0.0.1: 9090;
  }
}
  Настройка и развертывание Vouch
Вам необходимо скачать Vouch и скомпилировать двоичный файл Go для своей платформы. Вы можете следовать инструкциям в файле README проекта.
После того, как у вас есть двоичный файл, вам нужно будет создать файл конфигурации, чтобы определить способ аутентификации пользователей Vouch.
 Скопируйте  config / config.yml_example  в  config / config.yml  и прочтите там настройки. Большинство значений по умолчанию подойдут, но вам нужно создать свою собственную секретную строку JWT и заменить значение заполнителя  your_random_string .
 Самый простой способ настроить Vouch — разрешить любому пользователю, который может пройти аутентификацию на сервере OAuth, получить доступ к бэкэнду. Это отлично работает, если вы используете частный сервер OAuth, например Okta, для управления пользователями. Идите вперед и установите  allowAllUsers: true , чтобы включить это поведение, и закомментируйте  domains:  chunk.
Вам нужно выбрать поставщика OAuth 2.0, который будет использоваться для фактической аутентификации пользователей. В этом примере мы будем использовать Okta, поскольку это самый простой способ получить полный сервер OAuth / OpenID Connect и иметь возможность управлять всеми своими учетными записями пользователей с единой панели управления.Прежде чем вы сможете завершить заполнение файла конфигурации, вам необходимо зарегистрировать учетную запись разработчика Okta на сайте developer.okta.com/. После создания учетной записи щелкните Applications в верхнем меню и создайте новое приложение. Выберите Web в качестве платформы приложения.
 На следующем экране вам нужно настроить базовый URI   и  URI перенаправления входа  в соответствии с настройками вашего собственного сервера. URI перенаправления Vouch оканчивается на  / auth , поэтому ваша конфигурация должна выглядеть, как на скриншоте ниже.
Как только вы это сделаете, Okta предоставит вам идентификатор клиента и секрет, которые вам нужно будет включить в файл конфигурации.
  config.yml 
  oauth:
  провайдер: oidc
  client_id: {yourClientID}
  client_secret: {yourClientSecret}
  auth_url: https: // {yourOktaDomain} / oauth3 / default / v1 / authorize
  token_url: https: // {yourOktaDomain} / oauth3 / default / v1 / token
  user_info_url: https: // {yourOktaDomain} / oauth3 / default / v1 / userinfo
  объемы:
    - openid
    - электронное письмо
  # Установите URL-адрес обратного вызова для домена, на котором работает Vouch
  callback_url: https: // логин.avocado.lol/auth
   Теперь вы можете запустить Vouch! Он будет прослушивать порт 9090, на котором вы настроили nginx для отправки проверок  auth_request , а также для обслуживания трафика с  login.avocado.lol .
 Когда вы перезагружаете конфигурацию nginx, все запросы к  stats.avocado.lol  потребуют, чтобы вы сначала авторизовались через Okta!
Бонус: Кто вошел в систему?
Если вы размещаете динамическое веб-приложение за nginx и вас волнует не только , смог ли кто-то войти в систему , но и , кто они , есть еще один прием, который мы можем использовать.
По умолчанию Vouch извлекает идентификатор пользователя через OpenID Connect (или GitHub или Google, если вы настроили их в качестве поставщиков аутентификации) и включает этот идентификатор пользователя в HTTP-заголовок, который передается обратно на главный сервер.
 В главном серверном блоке чуть ниже строки  auth_request / vouch-validate; , который включает модуль  auth_request , добавьте следующее:
  auth_request_set $ auth_user $ upstream_http_x_vouch_user;
   Это возьмет заголовок HTTP, который устанавливает Vouch,  X-Vouch-User , и назначит его переменной nginx  $ auth_user .Затем, в зависимости от того, используете ли вы fastcgi или proxy_pass, включите одну из двух строк ниже в свой серверный блок:
  fastcgi_param REMOTE_USER $ auth_user;
proxy_set_header Удаленный пользователь $ auth_user;
   Они установят заголовок HTTP со значением  $ auth_user , который ваш внутренний сервер может прочитать, чтобы узнать, кто вошел в систему. Например, в PHP вы можете получить доступ к этим данным, используя:
   Php
echo "Привет,". $ _SERVER ['REMOTE_USER'].'!';
  Теперь вы можете быть уверены, что к вашему внутреннему приложению могут получить доступ только авторизованные пользователи!
Узнайте больше об OAuth 2.0 и безопасном управлении пользователями с помощью Okta
Для получения дополнительной информации и руководств по OAuth 2.0 ознакомьтесь с некоторыми другими сообщениями в нашем блоге!
Как всегда, мы будем рады услышать от вас об этом посте или о чем-нибудь еще! Напишите нам в комментариях или на Twitter @oktadev!
История изменений:
-  17 мая 2019 г .
 htaccess; # задаём файл basic авторизации
    auth_basic Auth; # включаем basic авторизацию
    echo -n OK; # пользователь авторизован
}
 htaccess; # задаём файл basic авторизации
    auth_basic Auth; # включаем basic авторизацию
    echo -n OK; # пользователь авторизован
} ~ /jenkins/ {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    if (!-f $request_filename) {
        proxy_pass http://app_server;
        break;
    }
    auth_basic "[....] Please confirm identity...";
    auth_basic_user_file /etc/nginx/.htpasswd;
}
 ~ /jenkins/ {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    if (!-f $request_filename) {
        proxy_pass http://app_server;
        break;
    }
    auth_basic "[....] Please confirm identity...";
    auth_basic_user_file /etc/nginx/.htpasswd;
}
 Reason:
Invalid password/token for user: _____
Powered by Jetty://
  Reason:
Invalid password/token for user: _____
Powered by Jetty://
 exe не распознается как внутренняя или внешняя…
 exe не распознается как внутренняя или внешняя…
 Имя области будет показано в диалоговом окне имени пользователя / пароля при запросе учетных данных:
 Имя области будет показано в диалоговом окне имени пользователя / пароля при запросе учетных данных: Если вы установите для директивы значение
 Если вы установите для директивы значение  htpasswd;
 htpasswd;
  ..
 ..
  d/.htpasswd;
…… ...
}
 d/.htpasswd;
…… ...
}
  .
}
location  / admin /  {
auth_basic «Ограниченный доступ!»;
    auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
}
location / public / {
auth_basic off; # отключает базовую HTTP-аутентификацию для этого блока
}
……..
}
 .
}
location  / admin /  {
auth_basic «Ограниченный доступ!»;
    auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
}
location / public / {
auth_basic off; # отключает базовую HTTP-аутентификацию для этого блока
}
……..
}
  slice/nginx.service
├─12947 nginx: главный процесс / usr / sbin / nginx -g демон включен; master_process на
├─12948 nginx: рабочий процесс
└─12949 nginx: рабочий процесс
03 августа, 09:42:19 ubuntu-xenial systemd [1]: Запуск высокопроизводительного веб-сервера и обратного прокси-сервера ...
03 августа, 09:42:19 ubuntu-xenial systemd [1]: запущен Высокопроизводительный веб-сервер и обратный прокси-сервер.
 slice/nginx.service
├─12947 nginx: главный процесс / usr / sbin / nginx -g демон включен; master_process на
├─12948 nginx: рабочий процесс
└─12949 nginx: рабочий процесс
03 августа, 09:42:19 ubuntu-xenial systemd [1]: Запуск высокопроизводительного веб-сервера и обратного прокси-сервера ...
03 августа, 09:42:19 ubuntu-xenial systemd [1]: запущен Высокопроизводительный веб-сервер и обратный прокси-сервер. html index.htm index.nginx-debian.html;
server_name localhost;
место расположения / {
try_files $ uri $ uri / = 404;
}
location / private {
try_files $ uri $ uri / = 404;
auth_basic «Зона ограниченного доступа»;
auth_basic_user_file / etc / nginx /.htpasswd;
}
}
 html index.htm index.nginx-debian.html;
server_name localhost;
место расположения / {
try_files $ uri $ uri / = 404;
}
location / private {
try_files $ uri $ uri / = 404;
auth_basic «Зона ограниченного доступа»;
auth_basic_user_file / etc / nginx /.htpasswd;
}
}