2012-02-07 12 views

risposta

42

Confermo, in base alle nostre prove, che la configurazione ELB su TCP/SSL, invece oh HTTP/HTTPS, rende il trucco con WebSockets. Gli svantaggi sono due:

1) Come già indicato da Arturnt, non è possibile ottenere appiccicosità.

2) Si perderà la possibilità di recuperare l'identità dei client. L'IP di origine visto dal server WebSocket sarà sempre quello ELB e, a differenza della configurazione HTTP/HTTPS, nessuna intestazione X-Forwarded-For verrà aggiunta alle richieste.

UPDATE luglio 2013: Amazon ha appena aggiunto il supporto per protocollo Proxy, che risolve il numero svantaggio 2 di cui sopra. Con il Proxy Protocol, viene aggiunta un'intestazione contenente l'IP di origine del client anche quando ELB funziona a livello TCP anziché HTTP. Tutti i dettagli: http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html

UPDATE agosto 2016: Amazon ha appena annunciato nuovo AWS Applicazione Load Balancer, che supporta WebSocket al livello 7 (così come HTTP/2.0 e il routing basato sul contenuto). Vedi https://aws.amazon.com/it/blogs/aws/new-aws-application-load-balancer/

+0

È possibile utilizzare WSS con la seconda opzione? – whadar

+1

... e c'è [un modulo per gestire il protocollo PROXY] (http://stackoverflow.com/q/17981943/201952). – josh3736

+0

... o una [forcella] attualmente attiva (https://github.com/findhit/proxywrap) del modulo precedente. – jamix

10

Non funziona, il proxy HTTP (S) di ELB non comprende le richieste di websocket, almeno per ora, e non so quando/se è pianificato.

Non sono sicuro che HAProxy sia completamente necessario. Dovrebbe essere possibile inserire un terminatore SSL, ad es. stud/stunnel, nella stessa istanza dei server nodejs e passa in quella direzione. È quindi possibile mantenere il ELB, ma metterlo in modalità TCP.

Ovviamente c'è l'overhead SSL su ogni istanza, ma nel lungo periodo probabilmente si adatta meglio all'offload del protocollo SSL su ELB (in particolare in base ai commenti degli utenti sulle prestazioni SSL di ELB).

+1

Spesso è più desiderabile di interrompere SSL al AWS ELB, anche se solo in modo che rinnovare il certificato è facilmente eseguita in un unico luogo. Significa anche che il codice dell'applicazione potenzialmente vulnerabile non ha accesso al certificato. Lo svantaggio, ovviamente, è che la comunicazione tra ELB e l'applicazione non è criptata, ma questo può essere mitigato con VPC e sicurezza di rete rafforzata. – jokeyrhyme

4

Dopo la risposta di James ho fatto un po 'più di ricerche e ho finito per andare sulla rotta TCP, non sono sicuro che ci siano degli svantaggi rispetto all'utilizzo del tunneling HTTP di ELB (considerando che non ho bisogno di appiccicosità). La cosa buona è che non è necessario fare stud/stunnel poiché ELB lo fornisce per te. messa a punto in modo definitivo ELB dove NodeJS/Faye sono in ascolto sulla porta 8000:

Secure TCP Forward (443) -> Local (8000) 
TCP Forward 80 -> Local(8000) 
+0

Lo svantaggio è la fissità e la capacità del ELB di inoltrare una richiesta a un server diverso se quello corrente che sceglie restituisce un errore. –

1

È possibile utilizzare Application LB per supportare bene la presa di rete.Ho appena implementato questa idea sul nostro ultimo progetto, dopo implementato alcuni trucchi per ALB:

  1. aperta la porta 80 su tutti i relativi SG
  2. fanno NodeJS in esecuzione su 80
  3. consentono NodeJS rispondono http-80 richiesta (NodeJS volontà aggiornare richiesta HTTP al websocket nel backend)
  4. fanno ALB controllo target http-80 & percorso corretto da ping
  5. creare ascoltatori ALB: http80->http80, https443->http80
  6. cre mangiato regole ascoltatore in ALB: http80->target group, https443->target group
  7. abilitare HTTP vischiosità nel
+1

Come hai configurato il controllo di integrità/percorso di ping per questo lavoro? – BrokenGlass

+0

Ho finito per creare un endpoint separato, HTTP, solo per i controlli di integrità. Secondo [documenti] (https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html), "... i controlli di integrità non supportano WebSockets". – dskrvk

+0

@dskrvk Dove e come è stato impostato un endpoint per il controllo dello stato? Stai eseguendo nginx per te ALB? Sono nella stessa situazione non eseguendo nginx e ora sicuro di quale file devo servire per il controllo sanitario e con che cosa dovrebbe rispondere? – jdog

Problemi correlati