У меня есть следующие два блока в моей конфигурации nginx для Kibana. Моя цель - предоставить два уровня доступа: один для доступа к панели инструментов, визуализации и страниц поиска Kibana (для разработчиков), а второй - для доступа к инструментам управления и разработки (для администраторов Elasticsearch).
server {
listen 80;
server_name elk.ops.example.com;
location ~* "(app\/.*\#\/management.*|app\/timelion.*|app\/.*\#\/dev_tools.*)"
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.admin;
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location / {
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.users;
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Когда я запускаю с этой конфигурацией, http://elk.ops.example.com/app/timelion
правильно приводит к 403 Forbidden при доступе неавторизованных пользователей, однако оба http://elk.ops.example.com/app/kibana#/management?_g= ()
и http://elk.ops.example.com/app/kibana # / dev_tools / console? _g = ()
остаются доступными.
Я пробовал все способы фильтра регулярных выражений в первом блоке местоположения, чтобы ограничить эти два пути, но безуспешно. Мне стало ясно, что проблема связана с # в URL-адресе, есть ли что-то особенное в # с nginx, которое вызывает проблемы?
Причина, по которой это не работает, заключается в том, что символ #
никогда не отправляется на сервер. К сожалению, с помощью nginx этого не избежать.