Nginx içindeki HTTP yönlendirmelerini nasıl takip edebilirim?


15

Nginx tabanlı bir HTTP proxy var ve istemcilerin yönlendirme zincirinde sadece son yanıt almak böylece içindeki tüm HTTP yönlendirmeleri işlemek istiyorum.

Temel kod şöyle görünür:

location /proxy {
    rewrite ^/proxy/([^/]+) $1 break;

    proxy_pass http://$uri/;
}

1 düzey yönlendirmeleri takip etme girişimim şudur:

error_page 301 302 307 =200 @redir;

... ve şu konuma sahip:

location @redir {
    proxy_pass $proxy_location;
}

Sadece $ proxy_location değişkeni yok ve onu oluşturmanın bir yolunu bulamadım. Location:Yukarı akıştan alınan üstbilginin değerini içermelidir .

Düşüncesi olan var mı?

Yanıtlar:


7

Değişken $ upstream_http_location istediğinizi düşünüyorum .

$ Proxy * ile başlayan değişkenler nginx'ten yukarı akışa gidenleri kontrol eder. $ Upstream * değişken serisi, nginx'in kendisinin aldığı yanıt hakkında bilgi içerir. $ Upstream_http_headername ile bir yukarı akış sunucusundan alınan herhangi bir atribit HTTP üstbilgisini alabilirsiniz.

Bu $ yukarı akış değişkenlerinin yanıt yukarı akış sunucusundan yanıt alınana kadar null dışında bir şey olamayacağını unutmayın, bu nedenle kullanımlarında bazı sınırlamalar vardır.


26

İşte benim için işe yarayan şeyin tam örneği:

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

1
$ Upstream_http_location değerini neden yeni bir değişkene kaydetmek zorunda kaldınız?
Şah Şah

1
Kesin sebebini bilmiyorum, ama başka türlü çalışmıyor ...
Vlad Frolov

Bu harika ama yalnızca tek bir yönlendirmeyi yakalar. Birden fazla yönlendirmeyi ele almanın bir yolu var mı?
ThiefMaster

1
@ThiefMaster Bu cevabın aradığınız şey olduğuna inanıyorum .
iBug

2020/01/23 09:17:46 [error] 1394#0: *1 invalid URL prefix in "", client: xx.xx.28.3, server: www.example.com, request: "GET /test HTTP/1.1", host: "www.example.com"@Handle_redirect bloğunu kullanarak aşağıdaki hatayı alıyorum , herhangi bir fikir?
Cyril Duchon-Doris
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.