2013-03-04 23 views
15

nginx şimdi proxying websockets'i destekliyor, ancak websockets'lerin kullanıldığı URI'lere uygulanan ayrı bir konum bloğuna sahip olmadan nasıl yapılacağı konusunda hiçbir bilgi bulamadık.nginx ters proxy web bağlantıları

location/{ 
    proxy_http_version 1.1; 

    proxy_set_header Upgrade  $http_upgrade; 
    proxy_set_header Connection "upgrade"; 

    proxy_pass http://host:port; 
} 

o vekil standart HTTP yanı sıra WebSockets doğru yolu olurdu:

Ben bu yaklaşımın bazı varyasyonları tavsiye bazı millet gördüm? Yükseltme üstbilgisinin veya Bağlantının, tarayıcının gönderdiği şey olmadığı sürece "yükseltme" olarak ayarlanmasını istemiyorum, ancak bu proxy_set_header satırları, websockets'ın çalışması için gereklidir. Nginx neden orijinal Yükseltme/Bağlantı başlıklarını iletmiyor?

Bunu denedim ve nginx'in Upgrade üstbilgisini proxy etmediğini ve iki proxy_set_header satırı olmadan çalıştırılıyorsa, Bağlantı üstbilgisini 'yükseltme' konumundan 'kapatacak' olarak değiştirdiğini keşfettim. Onlarla, bağlantı, web olmayan istekleri için de 'yükseltme' dir, bu da kötüdür.

Teşekkür :)

cevap

12

Neden sadece ileriye orijinal Yükseltme/Bağlantı başlıklarını nginx etmiyor? official documentation itibaren

: “Yükseltme” çünkü

RFC 2616 gör proxy sunucusuna bir istemciden geçmedi, bir atlama-by-hop başlığıdır.

map $http_upgrade $connection_upgrade { 
    default upgrade; 
    ''  close; 
} 

server { 
    ... 

    location /chat/ { 
     proxy_pass http://backend; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection $connection_upgrade; 
    } 
} 
:


Ben

da bir örnek vardır, Yükseltme başlık veya Bağlantı bu tarayıcı ne göndermiş olmadıkça "yükseltme" olarak ayarlanmış edilmesini istemiyoruz


Bağlantı, web sitesi olmayan istekler için "yükseltme" dir. ts, bu da kötü.

Connection başlığının ne anlama geldiğini biliyor musunuz? Bu alandaki her bir bağlantı belirteci için RFC: 'dan bir alıntı yapın, iletiden bağlantı başlıklarıyla aynı ada sahip herhangi bir başlık alanını/alanlarını kaldırın.

Nasıl kötü olabilir?

İlgili konular