11

Nginx ön uçlarımızın arkasında birkaç arka tarafımız var.Arka uç 301/302 yönlendirmesini engellemek (proxy_pass) ve başka bir konum bloğuna yeniden yazmak mümkün mü?

Bu arka uçlar tarafından gönderilen 301/302 yönlendirmelerini engellemek mümkün mü?

Biz yalnız satırları şey thinging edildi:

error_page 302 = @target; 

Ama 301/302 yönlendirmeleri aynı olarak ele alınabilir şüphe 404 en vs vs ... Yani, error_page muhtemelen 200 için geçerli, o kaba, vb hata kodları

Yani özetlemek:

Bizim arka uçları arada bir geri 301/302'leri gönderin. Nginx'in bunları kesip atmasını istiyoruz ve onlarla başka herhangi bir sayıyı yapabileceğimiz başka bir yer bloğuna yeniden yazıyoruz.

Mümkün mü?

Teşekkürler!

cevap

10

Sen proxy_redirect direktifini kullanabilirsiniz:

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

Nginx hala müşteriye 301/302 döner ama proxy_redirect Location başlığını değiştirir ve istemci Location verilen URL'ye yeni bir istek yapmalıdır

başlığı. Böyle

şey nginx geri sonraki isteğinde bulunması gerektiğinde:

proxy_redirect http://upstream:port/ http://$http_host/;

2

Bir Yönlendirme konumu herhangi bir dış URL olabilir daha genel durumda çözmede başarılı oldu. Eğer açıklamak ne yakın olduğu

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_redirects; 
    } 

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

Alternatif yaklaşım, bu sorunun ServerFault cevap kaplıdır şu şekildedir: Birden yönlendirmeleri şu Vlad çözüm değiştirebilir gerekiyorsa https://serverfault.com/questions/641070/nginx-302-redirect-resolve-internally

0

:

1) location / için

'u ekleyin.

2) location @handle_redirects bölüme

proxy_intercept_errors on; 
    error_page 301 302 307 = @handle_redirect; 

ekleyin.