У меня следующая установка: Клиент => Прокси-сервер => Исходный сервер
Я использую следующие библиотеки Node.js для каждой из этих частей соответственно: изоморфный-выборка => http-прокси => http
Вот суть настройки в двух файлах, по одному для каждого из серверов и один для клиента: https://gist.github.com/headgency/850cbb199ff397c6da56fb8d86113a7e
Чтобы запустить это локально, запустите node server.js
в одной оболочке и node fetch.js
в другой оболочке.
Когда серверы работают, если я перейду к http://localhost:8818
в браузере, я получу образец ответа {"a":"b"}
, так что он работает. Если я перейду к http://localhost:9818
, я получу этот ответ также, поэтому проксирование, похоже, работает нормально. Однако, если я запускаю DEBUG=* node fetch.js
, который включает прокси-агент HTTP, запрос не выполняется (см. Вывод в https://gist.github.com/head apartments/850cbb199ff397c6da56fb8d86113a7e#file-failure-txt).
Без свойства agent
команда выборки отлично работает в командной строке. Как мне отладить эту ошибку зависания сокета?
Оказывается, я недостаточно внимательно читал документы https-прокси-агент. Эта строка немного сбивает с толку: An HTTP(s) proxy http.Agent implementation for HTTPS
- сам ПРОКСИ может быть либо HTTP, либо HTTPS, но исходный сервер должен быть HTTPS для этого варианта прокси-агента. Для исходного сервера HTTP мне пришлось использовать http-прокси-агент. Таким образом, зависание сокета, вероятно, исходило от https.Agent, пытающегося получить доступ к конечной точке HTTP. Это сработало, когда я перешел на http-proxy-agent.