Proxy Nginx para uma nova vm sem afetar as antigas regras ativadas pelo site

1

Temos 3 servidores. Um é o proxy de front-end e, em seguida, há as VMs internas.

front-end / site-enabled / default

server {
        listen 80;
        rewrite ^(.*) https://$host$1 permanent;

        location / {
                proxy_pass              http://10.10.0.56;
                proxy_redirect          default;
                proxy_set_header        Host            $http_host;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location /beta {
                proxy_pass              http://10.10.0.63;
                proxy_redirect          default;
                proxy_set_header        Host            $http_host;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }

}

Agora a vm 10.10.0.63 é nova. Queremos rodar dois sistemas em paralelo.

Temos esse tipo de regra antiga na nova vm.

10.10.0.63/site-enabled/default

server {
    listen 80; 

    client_max_body_size 100M;
    server_name localhost 127.0.0.1;
    server_name_in_redirect off;

    location /api {
        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_pass http://localhost:5050;
        proxy_redirect default;
    }   

O problema é que existe uma maneira de visitar http://example.com/beta/api sem que tenhamos que alterar as regras em 10.10.0.63/site-enabled/default ? Ou seja, sem que precisemos escrever location /beta/api na regra do original location /api .

Podemos fazer isso com o nginx? Vamos nos livrar do sistema antigo em várias semanas e parece bobagem passar por todos os problemas para mudar o url (talvez tenhamos que editar muitos lugares no código-fonte!).

Obrigado.

Ainda não tenho uma boa solução, mas dei uma olhada nisso Como rápido e fácil remover parte de um URL no Nginx com HttpRewriteModule?

Eu removi beta . Parece que está funcionando.

    
por user1730053 04.03.2013 / 20:14

1 resposta

1

Basicamente eu disse ao advie aqui: Como remover parte rápida e fácil de um URL no Nginx com o HttpRewriteModule?

Suponha que o URL antigo seja http://example.com/api e você deseja manter a mesma configuração no nginx, mas a nova vm use http://example.com/beta/api e, em seguida, você poderá reutilizar a mesma configuração, exceto adicionar rewrite .

Então, em sites habilitados, eu tenho isso

server {
    listen 80;

    rewrite ^/beta(.*)$ $1 last; # strip out the beta
    .....
    location /api {
        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_pass http://localhost:5050;
        proxy_redirect default;
    }
    ....
}  
    
por 18.04.2013 / 19:19

Tags