Problema SSL do AWS EC2, Nginx

5

Estou executando um aplicativo rails em uma instância do AWS EC2 com o Nginx 1.4.6 atuando como um proxy reverso e atendendo a certificados SSL.

Tenho certeza de que meu problema está na configuração do Nginx. Aqui está:

upstream puma {
  server unix:///home/deploy/apps/appname/shared/tmp/sockets/appname-puma.sock;
}

server {
  listen 443;

  ssl on;
  ssl_certificate /etc/nginx/ssl/appname.chained.crt;
  ssl_certificate_key /etc/nginx/ssl/appname.key;

  root /home/deploy/apps/appname/current/public;
  access_log /home/deploy/apps/appname/current/log/nginx.access.log;
  error_log /home/deploy/apps/appname/current/log/nginx.error.log info;

  try_files $uri/index.html $uri @puma;
  location @puma {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    proxy_pass http://puma;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 10M;
  keepalive_timeout 10;
}

server {
  listen 80;
  return 301 https://$host$request_uri;
}

Quando tento executar curl -v https://appname.co.uk , o curl retorna:

* Rebuilt URL to: https://appname.co.uk/
*   Trying 52.27.236.227...
* found 187 certificates in /etc/ssl/certs/ca-certificates.crt
* found 758 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_256_GCM_SHA384
*    server certificate verification OK
*    server certificate status verification SKIPPED
*    server certificate expiration date OK
*    server certificate activation date OK
*    certificate public key: RSA
*    certificate version: #3
*    subject: OU=Domain Control Validated,
*    start date: Mon, 21 Dec 2015 16:31:38 GMT
*    expire date: Wed, 21 Dec 2016 16:31:38 GMT
*    issuer: C=US,ST=Arizona,L=Scottsdale,O=GoDaddy.com\, Inc.,OU=http://certs.godaddy.com/repository/,CN=Go Daddy Secure     Certificate Authority - G2
*    compression: NULL
* ALPN, server did not agree to a protocol
> GET / HTTP/1.1
> User-Agent: curl/7.43.0
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.4.6 (Ubuntu)
< Date: Sat, 26 Dec 2015 15:51:14 GMT
< Content-Type: text/html
< Transfer-Encoding: chunked
< Connection: keep-alive
< 

Isso deve mostrar a página inicial do meu aplicativo de trilhos. A linha * ALPN, server did not agree to a protocol é significativa? Por que o Nginx está retornando 301 Moved Permanently?

Muito obrigado, avise-me se mais alguma informação puder ser útil.

    
por Dennis 26.12.2015 / 17:05

1 resposta

2

Sua configuração nginx não mostra nenhum redirecionamento na porta 443, e você afirma não ter um balanceador de carga na frente do nginx, então o único outro lugar do qual o redirecionamento poderia estar vindo é ... seu aplicativo.

Vejo que você está executando o aplicativo em https, mas você não informou ao Rails sobre isso. Em particular, sua configuração nginx está faltando:

        proxy_set_header X-Forwarded-Proto $scheme;

Suspeito que seu aplicativo conheça seu próprio URL pretendido e esteja tentando redirecioná-lo, pois o URL que ele considera não é canônico.

Adicione isso e veja se os redirecionamentos param.

    
por 26.12.2015 / 17:29