NGinx отправляет 307 вместо 401

#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. Обычная страница получает «перейти на страницу входа в систему».