nginx pasta de proxy reverso

2

Estou tentando acessar um servidor atrás de outro com um proxy reverso. O servidor "principal" está por trás de mydomain.com e gostaria de acessar o segundo usando mydomain.com/test. No momento, apenas mydomain.com/test funciona.

Mas, se eu tentar acessar mydomain.com/test/myfiles, sou redirecionado para mydomain.com/myfiles, o que não existe, pois esse URL é direcionado ao servidor "principal", portanto, 404 não encontrado é exibido. Eu tentei várias coisas com proxy_redirect, reescrevi mas nada funcionou.

server {
    listen   80;
    index index.php index.html index.htm;
    root /path/to/content;
    server_name localhost mydomain.com;

    location / {
        try_files $uri $uri/ =404; #/index.html;
    }

    location /test/ {
        proxy_pass http://192.168.1.202/;
        proxy_set_header Host $host;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

curl -I "http://192.168.1.202" -H "Host: mydomain.com" no servidor principal fornece:

HTTP/1.1 301 Moved Permanently
Server: nginx/1.2.1
Date: Sun, 02 Nov 2014 15:02:56 GMT
Content-Type: text/html
Content-Length: 184
Location: example.com/myfiles
Connection: keep-alive
    
por avignat 02.11.2014 / 15:52

1 resposta

5

O problema é que, quando você usa uma barra à direita com a diretiva proxy_pass , o comportamento padrão para proxy_redirect é o seguinte:

location /test/ {
    proxy_pass http://192.168.1.202/;
    proxy_set_header Host $host;
}

é o mesmo que:

location /test/ {
    proxy_pass http://192.168.1.202/;
    proxy_redirect http://192.168.1.202/ /test/;
    proxy_set_header Host $host;
}

Então, dada a saída de onda, você deve configurar:

location /test/ {
    proxy_pass http://192.168.1.202/;
    proxy_redirect http://$host/ /test/;
    proxy_set_header Host $host;
}
    
por 02.11.2014 / 16:11