web-dev-qa-db-fra.com

Utilisez le proxy inverse Nginx pour la redirection

J'ai a.b Domaine (par exemple) et souhaitez desservir des pages GitHub (username.github.io/project) dans a.b/c. Cela signifie que je veux aussi garder l'URL de mon navigateur à a.b/c et montrer le contenu de username.github.io/project.

J'ai des paramètres suivants dans le module 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;
}

si je change proxy_set_header Host $http_Host à proxy_set_header Host $proxy_Host ou $Host, il suffit de rediriger à http://username.github.io/project qui n'est pas je voulais dire. Comment puis-je faire?

4
Jongsu Liam Kim

Envoyez simplement l'en-tête d'hôte droit à votre cible proxy par Suppression Le proxy_set_header Host $http_Host ligne.

Si a.b est configuré comme nom de serveur dans votre bloc serveur, alors vous n'avez même pas besoin de proxy_redirect Directive Si vous utilisez une barre oblique de fuite dans votre préfixe de localisation et dans votre proxy_pass cible comme expliqué dans la documentation :

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

[...]

Le remplacement par défaut spécifié par le paramètre par défaut utilise les paramètres de l'emplacement et des directives proxy_pass. Par conséquent, les deux configurations ci-dessous sont équivalentes:

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/;
}

[....]

Donc, cela devrait le faire:

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;
    }

}
9
Xavier Lucas

utilisation

proxy_redirect off;

Donc, vos paramètres seront

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;
}
0
mohit