Embora eu tenha conseguido configurar com êxito o nginx para proxy do tráfego HTTP (usando este guia ), todas as tentativas de proxy das solicitações HTTPS resultaram no código 400 ( Solicitação incorreta ).
Os logs de depuração do Nginx não foram úteis:
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"
Quais são esses CONNECT
pedidos? É possível até proxy_pass
solicitações HTTPS no nginx?
Atualizar
É necessário adicionar que um servidor proxy faz parte do meu fluxo de trabalho / kit de ferramentas de desenvolvimento da web. É uma ótima maneira de testar / depurar JavaScript do lado do cliente no ambiente de produção (usando reescritas antes do proxy).
Também a linguagem de configuração do nginx é sem dúvida uma linguagem de programação por si só. Tem variáveis!
Apenas para esclarecer: como escrevi no feed de comentários do meu blog, o nginx não lida com chamadas do método CONNECT que são usadas para estabelecer uma conexão TCP bruta com um host remoto por meio de um proxy HTTP - o que faz sentido, considerando que o nginx não deve funcionar como um proxy de encaminhamento, ele funciona muito bem para HTTP comum, independentemente.
O Nginx literalmente não tem idéia do que fazer com essas chamadas de método, é por isso que as mensagens de erro nos logs são bastante inúteis. Sempre me vi usando o privoxy para HTTPS: http://www.privoxy.org/ - também é incrivelmente fácil de configurar. Mas ainda é impossível filtrar ou manipular o conteúdo de retransmissões HTTPS, porque as conexões HTTPS são tratadas com uma conexão bruta através do método CONNECT e o servidor não tem idéia do que está retransmitindo.
fonte
Se você não se importa de compilar o nginx a partir da fonte, pode instalar o ngx_http_proxy_connect_module . O seguinte funcionou para mim no Debian 9 "Stretch" em um Raspberry Pi (depois de adicionar URLs deb-src ao /etc/apt/sources.list e atualizar o apt-get):
Em seguida, edite
/usr/local/nginx/conf/nginx.conf
e faça com que fique assim (incluí um exemplo de domínios que você deseja bloquear, que funciona com proxies SSL e não SSL):Então corra
/usr/local/nginx/sbin/nginx
. Felizmente coexistirá com onginx
pacote de ações do Debian se você também estiver executando um servidor Web de produção na porta 80 e não quiser arriscar mexer com isso (mas certifique-se de iniciar a/usr/local
versão separadamente na inicialização); Como alternativa, com mais configurações, você pode executar os dois serviços a partir do nginx que você compilou. Mas se você configurar seu nginx compilado para rodar em uma porta que seu firewall permita tráfego, tenha cuidado para verificar manualmente as atualizações de segurança do nginx, pois o sistema de pacotes Debian não fará mais isso por você.fonte
Acabei de seguir as instruções de Silas S. Brown e consegui compilar um binário Nginx que pode lidar com encaminhamento e SSL. Agrupei tudo em uma imagem do Docker. O Dockerfile e a configuração estão aqui no GitHub: https://github.com/reiz/nginx_proxy .
A imagem do Nginx Docker neste repositório do Docker Hub pode lidar com a conexão e o encaminhamento SSL: https://hub.docker.com/r/reiz/nginx_proxy/ .
fonte