421 Misdirected Request via pass_proxy

Maxim Dounin mdounin на mdounin.ru
Пн Ноя 27 03:54:41 UTC 2023


Hello!

On Sun, Nov 26, 2023 at 10:34:34AM +0300, Eugene Prokopiev wrote:

> Здравствуйте!
> 
> Не получается спроксировать repo.clojars.org:
> 
> location /clojars {
>     proxy_pass https://repo.clojars.org;
> }
> 
> curl -v http://localhost/clojars/
> ...
> < HTTP/1.1 421 Misdirected Request
> ...
> <
> Requested host does not match any Subject Alternative Names (SANs) on
> TLS certificate
> [f38588ca7dc3f37ec048583198230295986084302bfd4d5c2d944911bd377a95] in
> use with this connection.
> 
> Visit https://docs.fastly.com/en/guides/common-400-errors#error-421-misdirected-request
> for more information.
> * Connection #0 to host localhost left intact
> 
> Нагуглил в этой же рассылке волшебную директиву proxy_ssl_server_name
> on - но получается совсем странная вещь - на localhost/clojars/ мне
> уже отдают 200, но в теле совсем не тот html, что на оригинальном
> repo.clojars.org
> 
> Как это может быть и чего еще может не хватать?

У вас в конфиге написано:

    proxy_pass https://repo.clojars.org;

То есть проксирование без изменения URI (note: после имени хоста в 
proxy_pass ничего нет).  Соответственно запрос к 
http://localhost/clojars/ будет возвращать то, что в норме 
возвращают по адресу https://repo.clojars.org/clojars/.

Вероятно, вы вместо этого хотели получить то, что в корне 
repo.clojars.org.  Правильная конфигурация для этого будет 
какая-то такая:

location /clojars/ {
    proxy_pass https://repo.clojars.org/;
    proxy_ssl_server_name on;
}

То есть:

- proxy_ssl_server_name, так как Fastly, судя по всему, всегда 
  хочет SNI, в то время как nginx по умолчанию SNI не посылает 
  (см. http://nginx.org/r/proxy_ssl_server_name/ru);

- "location /clojars/" (note: "/" в конце), чтобы в него не 
  попадали запросы вроде /clojars-foobar, а только запросы к 
  /clojars/<что-то> (а запросы к /clojars перенаправлялись на 
  /clojars/, подробнее см. http://nginx.org/r/location/ru);

- и "proxy_pass https://repo.clojars.org/;" (note: "/" в конце),
  чтобы nginx при проксировании менял URI запроса, заменяя 
  "/clojars/" на "/" (см. http://nginx.org/r/proxy_pass/ru).

-- 
Maxim Dounin
http://mdounin.ru/


Подробная информация о списке рассылки nginx-ru