Configurando o nginx para servir

1

Eu tenho um aplicativo rails hospedado no meu servidor aws e usando o nginx como um servidor proxy. Na mesma instância, estou executando um servidor de API na porta 3004. No arquivo nignx conf, fiz algumas alterações para que o conteúdo do servidor de APIs possa ser acessado por meio de domain.com/api, enquanto meu aplicativo de rails pode ser acessado via domain.com .

Quando eu acesso domínio.com/api eu vou ter uma lista de endpoints que eu posso acessar.Mas o problema é que eu tenho que acessar esses enpoints como este domínio / apicategories. Está incorreto. Eu tenho que acessá-los como este domínio / API / categorias. Abaixo está o meu arquivo nignx conf

    upstream postgrest {
      server localhost:3004;
      keepalive 64;
    }


    server {
      listen 80;
      server_name localhost;

      root /home/deploy/test/current/public;

      try_files $uri/index.html $uri @app;
      location /api {
         default_type  application/json;
         proxy_hide_header Content-Location;
         add_header Content-Location  /api$upstream_http_content_location;
         proxy_set_header  Connection "";
         proxy_http_version 1.1;
         proxy_pass http://postgrest/;


   }
    
por Raaz 26.02.2017 / 05:16

1 resposta

3

Como Tim ajudou você com comentários, estava faltando uma barra no final / no bloco localização .

Trecho da Documentação oficial do NGINX :

If a location is defined by a prefix string that ends with the slash character, and requests are processed by one of proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, or memcached_pass, then the special processing is performed. In response to a request with URI equal to this string, but without the trailing slash, a permanent redirect with the code 301 will be returned to the requested URI with the slash appended. If this is not desired, an exact match of the URI and location could be defined like this:

Portanto, estes dois não são iguais neste caso:

location /api/ {
    ...
}

IS NOT EQUAL WITH

location /api {
    ...
}

Mas se você quiser evitar esses erros nos casos em que precisar corresponder yourDomain / api ou yourDomain / api / como strings completas, use o seguinte regex correspondência:

location ~ ^/api/?$ {
    ...
}

O símbolo til ~ habilitará a correspondência de expressão regular e /? estará permitindo símbolos de / de uma barra ou zero antes do final da entrada.

    
por 26.02.2017 / 07:55

Tags