Рейтинг:0

Веб-сайт использует неправильный URL-адрес после проксирования через Nginx

флаг cn

Это мой первый раз, когда я использую nginx, и я нахожу эту ситуацию довольно загадочной. Мой сайт размещен на web.example.com а для достижения серверной части запросы направляются через nginx в качестве обратного прокси-сервера. После обработки через nginx URL меняется на URL сервера nginx (proxy.example.com) вместо того, чтобы быть URL-адресом веб-сайта.

Поток выглядит примерно так:

web.example.com -> nginx (proxy.example.com) -> серверная часть (service.example.com)

Когда я регистрирую запрос в серверной службе, я вижу, что для x-forwarded-host установлено значение proxy.example.com. Это правильно или надо поставить web.example.com здесь?

Файл nginx.conf:

События {
    worker_connections 1024;
}

http {
    включить /etc/nginx/mime.types;
    default_type application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] $status '
        '"$request" $body_bytes_sent "$http_referer" '
        '"$http_user_agent" "$http_x_forwarded_for"';

    access_log logs/access.log основной;

    server { # простой обратный прокси
        слушать 80;
        имя_сервера proxy.example.com;

        местоположение/сайт {
            proxy_set_header Хост $http_host;
            proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
            proxy_set_header x-forwarded-host $host;
            proxy_set_header x-forwarded-server $host;
            proxy_set_header x-real-ip $remote_addr;
            proxy_pass_request_headers включен;
            proxy_pass http://service.example.com$request_uri;
        }
    }
}

Как получить URL для возврата web.example.com/сайт после прохождения этого потока вместо отображения как proxy.example.com/сайт?

Спасибо.

Michael Hampton avatar
флаг cz
Эта конфигурация выглядит правильной. В чем именно вы видите проблему? Быть конкретной.
флаг cn
@MichaelHampton проблема в том, что URL-адрес прокси-сервера открыт. Почему это происходит? Я хочу, чтобы URL-адрес оставался web.example.com.
Michael Hampton avatar
флаг cz
Что именно ты имеешь ввиду? Расплывчатое описание бесполезно.
флаг cn
URL-адрес в адресной строке браузера меняется с web.example.com на proxy.example.com, чтобы конечные пользователи могли видеть URL-адрес прокси-сервера. Я не думаю, что это должно произойти
Michael Hampton avatar
флаг cz
Хорошо, теперь я понял. Однако это не вызвано nginx; это ваш бэкенд.
флаг cn
@Майкл Хэмптон, можешь рассказать больше? Как мой сервер изменит URL-адрес в адресной строке?
Michael Hampton avatar
флаг cz
Никто из нас не может знать; это ваш бэкенд, и вы ничего не сказали о том, что это такое.
флаг cn
Backend — это Java-приложение, работающее на Tomcat 9. Я регистрирую заголовки, поступающие в это приложение, и вижу, что для заголовков x-forward-* установлено значение `proxy.example.com`
Michael Hampton avatar
флаг cz
Какой заголовок? Опять же, будьте конкретны.
флаг cn
x-forward-host и x-forward-for оба установлены на proxy.example.com
Michael Hampton avatar
флаг cz
Это не соответствует показанной вами конфигурации nginx. Что еще есть в этом стеке? На этот раз расскажите нам все и не упустите важные детали.
флаг cn
@MichaelHampton да, я добавил еще несколько заголовков при отладке.
флаг ar
Не могли бы вы подробнее рассказать о своем стеке? Вы говорите, что у вас есть веб-сайт по адресу `web.example.com`, и вы используете nginx в качестве обратного прокси-сервера для `service.example.com`, поэтому ваш веб-сайт обслуживается сервером nginx, а контекст `/site` проксируется на бэкэнд или у вас есть предыдущий элемент до этого nginx? Если у вас его нет, почему сервер nginx внутри называется proxy.example.com, а не web.example.com?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.