Nginx - quando encapsula a url redireciona sem número de porta

1

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.

    
por CppLearner 25.05.2012 / 09:12

2 respostas

7

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.

    
por 26.05.2012 / 09:00
0

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.

    
por 26.05.2012 / 15:41