Когда я устанавливаю заголовок хоста, отправленный на вышестоящий сервер, на $ 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/.