Como usar o Nginx como um servidor proxy HTTP / HTTPS? [fechadas]

16

É possível usar o Nginx como um proxy HTTP / HTTPS?

vlad
fonte

Respostas:

14

Após alguns testes, descobri trabalhando para mim a seguinte configuração.

server {
  server_name ~^(www\.)?(?<domain>.+)$;
  access_log /var/log/nginx/proxy.access.log main;
  error_log /var/log/nginx/proxy.error.log crit;
  listen 10.255.1.13:8080;
  resolver 8.8.8.8;
  location / {
    proxy_pass http://$domain;
    proxy_redirect off;
    proxy_set_header Host $host;
    # Optional headers 
    # proxy_set_header X-Real-IP $remote_addr;
    # proxy_set_header X-Forwarded-For
    # $proxy_add_x_forwarded_for;
  }
}

Essa configuração funciona apenas para HTTP, não para HTTPS.

vlad
fonte
4
Bom trabalho! Algumas dicas. 1: listen ... default_server. 2: server_name ""ou server_name _. 2: proxy_pass $scheme://$http_host. As limitações: enviá-lo para upstream com apenas porta 80; não processa redireciona a si próprio.
Alexander Azarov
$ esquema só é útil se as escutas vhost em https também - mas então você tem homem nos riscos média e https erros de certificado de enfrentar ... ambos são problemas de segurança grandes a considerar
anthonysomerset
8

Eu acho que a resposta curta é não, não foi escrita para proxies avançados

ATUALIZAR

para esclarecer minha afirmação acima:

O NGINX nunca foi escrito com o proxy avançado em mente - embora seja remotamente possível, de alguma forma, manipular a configuração para fazer o que você deseja, você terá que entender as seguintes limitações:

  • Suporte a cache quase inexistente (um dos principais motivos para usar um proxy)
  • Não é possível usar para qualquer coisa que não seja o tráfego da porta 80 (ou seja, não há logon nas caixas cpanel através dele)
  • Não há suporte para tráfego baseado em SSL
  • Não há suporte para cabeçalhos de proxy padrão e cabeçalhos de cache http (meu entendimento é que esses apenas são passados ​​por
  • Não há suporte para outros protocolos que suportam servidores proxy - por exemplo, VPN etc.

Possíveis outras considerações desconhecidas no momento:

  • É possível executar DoS seu proxy como nenhuma capacidade real de controle / autenticação de acesso granular (o nginx oferece suporte a diferentes métodos de controle de acesso, mas não está claro como isso pode se comportar no contexto do proxy de encaminhamento)
  • Possíveis riscos de segurança para a máquina na qual o nginx está instalado porque pode haver possíveis falhas de segurança não consideradas devido ao uso de uma maneira que não foi projetada para executar
anthonysomerset
fonte
Contraexemplo, consulte: ef.gy/using-nginx-as-a-proxy-server
kkurian
talvez a minha resposta deveria ter sido mais claro que não era projetado para fazer frente proxy - esforços remendo macaco não oferecerá suporte a proxy completo como proxy pedidos de não padrão (porta 80) portas
anthonysomerset
3

Se você deseja usar um proxy HTTP / HTTPS, deve usar o Squid. Foi escrito para fazer exatamente isso. O Nginx foi criado para atuar como um proxy reverso e um balanceador de carga, mas não como um proxy de encaminhamento.

MikeyB
fonte
Eu sei sobre squid / oops / tinyproxy / etc. Eu só fazer esta pergunta por causa do interesse acadêmico
Vlad