Есть ли способ разрешить доступ к каталогу, только если присутствует определенный настраиваемый заголовок и значение совпадает? С apache я делал это с SetEnvIf. Как я мог это сделать с помощью nginx?
В основном у меня есть dev-сервер, к которому должен иметь доступ только я, но у меня есть динамический IP-адрес, и мне приходится каждый день менять конфигурационный файл. С apache я просто настроил свой браузер на отправку настраиваемого заголовка, который действовал как пароль доступа, и apache разрешил бы доступ, если это значение заголовка было правильным.
Я много исследовал, чтобы решить простую проблему: разрешить proxy_pass только в том случае, если запрос имеет определенный токен в заголовке. Я перепробовал все ответы здесь, и ничего не помогло, как мне понравилось. Мое окончательное решение:
location /api {
proxy_http_version 1.1;
if ($http_authorization != "Bearer 1234") {
return 401;
}
proxy_pass http://app:3000/;
}
Ссылки:
https://stackoverflow.com/questions/45734332/nginx-not-equal-to
https://stackoverflow.com/questions/12431496/nginx-read-custom-header-from-upstream-server
Точное совпадение местоположения Nginx не вызывает сомнений
https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
Здесь дан ответ на ваш актуальный вопрос:
https://stackoverflow.com/questions/18970620/nginx-reject-request-if-header-is-not-present-or-wrong
Сказав это, почему бы не использовать базовую аутентификацию? Это делает его паролем, а не действует как пароль.
http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html