Хотя мне удалось успешно настроить nginx для прокси-трафика HTTP (используя это руководство ), все попытки прокси-запросов HTTPS привели к коду 400 ( неверный запрос ).
Журналы отладки Nginx не помогли вообще:
2013/06/05 14:38:33 [info] 74946#0: *589
client sent invalid request while reading client request line, client: 127.0.0.1,
server: google.com, request: "CONNECT google.com:443 HTTP/1.1"
Каковы эти CONNECT
запросы? Возможно ли даже proxy_pass
HTTPS-запросы в nginx?
Обновить
Необходимо добавить, что прокси-сервер является частью моего рабочего процесса / инструментария веб-разработки. Это отличный способ для тестирования / отладки клиентского JavaScript в производственной среде (используя переписывание перед прокси).
Кроме того, язык конфигурации nginx, возможно, сам по себе является языком программирования. У него есть переменные!
Просто для пояснения: как я писал в ленте комментариев моего блога, nginx не обрабатывает вызовы методов CONNECT, которые используются для установления необработанного TCP-соединения с удаленным хостом через HTTP-прокси - что имеет смысл, учитывая, что nginx не должен работать в качестве прямого прокси-сервера, так или иначе, он работает довольно хорошо для обычного HTTP.
Nginx просто не знает, что делать с этими вызовами методов, поэтому сообщения об ошибках в журналах бесполезны. Я всегда обнаруживал, что использую privoxy для HTTPS: http://www.privoxy.org/ - его тоже очень легко настроить. Но все еще невозможно фильтровать или манипулировать содержимым реле HTTPS, потому что соединения HTTPS обрабатываются с помощью необработанного соединения с помощью метода CONNECT, и сервер не знает, что он передает.
источник
Если вы не возражаете против компиляции nginx из исходного кода, вы можете установить ngx_http_proxy_connect_module . Следующее сработало для меня в Debian 9 «Растянуть» на Raspberry Pi (после того, как я добавил URL-адреса deb-src в /etc/apt/sources.list и выполнил обновление apt-get):
Затем отредактируйте
/usr/local/nginx/conf/nginx.conf
и сделайте так, чтобы это выглядело так (я включил пример доменов, которые вы хотите заблокировать, который работает как с SSL, так и без SSL-прокси):Тогда беги
/usr/local/nginx/sbin/nginx
. Он вполне с радостью будет сосуществовать со стандартнымnginx
пакетом Debian, если вы также используете рабочий веб-сервер на порту 80 и не хотите рисковать этим (но обязательно запустите/usr/local
версию отдельно при загрузке); альтернативно, с большей конфигурацией вы можете запустить обе службы из скомпилированного вами nginx. Но если вы настроите свой скомпилированный nginx на порт, на который ваш брандмауэр пропускает трафик, будьте осторожны, вам придется проверять обновления безопасности nginx вручную, так как система пакетов Debian больше не будет делать это за вас.источник
Я просто следовал инструкциям Сайласа С. Брауна и смог собрать двоичный файл Nginx, который может работать с пересылкой и SSL. Я собрал все вместе в образ Docker. Dockerfile и его конфигурация находятся здесь, на GitHub: https://github.com/reiz/nginx_proxy .
Образ Nginx Docker в этом хранилище Docker Hub может обрабатывать SSL-соединения и пересылку: https://hub.docker.com/r/reiz/nginx_proxy/ .
источник