Nginx Reverse Proxy para outro Nginx (Sem proxy reverso)

0

Servidor proxy reverso Nginx (AWS) - > servidor nginx para página estática (homeip)

Eu tenho um servidor nginx que está servindo arquivos estáticos no ip da minha casa, atrás do pfsense. Se eu atingir o IP residencial, vejo o site que estou hospedando. Estou tentando colocar isso atrás de outro servidor proxy reverso nginx para que meu IP de casa não seja público. Então, eu tenho uma instância ec2 apenas executando o docker nginx com o servidor proxy reverso.

aqui está o meu nginx.conf:

  worker_processes 1;

  events { worker_connections 1024; }

   http {

         sendfile on;

         upstream docker-nginx {
         server <homeip>;
        }


         server {
               listen 80;

          location / {
           proxy_pass         http://docker-nginx;
           proxy_redirect     off;
           proxy_set_header   Host $host;
           proxy_set_header   X-Real-IP $remote_addr;
           proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header   X-Forwarded-Host $server_name;
        }
     }
  }

e meu arquivo docker:

   FROM nginx:alpine

   COPY nginx.conf /etc/nginx/nginx.conf

Comando Docker Run após compilação: docker run -p 80:80 reverseproxy

É muito direto. Eu tenho http para redirecionar https no meu servidor nginx em casa.

Agora, se eu acertar o meu nome de domínio, eu recebo servidor não pode ser alcançado. Se eu acertar o endereço IP da instância ec2 diretamente, o que obviamente tem 80 e 443 aberto, obtenho o servidor não encontrado.

e enrole meu endereço IP interno do contêiner me dá

<html> <head><title>301 Moved Permanently</title></head> <body bgcolor="white"> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx/1.10.0 (Ubuntu)</center> </body> </html>

O que estou fazendo de errado? Esta configuração está certa? Eu realmente apreciaria sua ajuda. Eu tentei a mesma configuração sem docker mas correndo nativamente como servidor proxy reverso, ainda não está funcionando :-(

    
por Jauyzed 13.06.2017 / 06:56

1 resposta

0

Ao solucionar esse tipo de problema, geralmente você precisa dar um passo de cada vez. Vou tentar resumir aqui, como todo o processo foi seguido via chat já ( transcrição ).

  1. Verifique se você pode se conectar do proxy ao host upstream. Nesse caso, você já tentou curl , o que mostra que ele pode se conectar, mas acertar um redirecionamento (veremos isso mais tarde). curl -L para seguir os redirecionamentos pode ser útil aqui, mas se você já apontou o nome DNS para o proxy reverso, isso pode fazer com que você fique preso em um loop.

  2. Verifique se o proxy reverso está escutando nas portas corretas. netstat -apnt4 é útil aqui (remova o 4 para mostrar o IPv6). Neste caso, porque você também queria HTTPS, você precisa ter certeza de que os dois tipos 80 e 443 estão ouvindo.

  3. Verifique se você pode se conectar ao proxy reverso. Se o proxy estiver escutando na porta correta e você ainda obtiver um erro connection refused , será hora de verificar as configurações do firewall (não se esqueça do firewall do provedor do servidor, por exemplo, através do painel de controle da AWS). Também pode ser útil usar a guia de rede do console do desenvolvedor do navegador para ver se você está concluindo com êxito a solicitação inicial, mas está sendo redirecionado para um link corrompido.

  4. Neste ponto, esperamos que você possa pelo menos se conectar ao proxy reverso e você sabe que o servidor tem conectividade com o seu upstream. Se ainda assim não funcionar, talvez você esteja recebendo uma resposta 502 Bad Gateway - isso normalmente significa que o nginx não pode falar com o upstream por algum motivo. Verifique seus registros: /var/log/nginx/error.log é o local padrão.

  5. Use o google e pesquise o erro relevante. Existem dois mais comuns:

    • Permissão negada durante a conexão ao upstream. Isso pode ocorrer porque o SELinux está impedindo que o nginx faça solicitações de rede de saída. Você precisará permitir .

    • SSL_do_handshake() com SSL23_GET_SERVER_HELLO:unknown protocol é comum porque você está tentando se conectar com HTTPS a uma porta HTTP ( 80 ). Nginx upsceams padrão para a porta 80 - você precisará especificar explicitamente 443 se quiser usar o HTTPS para se conectar ao upstream.

por 14.06.2017 / 09:14