#node.js #proxy #openssl #apollo #http-proxy
#node.js #прокси #openssl #apollo #http-прокси
Вопрос:
Я настраиваю связь между моим сервером Apollo (Node) и REST API. Моя конечная точка является https://app.myproject.local/api/v1
и обслуживается через Hotel через файл Pacfile, доступный с http://localhost:2000/proxy.pac
.
На самом деле эта конечная точка также доступна с http://localhost:4000/api/v1
, но я хочу получить к ней доступ с помощью Hotel.
Я полагал, что app.myproject.local
не было бы решено, если бы я попытался получить к нему доступ непосредственно в приложении узла, поэтому я должен пройти через HttpsProxyAgent
и получить его оттуда.
import { RESTDataSource } from 'apollo-datasource-rest'
import HttpsProxyAgent from 'https-proxy-agent'
import { restConfig } from '../config/restConfig'
export class RestAPI extends RESTDataSource {
constructor() {
super()
this.baseURL = restConfig.endpoint
}
public willSendRequest(request: any) {
request.agent = new HttpsProxyAgent({
host: 'localhost',
port: 2000,
secureProxy: false,
rejectUnauthorized: false,
})
}
public async test() {
return this.get('/status')
}
}
Несмотря на наличие rejectUnauthorized
, выдает ошибку
(node:40593) UnhandledPromiseRejectionWarning: FetchError: request to https://app.myproject.local/api/v1/organizations/current failed, reason: write EPROTO 4474312128:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:332:
Когда я пытаюсь выполнить тот же тип выборки с помощью cURL, он работает с
curl --insecure --proxy http://localhost:2000/proxy.pac https://app.myproject.local/api/v1/status
Это может быть недоразумением с моей стороны, но я думал rejectUnauthorized
обойти эту проблему с SSL-сертификатом. На самом деле я использую это в среде разработки, поэтому это не имеет большого значения, в производстве мне не нужно проходить через все это.
Я использую документацию https://node.readthedocs.io/en/latest/api/tls/#tlsconnectport-host-options-callback чтобы помочь мне передать аргументы в HttpsProxyAgent
Ответ №1:
const https = require('https')
...
willSendRequest(request) {
request.agent = new https.Agent({ rejectUnauthorized: false })
}
...
Ответ №2:
proxy.pac — это файл, который сообщает веб-браузеру, какой прокси использовать для данного запроса. Обычно вы не используете его как прокси-сервер.