Localização Nginx = não funciona

1

Eu tenho dois sites que eu preciso atender: um estático e um dinâmico (aplicativo Rails, na verdade não importam). Estou pensando no seguinte:

solicita ao domínio.com/ = > Site estático

solicitações para domain.com/anything = > Site dinâmico

A diretiva de localização do Nginx parece perfeita para essa situação:

server {
  listen 80;
  server_name www.domain.com *.domain.com;

  # Static match. Any exact match enters here
  location = / {
    root /link/to/static/folder;
    index index.html;
  }

  # Dynamic match
  location / {
    root /link/to/dynamic/folder;
    proxy_pass unix_socket_defined_above;
  }
}

Mas sempre que faço uma solicitação para domain.com, ela é direcionada para a correspondência dinâmica. O que estou perdendo?

Editar: Embora não seja ideal, estou conseguindo a funcionalidade desejada com as seguintes declarações:

server {
  listen 80;
  server_name domain.com .domain.com;

  # Static match. Any exact match enters here
  location = / {
    root /link/to/static/folder;
    index index.html;
  }

  # Dynamic match, make sure the URL has
  # characters after the server name
  location ~ ^/..* {
    root /link/to/dynamic/folder;
    proxy_pass unix_socket_defined_above;
  }
}

mas tenho certeza de que há um "caminho certo" para realizar isso.

    
por jlhonora 25.03.2015 / 16:38

1 resposta

1

Sua diretiva server_name não corresponde a domain.com .

A forma *.domain.com é redundante com www.domain.com e não corresponde a domain.com . Use server_name .domain.com em vez disso.

Consequentemente, se você tiver um bloco de servidor padrão explícito ou um bloco de servidor que manipule solicitações para outros domínios incluídos antes deste, suas solicitações serão processadas nele.

Agora, se esse não for o caso, ele realmente processará domain.com/ e domain.com/anything solicitações, implicitamente sendo seu bloco de servidor padrão. Nesse caso, o arquivo index.html é exibido pelo segundo bloco de localização, pois a diretiva index emitirá um redirecionamento interno .

Então você precisa mudar isso:

location = / {
    root /link/to/static/folder;
    index index.html;
}

Para isso:

location ~ /(?:index.html)?$ {
    root /link/to/static/folder;
    index index.html;
}
    
por 25.03.2015 / 17:36

Tags