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

В nginx - когда я устанавливаю заголовок хоста, отправляемый на вышестоящий сервер, на $ proxy_host, URL-адрес изменяется в браузере на исходный URL-адрес.

Когда я устанавливаю заголовок хоста, отправленный на вышестоящий сервер, на $ proxy_host, я получаю запрошенную страницу, но URL-адрес изменяется в браузере на исходный URL-адрес.

...
proxy_set_header Host $proxy_host;
proxy_pass ...

приведенное выше работает нормально, за исключением того, что URL-адрес в браузере изменяется и показывает URL-адрес восходящего потока вместо URL-адреса, введенного пользователем - мы хотим, чтобы URL-адрес пользователя отображался

Чтобы исправить это, когда я вместо этого отправляю $ host, я получаю сообщение об ошибке в браузере, что соединение было отклонено.

...
proxy_set_header Host $host;
proxy_pass ...

Это дает ошибку в соединении, в которой было отказано - я не уверен, генерируется ли эта ошибка nginx или моим вышестоящим сервером. Я не очень контролирую то, что ожидает вышестоящий сервер, поскольку это вызов хранилища s3 (хранилища объектов) через http на DO.

Есть ли способ определить причину ошибки, и если она исходит от вышестоящего сервера, как я могу заставить пользователя получить тот же URL-адрес в своем браузере, передавая $ proxy_host вышестоящему серверу?

Влияет ли передача $ proxy_host в восходящий поток на браузер пользователя? По какому механизму ?? Должно ли это повлиять не только на то, что идет на вышестоящий сервер? Почему меняется поведение браузера? Кто-нибудь может пролить свет на это поведение? Заранее спасибо.

* РЕДАКТИРОВАТЬ - включая полный контекст сервера ниже по запросу:

server {
        listen       80;
        server_name  example.com;
        location / {
        rewrite ^(.*)/$ $1/index.html break;
        rewrite ^(.*/[^./]+)$ $1/index.html break;
        proxy_set_header Host $proxy_host;
        proxy_pass http://someotherexample.com;
        }
}

Тайна разгадана! Публикация здесь, чтобы это могло помочь кому-то в подобной ситуации в любой момент в будущем ...

Проблема заключалась в том, что https «апгрейд» автоматически происходил в восходящем потоке и настраивал заголовки hsts. Эти заголовки передавались браузеру на стороне клиента, вынуждая его сделать еще один запрос с https, который мой серверный блок, прослушивающий порт 80, не обрабатывал, что вызывало аномалии.

Я изменил вызов proxy_pass на https, что решило проблему, потому что затем восходящий поток прекратил попытки принудительного применения https, отправляя заголовки, из-за которых клиентская сторона работала неуверенно и делала неожиданные вещи. Теперь мой клиентский браузер по-прежнему выполняет http-вызов, который мы хотели как часть нашего общего дизайна, и мы получаем то, что хотели, в браузере, по-прежнему получая правильный контент в браузере, не показывая URL-адрес восходящего потока в браузере.

Это не имеет ничего общего с конфигурацией прокси-сервера и явно настраивается на восходящей стороне.

В общем, ваш исходный пост содержит несколько описанных проблем, поэтому вам следует разделить их на несколько вопросов. На большинство из них можно было ответить, просто открыв складскую документацию из http://nginx.org/en/docs/.