Redirecionamento de barra à direita do Nginx + Apache [fechado]

8

Eu tenho um Nginxservidor em execução na 80porta que funciona como um proxy ao Apache 2.2qual está ouvindo127.0.0.1:8080

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

Tanto quanto eu ver o redirecionamento errado é devolvido pelo Apache, mas UseCanonicalNamee UseCanonicalPhysicalProxyestão definidos paraOff

Alguma idéia de como consertar isso?

quark
fonte
O problema parece estar na sua configuração do nginx, considerando que seu acesso à porta 80 sem uma barra final resulta em um redirecionamento para a porta 8080. A menos que o seu nginx faça proxy do Apache e o Apache esteja solicitando um redirecionamento.
PP.
Eu uso o nginx como proxy
quark

Respostas:

5

Também deparei com isso e consegui corrigi-lo com uma diretiva proxy_redirect logo após minha diretiva proxy_pass na minha 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. 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: Isso foi para uma versão pré-1.0 do nginx há mais de 5 anos. Aqui estão os documentos para proxy_redirect da versão atual: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

Nathan Friedly
fonte
acrescentando proxy_redirect dá o erro de sintaxe
TomSawyer
Esta foi uma versão bastante antiga do nginx. Não estou mais usando o nginx (apenas conteúdo estático nas páginas do github para o meu site pessoal), mas atualizei a resposta com um link para os documentos proxy_redirect atuais.
21136 Nathan Friedly
Desta forma, você ainda obtê-lo mais lento por causa do redirecionamento
TomSawyer
2

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

user71577
fonte
1

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

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

veja Resolvido: problema de barra final com o servidor Nginx

HTP

Mihai
fonte
1

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

proxy_redirect default;

Documentação em http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

Aqui está um exemplo completo de como usá-lo:

server {
  listen 80;
  location / {
    proxy_pass http://localhost:8080
    proxy_redirect default
  }
}
Dylan Wood
fonte
0

Talvez o nginx não esteja configurando os cabeçalhos do 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 http://wiki.nginx.org/LikeApache

feijões
fonte