Https url anexado à porta 80 usando CloudFlare, Nginx e Thin

1

Eu tenho uma configuração Nginx para o meu servidor Thin executando um projeto Ruby on Rails. O Nginx é atualmente o endpoint para meu SSL.

Recentemente, tive alguns problemas com ataques no meu servidor, então decidi adicionar o CloudFlare. Atualmente, ele usa o "Strict SSL" do cloudflare (ssl no link client-CF e no link CF-webserver). Isso funciona agora ao navegar no meu site, mas quando estou usando o Oauth no Facebook, G + etc. O link de redirecionamento aparece como: https://example.com:80/destination/url (observe o : 80 ). Isso não acontece quando eu não uso CloudFlare.

O que posso fazer para corrigir isso? É um problema no CloudFlare ou Nginx? Eu encontrei este post , mas não consegui fazer engenharia reversa para o nginx.

Minha configuração atual do nginx:

server {
      listen      80 default;
      server_name .example.com;
      ## redirect http to https ##
      return 301 https://example.com$request_uri;
}
server {
  listen      443 ssl;
  server_name .example.com;

  client_max_body_size 20M;

  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;


  ssl_certificate     /home/my_user/.ssl/example.crt;
  ssl_certificate_key /home/my_user/.ssl/example.key;

  access_log /var/www/example_server/log/access.log;
  error_log  /var/www/example_server/log/error.log;
  root     /var/www/example_server;
  index    index.html;

  if ($host != 'example.com' ) {
    return 301 https://example.com$request_uri;
  }

  location / {
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  Host $http_host;
    proxy_set_header  X_FORWARDED_PROTO $scheme;
    proxy_redirect  off;
    try_files /system/maintenance.html $uri $uri/index.html $uri.html @ruby;
  }

  location @ruby {
    proxy_pass http://example.com;
  }
}

No meu nginx.conf:

#default stuff

http{
set_real_ip_from *IP address for cloudflare*;
#....

port_in_redirect off;

#more default stuff

Para referência, o caminho da solicitação atual: solicitação do cliente -SSL- > CloudFlare -SSL- > Nginx -não-SSL- > Thin-não-ssl- > Nginx -SSL- > CloudFlare -SSL- > Resposta do Cliente

    
por Automatico 03.10.2014 / 19:28

2 respostas

1

Parece que há um problema na gem Omniauth que está causando esse problema. Por que é apenas um problema quando eu uso CloudFlare, e não um problema quando está desligado, me bate.

De qualquer forma, aqui está o problema no github:

link

Minha solução:

No aplicativo rails, crie um novo inicializador ( config/initializers/omniauth_fix.rb ) com este conteúdo:

if Rails.env.production?
  module OmniAuth
    module Strategy
      def full_host
        uri = URI.parse(request.url)
        uri.path = ''
        uri.query = nil
        uri.port = (uri.scheme == 'https' ? 443 : 80)
        uri.to_s
      end
    end
  end
end

É essencialmente uma armadilha sobre o assunto. Espero que isso seja corrigido em versões futuras do omniauth.

    
por 09.10.2014 / 17:43
0

Isso parece estranho porque não adicionamos nenhum redirecionamento, a menos que você nos peça especificamente para fazê-lo com um PageRule . Eu recomendaria abrir um ticket de suporte com suporte a CloudFlare para que possamos dar uma olhada.

    
por 03.10.2014 / 19:35