Problemas com a configuração do nginx e servidores upstream

2

Estou tentando configurar dois aplicativos para serem atendidos pelo nginx. O primeiro parece estar funcionando bem e eu dupliquei a configuração para o segundo, no entanto estou tendo alguns problemas.

Estou executando um servidor Sinatra com backup do Unicorn usando sockets para passar as informações de upstream. Eu posso chegar ao domínio raiz bem (api.richardson.co.nz) e tudo parece estar funcionando ok, no entanto, assim que eu tento acessar um caminho fora do domínio raiz (api.richardson.co.nz/games) eu obter um erro "não encontrado".

Aqui está o meu arquivo conf nginx:

worker_processes 1;
user nginx web;
pid /tmp/nginx.pid;
error_log /var/www/knowyourgenre.com/shared/log/nginx.error.log;

events {
  worker_connections 1024; # increase if you have lots of clients
  accept_mutex off; # "on" if nginx worker_processes > 1
  use epoll; # enable for Linux 2.6+
}

http {
  include mime.types;
  default_type application/octet-stream;
  access_log /tmp/nginx.access.log combined;
  sendfile on;
  tcp_nopush on; # off may be better for *some* Comet/long-poll stuff
  tcp_nodelay off; # on may be better for some Comet/long-poll stuff
  gzip on;
  gzip_http_version 1.0;
  gzip_proxied any;
  gzip_min_length 500;
  gzip_disable "MSIE [1-6]\.";
  gzip_types text/plain text/html text/xml text/css
             text/comma-separated-values
             text/javascript application/x-javascript
             application/atom+xml;

  upstream app_server {
    server unix:/var/www/knowyourgenre.com/current/unicorn.sock fail_timeout=0;
    server localhost:8080 fail_timeout=0;
  }

  upstream api {
    server unix:/var/www/api/unicorn.sock fail_timeout=0;
    server localhost:8081 fail_timeout=0;
  }

  server {
    listen 80; # for Linux
    client_max_body_size 4G;
    server_name .knowyourgenre.com;
    keepalive_timeout 5;
    root /var/www/knowyourgenre.com/current/public/;
    try_files $uri/index.html $uri.html $uri @app;

    location @app {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_pass http://app_server;
    }

    error_page 500 502 503 504 /500.html;
    location = /500.html {
      root /path/to/app/current/public;
    }
  }

  server {
    listen 80; # for Linux
    client_max_body_size 4G;
    server_name .richardson.co.nz;
    keepalive_timeout 5;
    root /var/www/api;
    try_files $uri/index.html $uri.html $uri @app;

    location @app {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_pass http://api;
    }

    # Rails error pages
    error_page 500 502 503 504 /500.html;
    location = /500.html {
      root /path/to/app/current/public;
    }
  }

}

Um erro no servidor upstream faria com que um "não encontrado" fosse retornado? Tenho certeza que tudo está funcionando dentro do servidor Sinatra, mas eu posso ter perdido alguma coisa.

    
por Samuel 30.07.2011 / 04:25

1 resposta

1

Adicione uma barra ao final do valor da raiz.

root /var/www/api/;

Além disso, recomendo agrupar "try_files" em um local.

location / {
    try_files $uri/index.html $uri.html $uri @app;
}
    
por 30.07.2011 / 08:51