2013-11-14 64 views
13

Usiamo nginx compilato con il modulo spdy da un po 'di tempo e nonostante la bozza 2 delle specifiche sia abbastanza soddisfatta delle sue prestazioni.Qualcuno è riuscito a far funzionare SPDY dietro un ELB Amazon?

Tuttavia, ora abbiamo la necessità di ridimensionare orizzontalmente e mettere le nostre istanze EC2 dietro un Elastic Load Balancer.

Dato ELB non supporta il protocollo NPN abbiamo fissato gli ascoltatori al seguente:

SSL 443 -> SSL 443

Abbiamo inoltre attivato il nuovo proxy-protocollo, come descritto qui:

http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html

Tutto funziona perfettamente con questa configurazione. La nostra app è bilanciata con successo in tutte le nostre istanze.

Tuttavia, quando è in esecuzione http://spdycheck.org/ segnala che SPDY non è abilitato. Tuttavia, se indico spdycheck all'IP elastico di una singola istanza, esso riporta correttamente SPDY come abilitato.

Qualsiasi aiuto sarebbe molto apprezzato.

risposta

8

Fare SSL -> SSL non invia gli interi pacchetti TCP al server web. AWS decodifica i pacchetti utilizzando il certificato e ricodificarlo nuovamente. Il tuo backend riceve solo i pacchetti modificati. L'opzione valida è quella di cambiare i protocolli in TCP, ma è necessario nginx proxy patch per le intestazioni http o per lavorare meglio.

Sto avendo lo stesso problema e sto aspettando che AWS abiliti NPN negoziazione su ELB o nginx aggiunga la patch del proxy accept al suo modulo.

+1

Solo curioso, c'è stato qualche aggiornamento su uno di questi? –

+1

sono curioso anch'io ... –

+0

ho lo stesso problema, c'è stato qualche aggiornamento su uno di questi? –

6

L'abbiamo appena rilasciato la scorsa notte al https://www.ritani.com. Avrai bisogno di una versione di nginx che supporti spdy e proxy_protocol. Siamo al 1.6.2.

Tramite la CLI di AWS aggiungere e collegare il proxy_protocol al proprio ELB. http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html#enable-proxy-protocol-cli

Attraverso l'interfaccia utente Web AWS per tale ELB, rimuovere 443 listener. Aggiungere un nuovo listener come TCP 443 -> TCP 443.

Nella tua nginx blocco del server di configurazione:

listen 443 ssl spdy proxy_protocol;

add_header Alternate-Protocol 443:npn-spdy/3;

all the standard ssl directives...

Per ottenere la pinzatura ocsp al lavoro che ho avuto usare tre certificati. Il metodo standard di concatenazione di my.crt e my.intermediate.crt non ha funzionato. Ho dovuto romperli come segue.

ssl_certificate /etc/nginx/ssl/my.crt;

ssl_certificate_key /etc/nginx/ssl/my.private.key;

ssl_trusted_certificate /etc/nginx/ssl/my.intermediate.crt;

Infine, scambiare tutte le istanze di $remote_addr con $proxy_protocol_addr. $ remote_addr ora è l'elb e $ proxy_protocol_addr è l'ip del client remoto.

+0

Sapel, ora hai ELB -> NGINX -> App che supporta SLL e SPDY? In tal caso, puoi specificare dove viene terminato l'SSL? –

+0

SSL è terminato in NGINX. Non più nel servizio di bilanciamento del carico. – sapel

+0

Non potremmo semplicemente terminare sui server delle app? Quindi sarebbe ELB -> App1 o ELB -> App2. Esegui nginx sui server delle app? –

Problemi correlati