O Nginx redireciona para a porta 8080 ao acessar o URL sem barra [fechada]


19

ao acessar: http://example.com/somefolder -> http://example.com:8080/somefolder

Eu tentei isso:

 http {
    port_in_redirect off;

Alguma ideia?


Você pode fornecer sua configuração? Você está executando proxy de outro serviço por trás do nginx?
Shane Madden

Acredito que estamos fazendo proxy para o apache. Quais arquivos de configuração você deseja?
precisa saber é o seguinte

3
O arquivo de configuração nginx que define o serverbloco que contém a proxy_passdiretiva. O que você provavelmente precisará será de uma proxy_redirectdiretiva - pois sua configuração deve confirmar.
Shane Madden

Observe que alguns navegadores redirecionam o cache, portanto, ao mudar port_in_redirectde onpara, offtalvez seja necessário reiniciá-lo.
Emersion

@emersion port_in_redirectnão funciona de todo
TomSawyer

Respostas:


21

Acabei de encontrar o mesmo problema e port_in_redirect off;realmente trabalhei para mim, apenas certifique-se de usá-lo dentro do server {}bloco.

server {
  listen 8080;
  server_name example.com;

  port_in_redirect off;
  autoindex on;

  location / {
    root /var/www/example.com;
    index index.html;
  }
}

Ou mesmo usar port_in_redirectdentro location.
Wqw 19/05

funcionou perfeitamente para hospedar o nginx no 8080 atrás de um balanceador de carga. obrigado
xxstevenxo

também funcionou para mim, muito obrigado pela sua ajuda
h3nr1ke

4

Isso deve resolver o problema. Adicionar proxy_redirectdiretiva logo após a proxy_passdiretiva

proxy_redirect http://example.com:8080/ http://example.com/;


3

Se alguém ainda estiver enfrentando esse problema enquanto estiver com o apache por trás da instalação do proxy reverso nginx, tente o ff:

  local / {
    proxy_redirect desativado;
    proxy_set_header Host $ host: $ server_port; # <- este resolveu o meu
    proxy_set_header Host encaminhado por X $ http_host;
    proxy_set_header X-Real-IP $ remote_addr;
    proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8083 ;
  }
  

Minha configuração é permitir que o Apache ouça 127.0.0.1:8083 e solicite o proxy nginx.


2

Eu tive o mesmo problema com minha instalação do nginx + Apache. O Apache parece estar redirecionando para sua própria porta (executando no 8080), enquanto o nginx está na porta 80.

Na minha configuração, isso fez um loop de redirecionamento infinito para URLs normais :

proxy_set_header Host $host:80; # Force port 80

Em vez disso, vincule os dados retornados à porta 80, assim:

proxy_bind $host:80; # Bind to port 80

Aqui está o meu bloco de servidor nginx:

server {
    listen 80;
    listen [::]:80 ipv6only=on;

    server_name _; # Wildcard server

    location / {
        proxy_bind $host:80; # Bind to port 80 << THIS IS THE MAGIC
        proxy_pass http://localhost:8080;
        proxy_set_header Host            $host; # Pass host header
        proxy_set_header X-Real-IP       $remote_addr; # Preserve client IP
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Com essa configuração de curinga, todas as solicitações para as quais o nginx não possui um bloco de servidor são passadas para o Apache.


Não funciona de todo
TomSawyer

1

Caso alguém mais estivesse com esse problema - o artigo aqui: http://www.linuxquestions.org/questions/linux-server-73/strange-nginx-redirects-without-trailing-slash-930876/ resolveu o problema para mim .

Eu tive que adicionar um cabeçalho extra no proxy.

Verifique se você tem o conjunto anfitrião para $http_hoste também que você tenha definido o X-Forwarded-Hostque $http_hostgosta abaixo:

proxy_redirect off;
proxy_set_header Host $http_host;             # <-- make sure this is $http_host
proxy_set_header X-Forwarded-Host $http_host; # <-- make sure you set this
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 8k;
proxy_busy_buffers_size 64k;

Ele não funciona de todo
TomSawyer

1

Eu acho que este exemplo simples é suficiente:

location = /somefolder {
    return 302 http://$host:8080/somefolder;
}


0

Eu tive um problema parecido.

Talvez você deva usar a diretiva proxy_set_headerpara definir o host e o local dos cabeçalhos. Na minha configuração eu adicionei proxy_set_header Location $host:80; e todos os pedidos retornam a porta 80 agora.


Eu acredito que isso vai quebrar redirecionamentos além "/" - cada redirecionamento apontaria para $ host: 80
perrierism

0

Esse problema é causado pelo caminho relativo da conversão automática do Nginx para o caminho absoluto, certo?
Existe uma maneira de dizer ao Nginx para não traduzir, você adiciona um espaço antes da barra: ngx.redirect(" /foo")


Observe que esta é uma pergunta de três anos atrás.
Deer Hunter

-1

Eu recomendaria adicionar isso ao seu bloco de servidor:

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

Foi quando você acessou example.com/wp-admin, acessando example.com/wp-admin, em vez de example.com:8080/wp-admin/ e, se você estiver no DNS do CloudFlare, por exemplo, será exibido o site está inoperante.

Estou usando o Ubuntu, Nginx e Varnish e isso funciona perfeitamente agora, em vez de desativar o port_in_redirect.

Para adicionar, reinicie o nginx após:

sudo service nginx restart

-1

Adicionar absolute_redirect off; no bloco de localização funciona para mim.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.