у нас есть приложение, состоящее из нескольких частей. Каждая часть работает на своем поддомене (сайт 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.
Вы можете попробовать использовать модуль auth_basic на http уровень контекста, чтобы применить его к каждому виртуальному хосту:
http {
auth_basic "Administrator’s Area";
auth_basic_user_file conf/htpasswd;
server { ... }
server { ... }
server { ... }
}