Nginx como proxy de encaminhamento para HTTPS


23

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 CONNECTpedidos? É possível até proxy_passsolicitaçõ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!

https  nginx  proxy 

Respostas:


17

Parece que o nginx não suporta o modo proxy de encaminhamento com SSL. Você precisará usar algo como o Squid . Aqui está um link com mais explicações do autor do nginx: HTTPS e nginx como Forward Proxy.


1
Obrigado! O tópico que você vinculou tem 4 anos, mas também me parece que ainda é impossível.

Se você precisar de um proxy para depuração, tente mitmproxy.
Zorayr 06/06/2013

7

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.


2

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):

cd /tmp &&
apt-get source nginx &&
git clone https://github.com/chobits/ngx_http_proxy_connect_module &&
cd nginx-* &&
patch -p1 < ../ngx_http_proxy_connect_module/proxy_connect.patch &&
sudo apt-get install libpcre3-dev &&
./configure --add-module=/tmp/ngx_http_proxy_connect_module &&
make && sudo make install

Em seguida, edite /usr/local/nginx/conf/nginx.confe 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):

user www-data;
worker_processes auto;
events { }
http {
    server_names_hash_bucket_size 128;
    server {
        listen       8888;
        server_name  spam.example.com *.spam.example.com;
        server_name  spam2.example.com *.spam2.example.com;
        access_log off;
        return 404;
    }
    server {
        listen       8888;
        server_name ~.+;
        proxy_connect;
        proxy_max_temp_file_size 0;
        resolver 8.8.8.8;
        location / {
           proxy_pass http://$http_host;
           proxy_set_header Host $http_host;
        }
    }
}

Então corra /usr/local/nginx/sbin/nginx. Felizmente coexistirá com o nginxpacote 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/localversã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ê.


Eu tive que ajustar alguns dos comandos, mas no geral sua resposta funcionou para mim. Muito Obrigado!
22717 Robert Reiz

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.