Рейтинг:0

nginx: использование proxy_set_header приводит к сбою восходящих подключений

флаг in

У меня есть очень простая настройка обратного прокси-сервера nginx для openstreetmaps:

рабочие_процессы 1;

журналы error_log/уведомление об ошибках.log;
логи pid/nginx.pid;

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

http {

  отложить_выход 0;
  
  log_format logresponsetime '$remote_addr - $remote_user [$time_local] "$request" $status $bytes_sent "$http_referer" "$http_user_agent" $request_time $upstream_response_time';
  
  access_log logs/access.log logresponsetime;
  резолвер 192.168.0.1 ipv6=выкл;

  #Настройки прокси по умолчанию:
  прокси_http_версия 1.1;
  proxy_set_header Соединение "";
  proxy_read_timeout 600;
  proxy_ssl_server_name включено;

  вверх по течению tile.openstreetmap.org {
    сервер tile.openstreetmap.org:443;
    поддержка активности 10;
    keepalive_time 5м;
  }
   
  сервер {
    слушать 480;
    access_log logs/osm.http.access.log logresponsetime;
    имя_сервера $имя хоста;

    место расположения / {
      резолвер 192.168.0.1 ipv6=выкл;
      
      proxy_set_header User-Agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/91.0.4472.77 Safari/537.36";

      proxy_pass https://tile.openstreetmap.org;
    }
  }
}

Есть строка для установки заголовка User-Agent, поскольку этого требует OSM, а мне нужна совместимость с клиентом, который не отправляет строку пользовательского агента. Однако, когда nginx устанавливает этот заголовок, примерно 10% запросов терпят неудачу (nginx возвращает клиенту 502), и мой журнал ошибок nginx заполняется следующим образом:

13.06.2021, 14:37:49 [ошибка] 67240#87020: *71 connect() failed (10060: попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или установленное соединение не удалось из-за подключения хост не ответил) при подключении к восходящему каналу, клиент: 127.0.0.1, сервер: сервер, запрос: «GET /16/64153/41313.png HTTP/1.1», восходящий поток: «https://151.101.166.217:443». /16/64153/41313.png", хост: "localhost:480"

Без proxy_set_header все нормально. Все запросы в этом случае выполняются из Chrome, поэтому пользовательский агент, видимый серверами OSM, должен быть одинаковым в обоих случаях. Версия nginx — 1.19.10 (Windows). Что я делаю не так?

Richard Smith avatar
флаг jp
Вам нужно поместить все ваши операторы `proxy_set_header` в один и тот же блок, если вы хотите, чтобы они все применялись. В вашей конфигурации есть два оператора proxy_set_header, и они находятся в разных блоках.
флаг in
спасибо @RichardSmith, проблема решена! очень признателен

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

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