#nginx
#nginx
Вопрос:
Со временем я использовал несколько обратных прокси, но NGinx поразил меня своим поведением. Недавно мне пришлось использовать NGinx после нескольких лет использования HAProxy (как K8s Ingress), и я застрял без решения.
С самого начала поведение было другим, когда сеанс был потерян. HTTP 401 сообщит клиенту (одностраничному приложению JavaScript) сообщить пользователю, что сеанс был потерян, и он / она должен снова войти в систему. Вместо отправки 401 в браузер, он отправляет 307 на страницу входа с неправильным глаголом (POST), поскольку запрос, который завершается ошибкой с 401, был запросом POST.
Лучший способ устранения неполадок был бы изолированным, поэтому я установил версию из репозитория (Linux Mint 20) и зарегистрировал простую запись обратного прокси-сервера в /etc/nginx/conf.d
server {
listen 80;
location / {
proxy_pass http://localhost:8080;
}
}
К сожалению (или к счастью) проблема проявилась сразу: как только я удалил файлы cookie, и сервер отправил 401 «Пожалуйста, войдите», браузер показывает 307 в запросе, который не удался с 401.
Ожидаемое поведение:
- Браузер отправляет «POST / ping»
- Браузер получает «401 on / ping»
Текущее поведение:
- Браузер отправляет «POST / ping»
- Браузер получает «307 / auth», а затем выполняет /auth с POST (не уверен, откуда он знает, что /auth — это страница входа)
Есть идеи, как отключить это поведение?
Комментарии:
1. Хорошо, большую часть времени после публикации вопроса я его получил … Мы используем некоторые пользовательские, нестандартные заголовки, начинающиеся с «__», для идентификации AJAX-запросов и фоновых запросов — и все они не передаются на сервер, что вынуждает сервер отправлять перенаправления на страницы. Я знаю, мы должны использовать префикс «X-«, но до тех пор, есть идеи, как я могу отключить проверку заголовка?
2. Ну, это не имеет значения, изменил заголовки, они все равно не соответствовали требованиям … урок усвоен, никогда не нарушайте стандарты… это может сработать какое-то время, но однажды какой-нибудь человек посередине не согласится 🙂
3. По сути, приложение отправляло 307, поскольку заголовок «Я Ajax-запрос» не доходил до сервера, чтобы ответить 307. Обычная страница получает «перейти на страницу входа в систему».