nginx proxy_pass yanıt üstbilgisi konumunu yeniden yazma


11

Bu nginx örneğinin amacı GitLab ve OpenWRT Luci'nin ters bir proxy üzerinden yönlendirmesini sağlamaktır. Zaten bu konuyla mücadele eden bir temel url'ye sahip olan diğer bazı web siteleri için zaten çalışıyor.

  • Bu örnekteki GitLab, 9000 numaralı bağlantı noktasındaki yerel sunucudadır.
  • Nginx web sitesi 8080 numaralı bağlantı noktasındadır.
  • OpenWRT ile aynı sorun vardır, ancak / cgi-bin / luci /

Örnek konum için ilgili nginx yapılandırması;

location /gitlab/ {
    proxy_pass http://127.0.0.1:9000/;
    proxy_redirect default;
}
  • Sonuçların, eğik çizgi ile ya da eğik çizgi olmadan aynı olduğunu unutmayın.

Bu konuma uygulanan bazı başlık proxy'si yapılandırma seçenekleri var.

# Timeout if the real server is dead
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;

# Basic Proxy Config
proxy_set_header    Host $host:$server_port;
proxy_set_header    Origin $scheme://$host:$server_port;    
proxy_set_header    Connection $http_connection;
proxy_set_header    Cookie $http_cookie;
proxy_set_header    Upgrade $http_upgrade;
proxy_set_header    X-Forwarded-Protocol $scheme;
proxy_set_header    X-Scheme $scheme;
proxy_set_header    X-Real-IP $remote_addr;
proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header    X-Forwarded-Ssl on;
proxy_set_header    X-Frame-Options SAMEORIGIN;

# Advanced Proxy Config
send_timeout            5m;
proxy_read_timeout      300;
proxy_send_timeout      300;
proxy_connect_timeout   300;

proxy_buffers 32 4k;
proxy_buffer_size           4k;
proxy_busy_buffers_size     64k;
proxy_temp_file_write_size  64k;

proxy_http_version 1.1;
proxy_cache_bypass $cookie_session;
proxy_no_cache $cookie_session;]
  • #Proxy_set_header Ana bilgisayarına yorum yapmak bunun yerine tarayıcıyı https://127.0.0.1:9000/users/sign_in

Tarama yaparken https://website.com:8080/gitlab/;

GET /gitlab/ HTTP/1.1
Host: website.com:8080

Yanıt yanlış olarak /users/sign_inyerine geri dönüyor/gitlab/users/sign_in

HTTP/1.1 302 Found
Cache-Control: no-cache
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Location: https://website.com:8080/users/sign_in

Https: // website: 8080 / gitlab / users / sign_in adresine manuel olarak göz atmak sayfayı yükler, ancak yukarıdakiyle aynı soruna kadar düştükleri varlıkları yoktur.

GitLab Varlık Hatası

Nginx dokümanları okunduğunda , varsayılan proxy davranışının bu senaryoyu işlemesi gerekir, ancak başarısız gibi görünüyor.

Günlükler çok fazla görünmüyor.

Bunun neden olabileceğini teşhis etmek için hangi ek adımlar atılmalıdır?

Yanıtlar:


3

Hedefinize bir eğik çizgi ekleyin proxy_pass.

Güncelleme: OP, vhost'un kabul ettiği kesin değildi https. Düzen, ekleme üstbilgileri ile arka uç sunucusuna iletildiğinden, proxy_redirect default;nginx komutlarının , yukarı akış yanıtlarında üstbilgileri yeniden yazarken https yerine varsayılan olarak http düzenini beklemesinden beri bir sorun oluşur Location.

Bu nedenle, bu açık bir şekilde daha genel bir forma değiştirilmelidir (sondaki eğik çizgi hala gereklidir):

location /gitlab/ {
    proxy_pass http://127.0.0.1:9000/;
    proxy_redirect $scheme://$host:$server_port/ /gitlab/;
}

Merhaba Xavier, cevap için teşekkürler. Orada şans yok. Denediğim şeylerden biri (proxy_pass belgelerini eşleştirerek) ama değişiklik yok :(
Jake Edwards

Başka bir conf içinde olan proxy_set_header hakkında bilgi ekledim. Ana bilgisayar hattının kaldırılması bazı şeyleri değiştirir - 127.0.0.1:9000/users/sign_in
Jake Edwards

Tamam bu yüzden sorun http bekliyoruz davranış scheme(https) proxy_redirect default. Ana makine üstbilgisine yorum yapmadan önce yapılandırmayı olduğu gibi bırakın ve proxy_redirectiçeriği olarak değiştirin $scheme://$host:$server_port/ /gitlab/;. Test sırasında tarayıcı önbelleğe alınmış başlıklarına (cli araçlarını veya özel gezinme yöntemini kullanın) vurmadığınızdan emin olun.
Xavier Lucas

Tamam, harika, şimdi doğru URL'ye gidiyor (en azından GitLab kullanıyor, OpenWRT hala / cgi-bin / luci'ye gidiyor - yine de birer birer). Bununla birlikte, herhangi bir varlık / resim / vb. Yok -: 8080 / asset / 5ec1aeb4604cbfbeff836f956308b0ed.js yerine: 8080 / gitlab / asset / application-5ec1aeb4604cbfbeff836f956308b0ed.js
Jake Edwards

1
@ShadowXVII Varlıklar bağlantıları uygulamanız tarafından oluşturulur, orada değiştirmeniz gerekir. Nginx, sayfa içeriğini değil, yalnızca uygulamanız tarafından verilen yönlendirmeleri yeniden yazar.
Xavier Lucas

0

@XavierLucas'ın söylediği doğru, desteklerin bağlantıları işlemesi gerekir. Gitlab belgelerinde GitLab'ı Göreli URL altında yükle başlığı altında bir kılavuz vardır . Son zamanlarda gitlab ve nginx yüklü bir kemer linux sunucusu kurarken bu sorunla karşılaştım ve bu, tüm varlıkların doğru göreceli yola sahip olacak şekilde yeniden derleyerek sorunumu çözdü.

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.