Nginx X-Accell-Redirect fornece 502 gateway inválido

1

Eu quero permitir que os usuários baixem arquivos de um armazenamento remoto, mas eu quero primeiro autenticar o pedido através do meu aplicativo rails. Eu quero entregar o proxy do arquivo remoto para nginx quando o rails autenticou o pedido, para liberar o thread ruby / rails.

Eu tenho este arquivo conf nginx chamado proxy_download.conf:

   # Proxy download 
   location ~* ^/internal_redirect/(.*?)/(.*) {
     # Do not allow people to mess with this location directly
     # Only internal redirects are allowed
     internal;

     # Location-specific logging
     access_log logs/internal_redirect.access.log combined;
     error_log logs/internal_redirect.error.log warn;

     # Extract download url from the request
     set $download_uri $2;
     set $download_host $1;

     # Compose download url
     set $download_url http://$download_host/$download_uri;

     # Set download request headers
     proxy_set_header Host $download_host;
     proxy_set_header Authorization '';

     # The next two lines could be used if your storage 
     # backend does not support Content-Disposition 
     # headers used to specify file name browsers use 
     # when save content to the disk
     proxy_hide_header Content-Disposition;
     add_header Content-Disposition 'attachment; filename="$args"';

     # Do not touch local disks when proxying 
     # content to clients
     proxy_max_temp_file_size 0;

     # Download the file and send it to client
     proxy_pass $download_url;
   }

Eu importo isso para o conf nginx principal da seguinte forma:

include $ROOT/TO/APP/nginx.conf.d/proxy_download.conf;

O aplicativo é implantado bem e é executado corretamente com essa configuração.

Estes são os métodos do controlador para iniciar o pedido de download:

  def x_accel_url(url, file_name = nil)
    uri = "/internal_redirect/#{url.gsub('http://', '').gsub('https://', '')}"
    uri << "?#{file_name}" if file_name
    return uri
  end

def download
    if auth_is_ok # do some auth logic here
        headers['X-Accel-Redirect'] = x_accel_url('http://domain.com/file.ext')
        render :nothing => true
    end
end

Ao acertar este método de controle através do navegador, recebo o famoso erro nginx:

502 Bad Gateway

O que há de errado com minha configuração? Obrigado!

    
por Corstiaan 22.04.2016 / 16:04

0 respostas