Use Nginx como Proxy Reverso para vários servidores

3

Estou tentando configurar o nginx como um proxy reverso para vários servidores na minha LAN. Eles devem sair na minha WAN com diferentes subdomínios. Minha configuração é assim:

@ReverseProxy:/etc/nginx/sites-enabled$ cat reverseproxy 
server { 
  server_name DOMAIN.eu;

  # app1 reverse proxy follow
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://10.0.2.5:80;

}

server { 
  server_name Subdomain.domain.eu;

  # app2 reverse proxy settings follow
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://10.0.2.33:80;
}

Mas estou recebendo este erro e não consigo mais ...

@ReverseProxy:/etc/nginx/sites-enabled$ nginx -t
nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
2009/01/04 12:22:13 [warn] 1302#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1
2009/01/04 12:22:13 [emerg] 1302#0: "proxy_pass" directive is not allowed here in /etc/nginx/sites-enabled/reverseproxy:8

nginx: arquivo de configuração /etc/nginx/nginx.conf teste falhou

    
por Daniel Guldberg Aaes 18.07.2015 / 00:04

2 respostas

6

Seu problema é que você está usando proxy_pass dentro de server block, o que não é permitido. Tente usar:

server {
    server_name Subdomain.domain.eu;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://10.0.2.33:80;
    }
}

dentro do seu bloco server . As opções de proxy não podem ser definidas em server level, conforme documentação do nginx diz.

Os outros problemas em seu log acontecem porque você tem de alguma forma o seu nginx sendo iniciado como um usuário comum, embora ele deva iniciar como root .

    
por 18.07.2015 / 00:12
4

Esse segmento resolveu meu problema, mas achei que seria útil para outras pessoas terem uma configuração concluída para ver. A seguinte configuração inverterá o proxy para os nomes de host app1.local e app2.local, em que app1 será encaminhado para outro aplicativo que atende na porta 3300 e o app2 será encaminhado para um aplicativo diferente que esteja escutando na porta 3000. Ele está em um arquivo aqui /etc/nginx/sites-available/two-applications.conf

server {
  server_name app1.local;

  location ~ {
    proxy_pass_header Authorization;
    proxy_pass http://localhost:3300;
    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_http_version 1.1;
    proxy_set_header Connection "";
    proxy_buffering off;
    client_max_body_size 0;
    proxy_read_timeout 36000s;
    proxy_redirect off;
  }
}

server {
  server_name app2.local;

  location ~ {
    proxy_pass_header Authorization;
    proxy_pass http://localhost:3000;
    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_http_version 1.1;
    proxy_set_header Connection "";
    proxy_buffering off; 
    client_max_body_size 0;
    proxy_read_timeout 36000s;
    proxy_redirect off;
  }
}

Além disso, esses nomes de host são criados e precisam estar em /etc/hosts da seguinte maneira para que eles funcionem:

127.0.0.1       app1.local
127.0.0.1       app2.local

Por questão de completude (como setup no Ubuntu Linux), este arquivo vive em /etc/nginx/sites-available/two-applications.conf e é linkado em simbolo em /etc/nginx/sites-enabled/two-applications.conf O nome do arquivo e o link simbólico pode ser qualquer coisa, é claro. Depois de atualizar essa execução, sudo service nginx reload selecionará a alteração.

    
por 29.07.2016 / 18:35