Então eu criei uma solução simples ... como minha própria resposta ...
proxy_set_header Host $host;
$host
deve ser substituído por $http_host
, embora eu não tenha certeza do significado de ambos.
Meu problema é muito semelhante a este: redirecionamento de proxy do nginx redireciona a porta de ignição
Estou usando o nginx 1.0.14.
Eu quero ser capaz de enviar um túnel ssh para o meu site do Django, para que eu possa trabalhar remotamente. Eu testei um projeto Django simples no meu computador pessoal, com configuração nginx muito simples (inicial, padrão). Eu túnel e redirecionamento retorna com o número da porta como parte da URL. Então, tenho certeza de que esse não é um problema do Django. É principalmente minha configuração nginx.
Aqui está a parte relevante.
server {
listen 80;
server_name localhost 127.0.0.1;
server_name_in_redirect off;
# location other services go here
location ~ /forum/(.*)$ {
#rewrite ^(.*):(.*)/forum(.*)$ /$2 last;
#rewrite ^(.*)$ http://localhost:8000/$1;
#rewrite ^/forum(.*)$ $1 break;
# the forum service runs as local, listens to 8000 port...
proxy_pass http://localhost:8000;
proxy_redirect default;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Então, o que aconteceria se eu tivesse um túnel ssh?
ssh -L 1111:192.168.1.165:80 username@server-address -N
abra o navegador, http://localhost:1111
, e quando eu fizer login ou fizer qualquer coisa que precise de redirecionamento, obtenho o link em vez de link
Estes links estão errados, o nginx irá reclamar (do lado do servidor) eles não existem.
Internamente, o fórum do serviço é executado em http://localhost:8000
Eu tentei coisas como
proxy_set_header $host:$server_port; # or
proxy_set_header $proxy_host:$proxy_port; # or
proxy_set_header $host:$proxy_port; # or
rewrite ^(.*):(.*)/forum(.*)$ /$2 last;
#rewrite ^/forum(.*)$ $1 break;
proxy_redirect http://localhost/ http://$host:$proxy_port;
O segundo proxy_set_header mostra um pequeno progresso. Depois de pressionar submit
, recebo uma página em branco, com o URL original ( link e, em seguida, vejo a mesma URL novamente).
Alguma ideia de como resolver meu problema? Obrigado.
Você precisa ativar o proxy_redirect Ele reescreve o cabeçalho do host da resposta para evitar o problema que você está enfrentando. Configurá-lo como padrão deve fazer o truque.