Histórico: estou tentando configurar um grupo de instâncias na plataforma de nuvem do Google. O grupo de instâncias consiste em várias instâncias nginx cuja tarefa é simplesmente redirecionar o tráfego https de entrada para um site externo. Se o tráfego de entrada for http, ele será convertido para https.
Para que o grupo de instâncias funcione, ele deve responder a uma solicitação de verificação de integridade (no protocolo http ou https) e retornar 200.
O problema que tenho é como definir essa configuração nginx.
Este é meu primeiro corte. Ele apenas lida com o redirecionamento
server {
listen 80;
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/examples.pem;
ssl_certificate_key /etc/nginx/ssl/examples.key;
server_name incoming.examples.com;
return 301 https://target.examples.com$request_uri;
}
Defino o URL da verificação de integridade como '/_check' com protocolo http. Esta é a minha primeira tentativa:
server {
listen 80;
location /_check {
return 200 'no content';
}
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/examples.pem;
ssl_certificate_key /etc/nginx/ssl/examples.key;
server_name incoming.examples.com;
return 301 https://target.examples.com$request_uri;
}
O servidor nginx responde com um 404.
Então tentei passar location
para outra server
definição:
server {
location /_check {
return 200 'no content';
}
listen 80;
}
server {
listen 80;
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/examples.pem;
ssl_certificate_key /etc/nginx/ssl/examples.key;
server_name incoming.examples.com;
return 301 https://target.examples.com$request_uri;
}
Isso me dá o mesmo resultado. Isso é o que vejo no log de acesso.
130.211.3.85 - - [18/Jan/2017:08:41:25 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.3.81 - - [18/Jan/2017:08:41:29 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.1.249 - - [18/Jan/2017:08:41:30 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.3.85 - - [18/Jan/2017:08:41:30 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.3.81 - - [18/Jan/2017:08:41:34 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.1.249 - - [18/Jan/2017:08:41:35 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.3.85 - - [18/Jan/2017:08:41:35 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.3.81 - - [18/Jan/2017:08:41:39 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.1.249 - - [18/Jan/2017:08:41:40 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0
Se eu reverter a alteração para minha primeira tentativa e alterar a verificação de integridade a ser usada https
(como na captura de tela a seguir),
Em vez disso, recebo 301. Parece-me que o URL _check
foi substituído pela regra de redirecionamento.
Minha pergunta: como posso modificar o nginx para atender ao requisito?
Responder1
Você pode configurar a verificação de integridade para funcionar com qualquer porta definida, conforme indicado nadocumentação. Você pode usar a UI ou a linha de comando ao criar a verificação de integridade:
$ gcloud compute health-checks create https NAME [--check-interval=CHECK_INTERVAL; default="5s"] [--healthy-threshold=HEALTHY_THRESHOLD; default=2] [--host=HOST] [--port=PORT; default=80]
Na bandeira PORT você pode configurar qualquer uma de sua escolha. Então você teria que configurar seu aplicativo para responder a isso.
server {
location /_check {
return 200 'no content';
}
listen [PORT];
Isso evitaria que as solicitações de verificação de integridade fossem redirecionadas com o restante do tráfego.