Как аутентифицируется несколько поддоменов в nginx с одним логином
У нас есть приложение, состоящее из нескольких частей. Каждая часть работает на своем поддомене (сайт nginx). Мы хотели бы скрыть доступ dev env за некоторыми общими аутентификациями, где первый вход в систему на любом из поддоменов предоставит доступ и другим.
Нашей первой идеей было создать прокси-сайт nginx, содержащий все домены, и установить базовую аутентификацию, а затем прокси-соединение. Частично это сработало. Проблема заключается в том, что базовая аутентификация привязана к имени домена, поэтому после входа в один поддомен я должен поставить учетные данные для каждого при первом доступе.
Упрощенный пример конфигурации мы использовали, но не сработали желаемым образом.
server {
listen 443 ssl http2;
server_name paapi-xy.example.com;
access_log /var/www/access_api_443.log;
error_log /var/www/error_api_443.log debug;
ssl_certificate /etc/ssl/example/example.com.chained.crt;
ssl_certificate_key /etc/ssl/example/example.com.key;
ssl_session_timeout 1d;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
root /var/www/html;
location / {
try_files $uri /index.api.html;
}
}
server {
listen 443 ssl http2;
server_name pawww-xy.example.com;
access_log /var/www/access_www_443.log;
error_log /var/www/error_www_443.log debug;
ssl_certificate /etc/ssl/example/example.com.chained.crt;
ssl_certificate_key /etc/ssl/example/example.com.key;
ssl_session_timeout 1d;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
root /var/www/html;
location / {
try_files $uri /index.www.html;
}
}
server {
listen 443 ssl http2;
server_name paapi.example.com pawww.example.com;
access_log /var/www/access_proxy_443.log;
error_log /var/www/error_proxy_443.log debug;
ssl_certificate /etc/ssl/example/example.com.chained.crt;
ssl_certificate_key /etc/ssl/example/example.com.key;
ssl_session_timeout 1d;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
root /var/www/html;
set $xheader "someignoredvalue";
location / {
satisfy any;
auth_basic example_auth;
auth_basic_user_file /var/www/.htpasswd;
include proxy_params;
if ($host = paapi.example.com) {
proxy_pass https://paapi-xy.example.com;
set $xheader paapi-xy.example.com;
}
if ($host = pawww.example.com) {
proxy_pass https://pawww-xy.example.com;
set $xheader pawww-xy.example.com;
}
proxy_set_header Host $xheader;
}
}
Есть ли у кого-нибудь еще идеи, как это сделать, вроде SingleSignOn.
1 ответ
Вы можете попробовать использовать модуль auth_basic на уровне контекста http, чтобы применить его к каждому виртуальному хосту:
http {
auth_basic "Administrator’s Area";
auth_basic_user_file conf/htpasswd;
server { ... }
server { ... }
server { ... }
}