Chociaż udało mi się skonfigurować nginx do proxy ruchu HTTP (korzystając z tego przewodnika ), wszystkie próby proxy żądań HTTPS zakończyły się kodem 400 ( Błędne żądanie ).
Dzienniki debugowania Nginx wcale nie były pomocne:
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"
Jakie są te CONNECT
prośby? Czy możliwe jest nawet proxy_pass
żądanie HTTPS w Nginx?
Aktualizacja
Muszę dodać, że serwer proxy jest częścią mojego przepływu pracy / zestawu narzędzi do tworzenia stron WWW. To świetny sposób na przetestowanie / debugowanie kodu JavaScript po stronie klienta w środowisku produkcyjnym (przy użyciu przepisywania przed serwerem proxy).
Również język konfiguracji nginx jest prawdopodobnie własnym językiem programowania. Ma zmienne!
Tylko dla wyjaśnienia: jak napisałem na kanale komentarzy na moim blogu, nginx nie obsługuje wywołań metody CONNECT, które są używane do ustanowienia surowego połączenia TCP ze zdalnym hostem za pośrednictwem proxy HTTP - co ma sens, biorąc pod uwagę, że nginx nie powinien działa jako forward proxy, po prostu zdarza się, że działa całkiem dobrze dla zwykłego HTTP, niezależnie.
Nginx dosłownie nie ma pojęcia, co zrobić z tymi wywołaniami metod, dlatego komunikaty o błędach w dziennikach są raczej bezużyteczne. Zawsze używałem privoxy dla HTTPS: http://www.privoxy.org/ - jest również niesamowicie łatwy do skonfigurowania. Ale nadal nie można filtrować ani zmieniać zawartości przekaźników HTTPS, ponieważ połączenia HTTPS są przetwarzane przy użyciu połączenia raw metodą CONNECT, a serwer nie ma pojęcia, co przekazuje.
źródło
Jeśli nie masz nic przeciwko kompilowaniu nginx ze źródła, możesz zainstalować ngx_http_proxy_connect_module . Poniższe działało dla mnie w Debian 9 „Stretch” na Raspberry Pi (po tym, jak dodałem adresy URL deb-src do /etc/apt/sources.list i zrobiłem apt-get update):
Następnie edytuj
/usr/local/nginx/conf/nginx.conf
i spraw, aby wyglądał tak (podałem przykład domen, które chcesz zablokować, który działa zarówno z proxy SSL, jak i bez SSL):Potem biegnij
/usr/local/nginx/sbin/nginx
. Z przyjemnością będzie współistniał znginx
pakietem podstawowym Debiana, jeśli również uruchomisz produkcyjny serwer WWW na porcie 80 i nie chcesz ryzykować z tym bałaganem (ale pamiętaj, aby uruchomić/usr/local
wersję osobno podczas uruchamiania); alternatywnie, przy większej konfiguracji możesz uruchomić obie usługi z skompilowanego nginx. Ale jeśli ustawisz skompilowane nginx do pracy na porcie, na który zapora zezwala na ruch, uważaj, abyś musiał ręcznie sprawdzać aktualizacje zabezpieczeń nginx, ponieważ system pakietów Debiana nie zrobi tego za ciebie.źródło
Postępowałem zgodnie z instrukcjami Silasa S. Browna i udało mi się skompilować plik binarny Nginx, który może obsługiwać przekazywanie i SSL. Wszystko połączyłem w obraz Dockera. Plik Docker i konfiguracja są dostępne na GitHub: https://github.com/reiz/nginx_proxy .
Obraz Nginx Docker w tym repozytorium Docker Hub może obsługiwać połączenie SSL i przekazywanie: https://hub.docker.com/r/reiz/nginx_proxy/ .
źródło