Предисловие
В основной части вопроса проблема описана некорректно. Правильное объяснение описано в блоке UPDATE. Старый текст сохранен для истории.
Мой проект состоит из двух частей: backend и frontend. Следующие местоположения отвечают за перенаправление запросов:
location / {
root /opt/site/;
try_files $uri $uri/ /index.html;
}
location /adminpanel {
proxy_pass http://192.168.1.4:4567;
}
location /api {
proxy_pass http://192.168.1.4:4567;
}
Задача состоит в том, чтобы перенаправить пользователей на url /auth
, если в $remote_user header
нет логина пользователя. Я попытался сделать такую конструкцию: в http я добавил:
map $remote_user $var {
default 0;
"" 1;
}
А в location /
добавил:
if ($var) {
return 301 http://$server_name/auth;
}
При попытке зайти на сайт я получаю ошибка в моем браузере:
ERR_TOO_MANY_REDIRECTS
Как исправить мой файл конфигурации?
Заранее спасибо !!!
ОБНОВЛЕНИЕ
Моя задача настроить аутентификацию Kerberos на nginx. Бэкэнд - django. Идея состоит в том, что когда делается запрос к api, nginx должен выполнять аутентификацию Kerberos. Но если пользователь не находится в домене, тогда должно произойти перенаправление на страницу авторизации /auth
, чтобы пользователь мог пройти аутентификацию под учетной записью, зарегистрированной в django CMS.
Аутентификация пользователей домена успешно. Но есть проблема с пользователями не из домена. Когда вы открываете страницу сайта, которая выполняет вызов api, появляется окно аутентификации basi c. Я использую директиву auth_gss_allow_basic_fallback off
, но это не помогает.
Как мне отключить это и настроить перенаправление на /auth
?
Мой файл конфигурации (я не указываю такие параметры, как gzip, заголовки и т. д. c.):
server {
listen 80;
server_name srv-01.example.com;
proxy_set_header remote-user $remote_user;
location / {
root /opt/site/;
try_files $uri $uri/ /index.html;
}
location /adminpanel {
proxy_pass http://192.168.1.4:4567;
}
location /api {
proxy_pass http://192.168.1.4:4567;
auth_gss on;
auth_gss_realm EXAMPLE.COM;
auth_gss_keytab /etc/krb5.keytab;
auth_gss_service_name HTTP/srv-01.example.com;
auth_gss_allow_basic_fallback off;
}}