Краткая заметка по настройке авторизации в Nginx. Кейс использую в случае, когда пользователям в офисе (т.е. сотрудникам компании) сайт должен быть доступен без каких-либо ограничений, а внешним пользователям необходимо авторизоваться посредством http basic auth.
На балансировщике в нужном конфигурационном файле:
server {
server_name server_name.ru;
return 301 https://$host$request_uri;
}
map $remote_addr $auth {
default "Access Denied";
10.10.4.1 "off";
}
server {
auth_basic $auth;
auth_basic_user_file /etc/nginx/.htpasswd;
server_name server_name.ru;
listen 443;
...
В вышеописанном случае конструкция map идеально решает задачу: трафик сотрудников компании приходит с адреса 10.10.4.1, для которого авторизация отключается, а для всех остальных по дефолту включена.
Почему меня везде заставляют и учат использовать https вместо http? Это проблема исключительно пользователя. Зашёл без шифрования – значит нужно и работать без него, а не принудительно включать TLS. Сначала заставляют придумывать “сложные” пароли, теперь вот заставляют через https исключительно заходить на сайт. Что дальше? Нужно будет номер банковской карты и cvv код обязательно оставлять, чтобы пустили на сайт и будет это конечно “в целях безопасности”.
Вас никто не заставляет, это best practices и требования заказчиков.
Можете написать ваше личное отношение по этому вопросу. Как вы относитесь к той тенденции, что компании стремятся решать вопросы безопасности (и не только) за пользователя, не спросив его мнения? Примеры я описал выше – принуждение делать сложные пароли, принуждение использовать https и т.п.