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