2014-09-22 7 views

Odpowiedz

4

Jeśli włączyłeś obsługę protokołu proxy, doda ona własny protokół protokołu proxy haproxy jako pierwszą rzecz wysłaną w żądaniu TCP. Skutecznie, dodaje się następujący wiersz przed żądania HTTP:

PROXY TCP4 192.168.0.1 192.168.0.11 56324 443 

To nie jest poprawny HTTP, więc Play nie obsługuje, jeżeli play odbiera żądanie takiego, to po prostu zwróci błąd.

Co można zrobić, to zainstalować proxy na swoim węźle EC2, który obsługuje protokół proxy, a następnie dodać adres IP protokołu proxy do nagłówka X-Forwarded-For do aplikacji Play. Instrukcje dotyczące sposobu konfigurowania nginx wspierać protokół proxy w ten sposób można znaleźć tutaj:

https://chrislea.com/2014/03/20/using-proxy-protocol-nginx/

+0

Czy jest jakieś ETA na temat dodawania obsługi protokołu Proxy jako funkcji w Play? Czy jest to coś, co można zrobić w samej grze lub czy wymaga modyfikacji w zewnętrznej bibliotece? Dzięki. –

+1

Play jest zbudowany na Netty, a Netty ma uchwyt protokołu proxy, który można dodać. Może być dostarczony jako opcja konfiguracyjna. Nie ma planów wdrożenia tego, jeśli tak się stanie, będzie to żądanie od społeczności. Play 3 przenosi się również na akka-http (aka spray), który nie obsługuje protokołu proxy. Żądanie funkcji dla tego jest tutaj: https://github.com/spray/spray/issues/846 –

0

Możesz pobrać dowolny nagłówek HTTP z żądania. Jeśli informacje o serwerze proxy są dostępne w nagłówku HTTP (nie jestem zaznajomiony z Amazon ELB i jakiego nagłówka HTTP używa, ale zakładam, że użyłby on nagłówka HTTP), mógłbyś go sparsować samemu, tak:

val maybeClientIp: Option[String] = request.headers.get("PROXY").flatMap { header => 
    val proxyProtocolHeader = header.split(" ") 
    if (proxyProtocolHeader.length > 2) { 
    Some(proxyProtocolHeader(2)) 
    } else { 
    None 
    } 
} 
+0

X-Przekazano-For nie jest dostępna, jeśli równoważenie obciążenia TCP jest używany – tokarev

+0

rację, czytałem zbyt szybko. Czy rzeczywiście dostajesz jakiś nagłówek HTTP z zakodowanym nagłówkiem proxy? Wygląda na to, że po nagłówku można go samemu sparsować –

+0

ELB dodaje nagłówek do danych TCP. Tak więc prawdziwe pytanie brzmi, jak je odzyskać. – tokarev

Powiązane problemy