Наш сервер документации на code.kx.com использует NGINX 1.12.2 под CentOS для обслуживания статического HTML. Брандмауэр разрешает только SSH, HTTP, HTTPS. Наша система пользовательского поиска работает как HTTP-сервер на порту 5023 на том же компьютере.
Файл конфигурации NGINX перенаправляет HTTP на HTTPS.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name code.kx.com;
return 301 https://$server_name$request_uri;
}
Он также выполняет обратные прокси-запросы поисковых запросов по HTTP в поисковую систему, которая возвращает HTML.
# Reverse-proxy to kxsearch-v2 service * 2018.12.21
location /v2/search {
proxy_pass http://127.0.0.1:5023/q/search;
}
HTTP-ответ выглядит как code.kx.com:80, как видно из
curl -i https://code.kx.com/v2/search?query=iasc
Проблема Посетители, находящиеся за тремя разными корпоративными прокси-серверами, сообщают, что видят открытый IP-адрес поисковой системы. (Это, конечно, тот же IP-адрес, что и code.kx.com.) В двух случаях их прокси-серверы запрещают доступ к IP-адресу. В третьем случае браузер предупреждает о переключении с HTTP на HTTP, а затем снова о переключении обратно на HTTPS перед отображением страницы результатов.
Такое поведение выглядит так, как если бы браузеры были перенаправлены на внутренний сервер.
В документации NGINX ничего подобного не упоминается. Вопрос 750605 имеет аналогичную конфигурацию, но пытается выполнить только перенаправление.
Оказывается, это дубликат вопроса Unix / Linux Перенаправление обратного прокси-сервера Nginx .
Ключевая часть ответа:
proxy_set_header Referer $http_referer;
Это устанавливает поле Referer
, отправляемое моей поисковой системе. Очевидно, ответ, отправляемый браузеру, зависит от заголовков в ответе поисковой системы, и мне нужно лучше понять его.