Nginx proxy_pass todas as rotas não api

1

Minha configuração nginx precisa direcionar todas as solicitações que não são /api/ para http://198.xxx.xxx.xx:8080/ . Quando eu visito / , tudo está bem. Eu posso visitar qualquer uma das rotas fornecidas pelo meu front-end. No entanto, quando clico em atualizar, a rota não é encontrada.

Eu percebo que eu poderia adicionar todas as rotas manualmente a proxy_pass da raiz. Obviamente, isso seria tedioso. Deve haver um erro ou uma maneira melhor de configurar minha configuração nginx.

Aqui está minha configuração:

upstream app_server {
    server unix:/var/run/unicorn.sock fail_timeout=0;
}

server {
    listen   80;
    server_name xxxxxxxxxxxxxxxx.com;

    location ~* ^.+\.(jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|mp3|flv|mpeg|avi)$ {
            try_files $uri @app;
    }

    location ^~ /api/ {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwaded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass http://app_server/api/;
    }

    location /about {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass http://198.xxx.xxx.xx:8080/;
    }

    location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass http://198.xxx.xxx.xx:8080/;
    }
}

Quando visito /about e atualizo a página, ela é carregada corretamente. Mas fazendo o mesmo com qualquer outra rota (excluindo a raiz / home) dá uma página em branco e mostra como um 404 em meus logs do servidor. Como posso definir todos os caminhos que não são /api/ para proxy_pass para http://198.xxx.xxx.xx:8080/ ?

    
por Louis Cruz 26.03.2016 / 20:27

1 resposta

1

Eu tentaria uma abordagem um pouco diferente:

upstream app_server {
    server unix:/var/run/unicorn.sock fail_timeout=0;
}

server {
    listen 80;
    server_name xxxxxxxx.com;

    location / {
        try_files $uri $uri/ @app;
    }

    location /api/ {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwaded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://app_server/api;
    }

    location @app {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://198.xxx.xxx.xx:8080;
    }
}

Então, aqui especificamos o bloco "pega-tudo" para ser @app, que encaminha solicitações que não correspondem a nenhum arquivo do sistema de arquivos para o 198.xxx.xxx.xx:8080 .

Em seguida, temos um bloco location /api/ separado, que corresponde a todas as solicitações que começam com URI /api . Esses são então intermediados por proxy para o app_server .

    
por 27.03.2016 / 01:18

Tags