Como parar o redirecionamento automático nginx 301 quando a barra no final não está em URI?

5

Toda vez que tento foobar.com/test no navegador, o nginx parece redirecionar (301) o cliente para foobar.com/test/. Esse comportamento é inaceitável. O servidor proxy é um servidor web Apache remoto. Eu tentei chamadas diretas para o servidor Apache (sem um proxy) e ele não redireciona o cliente.

Considerando a configuração do servidor nginx abaixo, alguma ideia de como devo resolver isso?

server {
        listen 80;
        server_name fooBar.com;

        location /test {
                proxy_redirect off;
                proxy_pass http://1.1.1.1:80/;
                proxy_set_header Host $http_host;
                proxy_set_header X-Forwarded-Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
        }


        location /test/ {
                proxy_redirect off;
                proxy_pass http://1.1.1.1:80/;
                proxy_set_header Host $http_host;
                proxy_set_header X-Forwarded-Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
        }
}
    
por Geo C. 25.02.2016 / 15:11

1 resposta

7

Existe um tipo especial de processamento para este cenário, conforme os documentos:

If a location is defined by a prefix string that ends with the slash character, and requests are processed by one of proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, or memcached_pass, then the special processing is performed. In response to a request with URI equal to this string, but without the trailing slash, a permanent redirect with the code 301 will be returned to the requested URI with the slash appended. If this is not desired, an exact match of the URI and location could be defined like this:

location /user/ {
    proxy_pass http://user.example.com;
}

location = /user {
    proxy_pass http://login.example.com;
}

(http://nginx.org/en/docs/http/ngx_http_core_module.html#location)

    
por 01.11.2016 / 09:37