Redirecionar respeitando a porta no cabeçalho do host?

2

Frequentemente estou trabalhando com portas de túnel nas quais irei encaminhar uma porta remota 80 para uma porta local 8080.

Um dos problemas interessantes que enfrento é que quando eu tenho uma regra como essa no NGINX:

rewrite ^/(.+)/$ /$1 permanent;

A reescrita receberá uma solicitação assim:

curl -is -X GET http://localhost:8080/one/two/three/

E redirecione-o para um URL como este:

http://localhost/one/two/three

Ele remove a porta do cabeçalho do host e eu sou redirecionado para a porta 80, que é não acoplada e quebra as coisas.

Posso configurar o NGINX para respeitar a porta do host (como presente no cabeçalho do Host) ao fazer redirecionamentos?

Comopodeservistonoscabeçalhosdassolicitações,ocabeçalhodohostincluiaportaeeugostariaqueoNGINXusasseessevalorparatodososredirecionamentosparamanteraportaoriginalqueoclienteusavaparaacessaroservidor.

MinhaconfiguraçãodositeNGINXseparececomisso:

server{listen*:80;server_name_;indexindex.htmlindex.htm;access_log/var/log/nginx/default.access.logcombined;error_log/var/log/nginx/default.error.log;location/{root/vagrant/_site;indexindex.htmlindex.htmindex.php;try_files$uri$uri.html$uri/=404;}port_in_redirecton;server_name_in_redirectoff;}

Asetapasexatasparareproduzirsãoassim:

$curl-ishttp://localhost:8080/2015/08/from-hell-flying-united-airlinesHTTP/1.1301MovedPermanentlyServer:nginx/1.8.0Date:Wed,02Sep201519:43:10GMTContent-Type:text/htmlContent-Length:184Location:http://localhost/2015/08/from-hell-flying-united-airlines/Connection:keep-alive<html><head><title>301MovedPermanently</title></head><bodybgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.8.0</center>
</body>
</html>

Não sei por que está redirecionando para acrescentar uma barra, mas o redirecionamento está quebrando tudo.

    
por Naftuli Kay 02.09.2015 / 20:50

1 resposta

0

Eu corrigi a questão de uma maneira interessante que não faz sentido para mim. Parece que try_files está bagunçando as coisas, então fiz o seguinte na minha configuração para fazer tudo funcionar:

server {
  listen *:80;
  server_name           _;
  port_in_redirect on;
  server_name_in_redirect off;

  index  index.html index.htm index.php;

  access_log            /var/log/nginx/default.access.log combined;
  error_log             /var/log/nginx/default.error.log;

  location / {
    rewrite ^/(.+)/+$ $scheme://$http_host/$1 permanent;
    root      /vagrant/_site;
    index     index.html index.htm index.php;
    try_files $uri $uri/index.html $uri/ =404;
  }
}

Meu objetivo, se não for imediatamente claro, é que as postagens não terminem em uma barra.

Minha estrutura de diretório real exibida se parece com isso:

/vagrant/_site/2015/
'-- 08
    '-- from-hell-flying-united-airlines
        '-- index.html

Portanto, digo ao NGINX que, para cada solicitação, quero tentar localizar um arquivo em $uri , $uri/index.html e $uri/ . Se nenhuma dessas coisas funcionar, retorne um 404.

    
por 02.09.2015 / 23:04

Tags