Nginx + Redirecionamento da barra de fuga do Apache [fechado]

8

Eu tenho um servidor Nginx sendo executado em 80 port funcionando como um proxy para Apache 2.2 , que está ouvindo 127.0.0.1:8080

Quando acesso http://hostname/subfolder/ , funciona muito bem.
Quando eu acesso o http://hostname/subfolder , ele me redireciona para http://hostname:8080/subfolder/ , o que está errado.

Até onde eu vejo, o redirecionamento errado é retornado pelo Apache, mas UseCanonicalName e UseCanonicalPhysicalProxy são ambos definidos como Off

Alguma idéia de como consertar isso?

    
por quark 25.08.2010 / 13:14

5 respostas

5

Eu encontrei isso também, e consegui consertá-lo com uma diretiva proxy_redirect logo após minha diretiva proxy_pass na configuração nginx:

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

Esta é minha configuração completa do nginx (no meu caso, o Apache está na porta 81 e hospeda dois sites. Eu adicionei duas linhas proxy_redirect específicas do site porque não tenho certeza de como adicionar uma única genérica.)

server {
    listen 80;

    access_log /var/log/nginx/apache-proxy.access.log;

    location / {
        proxy_pass http://localhost:81;

        #fix for apache redirects that include the port number
        proxy_redirect http://nfriedly.com:81/ http://nfriedly.com/;
        proxy_redirect http://misticflame.com:81/ http://misticflame.com/;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 6000;
        proxy_send_timeout 6000;
        proxy_read_timeout 6000;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
        send_timeout 6000;
        proxy_buffering off;
        proxy_next_upstream error;

    }
}

Nota: Isto foi para uma versão pré-1.0 do nginx 5+ anos atrás. Veja os documentos para proxy_redirect para a versão atual: link

    
por 21.03.2011 / 19:10
2

Se a sua diretiva ServerName no Apache estiver definida como "hostname: 8080", remova ": 8080" ou altere para "hostname: 80". Você também pode adicionar "proxy_set_header Host $ host: 80"

    
por 21.02.2011 / 17:58
1

Eu tive esse problema há muito tempo .. Como eu lembro que tinha a ver com o HTTP RFC, barra no final denota um diretório (/ test /) , sem barra no final é um arquivo (/ teste)

Para encurtar a história, adicione uma regra de reescrita que adicione uma barra à solicitação, se não houver nenhuma.

veja Resolvido: problema de barra no final com o servidor Nginx

HTP

    
por 07.03.2011 / 20:22
1

Eu encontrei esse problema exato recentemente. Embora as soluções sugeridas funcionem, o Nginx oferece uma solução integrada:

proxy_redirect default;

Documentação no link

Veja um exemplo completo de como usá-lo:

server {
  listen 80;
  location / {
    proxy_pass http://localhost:8080
    proxy_redirect default
  }
}
    
por 02.05.2015 / 19:21
0

Talvez o nginx não esteja definindo os cabeçalhos de proxy para informar ao apache como era a solicitação original.

No nginx:

proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Veja o link

    
por 02.02.2011 / 22:11