nginx não está definindo o esquema $

2

Acabei de atualizar do nginx 1.4.1 para o 1.8.0 (juntamente com uma atualização para o Phusion Passenger 5.0.13). Com essa alteração, a variável $scheme de nossa configuração não parece mais definida.

A configuração do nginx é semelhante a esta:

server {
     listen 80;
     listen 443;
     ssl on;

     server_name app.example.com;

     passenger_enabled on;
     passenger_env_var HTTP_X_FORWARDED_PROTO $scheme;

     proxy_set_header X-Forwarded-Proto $scheme;

     ...
}

Quando eu inspeciono request.env['HTTP_X_FORWARDED_PROTO'] ou request.headers['X-Forwarded-Proto'] no aplicativo Rails, recebo o literal "$ scheme", não "http" ou "https".

Eu tentei os dois proxy_set_header e passenger_set_header e obtive os mesmos resultados.

    
por jwadsack 14.07.2015 / 00:03

1 resposta

2

Esse problema aqui é que eu estava configurando a variável de ambiente, bem como o cabeçalho. Remover esta linha corrigiu isso:

passenger_env_var HTTP_X_FORWARDED_PROTO $scheme;

Isso é causado pelo fato de que passenger_env_var é avaliado em o início do aplicativo em vez de em cada solicitação. Porque $scheme não está definido naquela época, foi definido lá.

Eu não sei porque o cabeçalho também foi pré-definido, mas eu suspeito que tenha algo a ver com o fato de que o Passenger tenta sincronizar os cabeçalhos e variáveis de ambiente para imitar um ambiente CGI.

    
por 15.07.2015 / 02:27