Назад | Перейти на главную страницу

Nginx как https-прокси

Мне нужно настроить 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 в качестве прямого прокси. Он предназначен для использования в качестве обычного веб-сервера или обратного прокси.