nginx: upstream com várias diretivas de servidor?

14

Estou tentando empacotar dois aplicativos que usam nginx como proxy e entregam um arquivo de configuração em /etc/nginx/conf.d/ .

Fazer isso em um arquivo ( combined.conf ) funciona muito bem:

    upstream backend1 {
      http://localhost:8989;
    }

    upstream backend2 {
      http://localhost:8990;
    }

    server {
      location /backend1/ {
        proxy_pass  http://backend1;
      }
      location /backend2/ {
        proxy_pass  http://backend2;
      }

No entanto, ao dividir em dois arquivos, um dos redirecionamentos falha sistematicamente:

  • backend1.conf :

    upstream backend1 {
      http://localhost:8989;
    }
    
    server {
      location /backend1/ {
        proxy_pass  http://backend1;
      }
    
  • backend2.conf :

    upstream backend2 {
      http://localhost:8990;
    }
    
    server {
      location /backend2/ {
        proxy_pass  http://backend2;
      }
    

Então, minha pergunta é: um nó http pode ter dois server childs diferentes?

Nginx documentação não diz nada sobre isso.

Outras pessoas parecem ter bem sucedidas com esse tipo de arquitetura : (

A versão do Nginx é 1.1.19-1ubuntu0.1.

Obrigado por qualquer conselho!

    
por oDDsKooL 13.02.2013 / 11:07

2 respostas

8

depois de tão estrondoso & Testando, eu descobri uma maneira de fazer isso funcionar e poder enviar um arquivo de configuração por aplicativo.

Aqui está, despachado em um arquivo comum e em um par de arquivos upstream / location por aplicativo:

  • /etc/nginx/conf.d/common-proxies.conf :

    include /upstreams/*.conf;
    
    server {
    include /locations/*.conf
    }
    
  • /etc/nginx/locations/backend1.conf

    location /backend1/ {
      upstream http://backend1;
    }
    
  • /etc/nginx/locations/backend2.conf

    location /backend2/ {
      upstream http://backend2;
    }
    
  • /etc/nginx/upstreams/backend1.conf

    upstream backend1 {
      http://localhost:8989;
    }
    
  • /etc/nginx/upstreams/backend2.conf

    upstream backend2 {
      http://localhost:8990;
    }
    
por 13.02.2013 / 19:08
1

Um bloco http pode ter muitos filhos do servidor. No entanto, nginx seleciona um bloco de servidor para processar uma solicitação. Portanto, a solicitação nunca "vê" o local do backend2, porque corresponde ao primeiro bloco de servidor.

    
por 13.02.2013 / 11:43

Tags