Come devo configurare il mio controllo di integrità ELB quando utilizzo NameVirtualHosts e reindirizza a www?


8

Il mio ELB continua a mettere fuori servizio le mie istanze, perché il controllo dello stato HTTP non riesce.

Abbiamo un jolly DNS e reindirizziamo tutto su www:

vhost.conf:

ServerName www.example.com
ServerAlias *.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Funziona bene con i browser attuali, ma il controllo dello stato HTTP su / fallisce, presumibilmente perché sta ottenendo un 302.

È l'opzione migliore per utilizzare un controllo dello stato TCP o esiste un modo per far funzionare HTTP?


Basta usare un controllo dello stato TCP fino a quando AWS non consente di personalizzare l'intestazione host inviata per il controllo dello stato. Anche con una voce predefinita sul tuo server web non stai effettivamente controllando lo stato della tua app, ma solo il tuo server web che è praticamente lo stesso che verificare se la porta tcp è aperta.
Pykler,

Risposte:


11

Questa domanda è stata posta sui forum AWS e la risposta era quella di impostare un vhost predefinito che gestisse il traffico sull'indirizzo IP nudo e non effettuasse reindirizzamenti. Ciò significa che non verranno reindirizzati neanche gli utenti normali che colpiscono il tuo indirizzo IP.

In alternativa, è possibile specificare la parte del percorso dell'URL che si desidera venga richiesta dall'ELB e ignorare tale percorso aggiungendo un altro RewriteCond:

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/health-check$
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Gli utenti normali che colpiscono quell'URL non verranno reindirizzati.

È inoltre possibile utilizzare la stessa tecnica per rilevare l'Utente-Agente dell'ELB.

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Gli utenti normali che falsificano il proprio User-Agent non verranno reindirizzati.

O l'indirizzo IP interno dell'ELB.

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{REMOTE_ADDR} !^10\.
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Affinché questa opzione funzioni, sarà necessario mod_rpaf(per Apache 2.2) o mod_remoteip(per Apache 2.4) modificare la REMOTE_ADDRvariabile per contenere la parte corretta del contenuto X-Forwarded-Fordell'intestazione. Se impostato correttamente, non dovrebbe essere possibile per un utente normale evitare la risposta di reindirizzamento.


Il problema con la configurazione di un vhost predefinito è che l'indirizzo IP cambierà ogni volta che viene avviata o riavviata una nuova istanza e vorrei che la mia AMI predefinita includesse il supporto per il controllo dello stato. Esaminerò le altre opzioni.
chris,

Il controllo dell'indirizzo IP che ho incluso controlla solo che l'indirizzo IP inizia con 10.. Il resto delle parti dell'indirizzo IP può cambiare quanto vogliono e saranno comunque abbinate. L' 10.*.*.*intervallo (o 10.0.0.0/8) di indirizzi IP non è instradabile su Internet.
Ladadadada,

Sto già usando l'IP remoto per registrare l'indirizzo IP del richiedente (al contrario dell'IP ELB), quindi la terza opzione ha funzionato - grazie!
chris

0

L'aggiunta di host virtuali non è una buona idea, poiché è necessario riavviare il servizio httpd affinché gli host virtuali possano essere riflessi. C'è un modo alternativo per farlo

  1. Ignora il percorso ELB Health Check nel file .htaccess
    separa tutte e quattro le parti del nome dns come segue
    elb_dns_name: elb-name.subnet_zone.elb.amazonaws.com
  2. Per tutti gli URL rimanenti hanno regole di riscrittura interne
    directory_scructure: code_folder / website

    RewriteEngine su
    RewriteCond% {HTTP_HOST}! $ [NC]
    RewriteCond% {REQUEST_URI}! ^ / Index.php $
    RewriteRule ^ (. *) $ / $ 1 [L, QSA]

Questo ha funzionato molto bene per me. Si prega di suggerire se ci sono metodi migliori saluti!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.