Sem resposta no NGINX ao usar upstream

1

Estou tentando balancear a carga de um aplicativo da web por meio do nginx. Ele funciona bem para todos, pois meu aplicativo da web chama um serviço com sub-caminho.

por exemplo, funciona

http://example.com/luna/ 

mas não para

 http://example.com/luna/sales

Meu nginx.conf

user  nobody;
worker_processes  auto;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

     map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }

    upstream lunaups {
        server myhostserver1.com:8080;
        server myhostserver2.com:8080;
    }


    server {
        listen       80;
        server_name  example.com;

        proxy_pass_header Server;

        location = / {
             rewrite ^ http://example.com/luna redirect;
         }

        location /luna {
            rewrite ^$/luna/(.*)/^ /$1 redirect;
            proxy_pass http://lunaups;
            #add_header  X-Upstream  $upstream_addr;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

meu aplicativo da web chama um serviço com subpath adicional, como / luna / sales falha ao retornar a resposta. O que eu sinto falta aqui?

Funciona se eu remover um dos meus servidores host do upstream, mas quando eu adiciono um segundo host no upstream, ele não retorna a resposta.

A regra de reescrita está errada ou minhas configurações estão erradas?

    
por Karthick Radhakrishnan 16.09.2016 / 09:01

1 resposta

0

Sua regra de reconfiguração redireciona o navegador da Web de /luna/sales para /sales . Isso significa que o navegador da Web faz uma nova solicitação HTTP para /sales , mas você não tem o bloco location que corresponde a /sales , portanto, você recebe um erro 404.

Acredito que o que você realmente está tentando fazer é mudar o URI que é proxied para o upstream. Em caso afirmativo, você pode tentar alterar seu bloco location :

location ~ /luna(?<upstream_uri>(/.*)?) {
    proxy_pass http://lunaups/$upstream_uri;
}

Isso corresponderá a /luna ou /luna/whatever , vinculará a subexpressão correspondente como $upstream_uri e enviará apenas essa subexpressão para seu autor.

    
por 16.09.2016 / 09:07