Мне нужно настроить nginx как прокси https, но это не сработало:
$ export https_proxy="http://127.0.0.1:8081"
$ curl https://example.com
curl: (56) Received HTTP code 400 from proxy after CONNECT
Мой nginx.conf:
server {
listen 8081;
location / {
proxy_pass http://some.proxy.com:3128;
proxy_set_header Host $http_host;
}
}
Здесь есть недоразумение. Есть два типа http-прокси, которые представляют собой два совершенно разных животных: обратный прокси и прямой прокси. Не смешивайте их.
Прямой прокси-сервер виден для клиентской ОС (например, export https_proxy
) или браузер. Клиентская сторона знает, что ей нужно говорить немного по-другому, и прокси-сервер переадресации не ведет себя как обычный веб-сервер.
Обратный прокси - это почти обычный веб-сервер, и его поведение невидимо для клиентской стороны. Пример nginx: proxy_pass
. Есть несколько хитростей, чтобы использовать обратный прокси в качестве прямого http прокси ограниченным образом, но он совсем не работает как форвард https доверенное лицо из-за глагола CONNECT.
Таким образом, прокси-сервер переадресации лучше называть «прокси на стороне клиента». Обратный прокси будет «прокси на стороне сервера». (На мой взгляд, прямой / обратный прокси - ужасная номенклатура.)
Не используйте nginx в качестве прямого прокси. Он предназначен для использования в качестве обычного веб-сервера или обратного прокси.