Use o proxy reverso nginx para redirecionamento

3

Eu tenho a.b domain (por exemplo) e quero exibir algumas páginas do github ( username.github.io/project ) em a.b/c . Isso significa que também quero manter o URL do meu navegador em a.b/c e mostrar o conteúdo de username.github.io/project .

Eu tenho as seguintes configurações no módulo nginx

location /c {       
    proxy_pass http://username.github.io/project;
    proxy_redirect http://username.github.io http://a.b;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_buffering off;
}

se eu alterar proxy_set_header Host $http_host para proxy_set_header Host $proxy_host ou $host , basta redirecionar para http://username.github.io/project , o que não é o que eu pretendia. Como posso fazer?

    
por Jongsu Liam Kim 18.02.2014 / 08:12

2 respostas

8

Basta enviar o cabeçalho de host correto para o seu proxy, removendo a linha proxy_set_header Host $http_host .

Se a.b estiver configurado como um nome de servidor em seu bloco de servidores, você nem precisará da diretiva proxy_redirect se usar uma barra no prefixo de local e na meta proxy_pass , conforme explicado na documentação :

Syntax:  proxy_redirect default;
         proxy_redirect off;
         proxy_redirect redirect replacement;
Default: proxy_redirect default;
Context: http, server, location

[ ...]

The default replacement specified by the default parameter uses the parameters of the location and proxy_pass directives. Hence, the two configurations below are equivalent:

location /one/ {
    proxy_pass     http://upstream:port/two/;
    proxy_redirect default;
}

location /one/ {
    proxy_pass     http://upstream:port/two/;
    proxy_redirect http://upstream:port/two/ /one/;
}

[ ....]

Então, isso deve ser feito:

server {

    server_name a.b;

    location /c/ {       
        proxy_pass http://username.github.io/project/;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_buffering off;
    }

}
    
por 12.11.2014 / 10:34
0

use

proxy_redirect off;

Então suas configurações serão

location /c {

    proxy_pass http://username.github.io/project;
    proxy_redirect http://username.github.io;
    proxy_set_header Host username.github.io;
    proxy_set_header X-Host username.github.io;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_buffering off;
}
    
por 04.06.2014 / 13:30