Re: Как обработать редирект и проксировать результат приложению?

2020-06-29 Пенетрантность Александр Карабанов
Не проверял. GET работает, как ожидается. Для решения моей проблемы этого
достаточно.




пн, 29 июн. 2020 г. в 10:48, Илья Шипицин :

> я примерно такое имел в виду.
>
> а вот расскажите, как будет работать, если на POST запрос будет 301, вы в
> @handle_redirect отправите тоже POST ?
>
> пн, 29 июн. 2020 г. в 12:03, Александр Карабанов  >:
>
>> Вот такое решение нашёл:
>>
>> https://serverfault.com/questions/423265/how-to-follow-http-redirects-inside-nginx
>>
>> server {
>> ...
>>
>> location / {
>> proxy_pass http://backend;
>> # You may need to uncomment the following line if your redirects are 
>> relative, e.g. /foo/bar#proxy_redirect / /;
>> proxy_intercept_errors on;
>> error_page 301 302 307 = @handle_redirect;
>> }
>>
>> location @handle_redirect {
>> set $saved_redirect_location '$upstream_http_location';
>> proxy_pass $saved_redirect_location;
>> }}
>>
>>
>> пт, 26 июн. 2020 г. в 15:57, Илья Шипицин :
>>
>>> это не во всех случаях можно сделать корректно.
>>>
>>> например, 301 по RFC можно отвечать только на GET. а если сервер ответил
>>> 301 на POST, какой запрос надо отправить на новый адрес, тоже POST ? или
>>> GET ?
>>> вот именно этот выбор и доносится до клиента, когда 301 транслируется
>>> один в один.
>>>
>>> теоретически, вы можете накостылить обработчик 301-ошибки, назначить его
>>> на локейшен, и в локейшене сделать proxy_pass
>>> но это очень скользкая дорожка
>>>
>>> пт, 26 июн. 2020 г. в 17:41, Александр Карабанов <
>>> zend.karaba...@gmail.com>:
>>>
 Здравствуйте.

 Приложению запрещено самостоятельно открывать соединения с внешним
 миром. Приложение отправляет запрос на proxykipalive.lan, а Nginx
 проксирует этот запрос на целевой хост (это сделано, чтобы переиспользовать
 соединение за счёт keepalive и не открывать новое соединение на каждый
 запрос от приложения).
 Возникла ситуация, когда целевой хост стал отвечать 301 редиректом,
 естественно приложение, получив вместо ожидаемого контента, 301 редирект
 сломалось.
 Есть ли способ заставить Nginx обработать редирект самостоятельно и
 отдать приложению готовый контент?
 --
 С уважением,
 Александр Карабанов
 ___
 nginx-ru mailing list
 nginx-ru@nginx.org
 http://mailman.nginx.org/mailman/listinfo/nginx-ru
>>>
>>> ___
>>> nginx-ru mailing list
>>> nginx-ru@nginx.org
>>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>>
>>
>>
>> --
>> С уважением,
>> Александр Карабанов
>> ___
>> nginx-ru mailing list
>> nginx-ru@nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru



-- 
С уважением,
Александр Карабанов
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Как обработать редирект и проксировать результат приложению?

2020-06-29 Пенетрантность Илья Шипицин
я примерно такое имел в виду.

а вот расскажите, как будет работать, если на POST запрос будет 301, вы в
@handle_redirect отправите тоже POST ?

пн, 29 июн. 2020 г. в 12:03, Александр Карабанов :

> Вот такое решение нашёл:
>
> https://serverfault.com/questions/423265/how-to-follow-http-redirects-inside-nginx
>
> server {
> ...
>
> location / {
> proxy_pass http://backend;
> # You may need to uncomment the following line if your redirects are 
> relative, e.g. /foo/bar#proxy_redirect / /;
> proxy_intercept_errors on;
> error_page 301 302 307 = @handle_redirect;
> }
>
> location @handle_redirect {
> set $saved_redirect_location '$upstream_http_location';
> proxy_pass $saved_redirect_location;
> }}
>
>
> пт, 26 июн. 2020 г. в 15:57, Илья Шипицин :
>
>> это не во всех случаях можно сделать корректно.
>>
>> например, 301 по RFC можно отвечать только на GET. а если сервер ответил
>> 301 на POST, какой запрос надо отправить на новый адрес, тоже POST ? или
>> GET ?
>> вот именно этот выбор и доносится до клиента, когда 301 транслируется
>> один в один.
>>
>> теоретически, вы можете накостылить обработчик 301-ошибки, назначить его
>> на локейшен, и в локейшене сделать proxy_pass
>> но это очень скользкая дорожка
>>
>> пт, 26 июн. 2020 г. в 17:41, Александр Карабанов <
>> zend.karaba...@gmail.com>:
>>
>>> Здравствуйте.
>>>
>>> Приложению запрещено самостоятельно открывать соединения с внешним
>>> миром. Приложение отправляет запрос на proxykipalive.lan, а Nginx
>>> проксирует этот запрос на целевой хост (это сделано, чтобы переиспользовать
>>> соединение за счёт keepalive и не открывать новое соединение на каждый
>>> запрос от приложения).
>>> Возникла ситуация, когда целевой хост стал отвечать 301 редиректом,
>>> естественно приложение, получив вместо ожидаемого контента, 301 редирект
>>> сломалось.
>>> Есть ли способ заставить Nginx обработать редирект самостоятельно и
>>> отдать приложению готовый контент?
>>> --
>>> С уважением,
>>> Александр Карабанов
>>> ___
>>> nginx-ru mailing list
>>> nginx-ru@nginx.org
>>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>>
>> ___
>> nginx-ru mailing list
>> nginx-ru@nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
>
>
> --
> С уважением,
> Александр Карабанов
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Как обработать редирект и проксировать результат приложению?

2020-06-29 Пенетрантность Александр Карабанов
Вот такое решение нашёл:
https://serverfault.com/questions/423265/how-to-follow-http-redirects-inside-nginx

server {
...

location / {
proxy_pass http://backend;
# You may need to uncomment the following line if your
redirects are relative, e.g. /foo/bar#proxy_redirect / /;
  proxy_intercept_errors on;
error_page 301 302 307 = @handle_redirect;
}

location @handle_redirect {
set $saved_redirect_location '$upstream_http_location';
proxy_pass $saved_redirect_location;
}}


пт, 26 июн. 2020 г. в 15:57, Илья Шипицин :

> это не во всех случаях можно сделать корректно.
>
> например, 301 по RFC можно отвечать только на GET. а если сервер ответил
> 301 на POST, какой запрос надо отправить на новый адрес, тоже POST ? или
> GET ?
> вот именно этот выбор и доносится до клиента, когда 301 транслируется один
> в один.
>
> теоретически, вы можете накостылить обработчик 301-ошибки, назначить его
> на локейшен, и в локейшене сделать proxy_pass
> но это очень скользкая дорожка
>
> пт, 26 июн. 2020 г. в 17:41, Александр Карабанов  >:
>
>> Здравствуйте.
>>
>> Приложению запрещено самостоятельно открывать соединения с внешним миром.
>> Приложение отправляет запрос на proxykipalive.lan, а Nginx проксирует этот
>> запрос на целевой хост (это сделано, чтобы переиспользовать соединение за
>> счёт keepalive и не открывать новое соединение на каждый запрос от
>> приложения).
>> Возникла ситуация, когда целевой хост стал отвечать 301 редиректом,
>> естественно приложение, получив вместо ожидаемого контента, 301 редирект
>> сломалось.
>> Есть ли способ заставить Nginx обработать редирект самостоятельно и
>> отдать приложению готовый контент?
>> --
>> С уважением,
>> Александр Карабанов
>> ___
>> nginx-ru mailing list
>> nginx-ru@nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru



-- 
С уважением,
Александр Карабанов
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Как обработать редирект и проксировать результат приложению?

2020-06-26 Пенетрантность Илья Шипицин
это не во всех случаях можно сделать корректно.

например, 301 по RFC можно отвечать только на GET. а если сервер ответил
301 на POST, какой запрос надо отправить на новый адрес, тоже POST ? или
GET ?
вот именно этот выбор и доносится до клиента, когда 301 транслируется один
в один.

теоретически, вы можете накостылить обработчик 301-ошибки, назначить его на
локейшен, и в локейшене сделать proxy_pass
но это очень скользкая дорожка

пт, 26 июн. 2020 г. в 17:41, Александр Карабанов :

> Здравствуйте.
>
> Приложению запрещено самостоятельно открывать соединения с внешним миром.
> Приложение отправляет запрос на proxykipalive.lan, а Nginx проксирует этот
> запрос на целевой хост (это сделано, чтобы переиспользовать соединение за
> счёт keepalive и не открывать новое соединение на каждый запрос от
> приложения).
> Возникла ситуация, когда целевой хост стал отвечать 301 редиректом,
> естественно приложение, получив вместо ожидаемого контента, 301 редирект
> сломалось.
> Есть ли способ заставить Nginx обработать редирект самостоятельно и отдать
> приложению готовый контент?
> --
> С уважением,
> Александр Карабанов
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Как обработать редирект и проксировать результат приложению?

2020-06-26 Пенетрантность Александр Карабанов
Здравствуйте.

Приложению запрещено самостоятельно открывать соединения с внешним миром.
Приложение отправляет запрос на proxykipalive.lan, а Nginx проксирует этот
запрос на целевой хост (это сделано, чтобы переиспользовать соединение за
счёт keepalive и не открывать новое соединение на каждый запрос от
приложения).
Возникла ситуация, когда целевой хост стал отвечать 301 редиректом,
естественно приложение, получив вместо ожидаемого контента, 301 редирект
сломалось.
Есть ли способ заставить Nginx обработать редирект самостоятельно и отдать
приложению готовый контент?
-- 
С уважением,
Александр Карабанов
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru