Назад | Перейти на главную страницу

Используйте обратный прокси-сервер nginx для перенаправления

у меня есть a.b домен (например) и хотите обслуживать некоторые страницы github (username.github.io/project) в a.b/c. Это означает, что я также хочу сохранить URL-адрес своего браузера a.b/c и отображение содержимого username.github.io/project.

У меня следующие настройки в модуле 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;
}

если я изменю proxy_set_header Host $http_host к proxy_set_header Host $proxy_host или $host, он просто перенаправляет на http://username.github.io/project что не я имел в виду. Как я могу сделать?

Просто отправьте правильный заголовок Host вашей цели прокси, удаление в proxy_set_header Host $http_host линия.

Если a.b настроен как имя сервера в вашем блоке сервера, тогда вам даже не нужно proxy_redirect директиве, если вы используете завершающую косую черту в префиксе местоположения и в proxy_pass цель как объяснено в документации :

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

[...]

Замена по умолчанию, указанная параметром по умолчанию, использует параметры директив location и proxy_pass. Следовательно, две приведенные ниже конфигурации эквивалентны:

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

[....]

Итак, это должно сделать это:

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

}

использовать

proxy_redirect off;

Итак, ваши настройки будут

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