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