Problème avec la configuration nginx et les servers en amont

J'essaie de configurer deux applications pour être servies par nginx. Le premier semble fonctionner correctement et j'ai dupliqué la configuration pour la seconde, mais j'ai des problèmes.

Je gère un server Sinatra avec Unicorn en utilisant des sockets pour transmettre les informations en amont. Je peux atteindre le domaine racine bien (api.richardson.co.nz) et tout semble fonctionner ok, mais dès que j'essaie d'accéder à un path d'access au domaine racine (api.richardson.co.nz/games) I get une erreur «non trouvée».

Voici mon file nginx conf:

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 { listn 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 { listn 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; } } } 

Une erreur dans le server en amont entraînerait-elle un return "non trouvé"? Je suis tout à fait sûr que tout fonctionne au sein du server Sinatra mais j'ai peut-être manqué quelque chose.

Ajoutez une barre oblique à la fin de la valeur de racine.

 root /var/www/api/; 

De plus, je recommand d'envelopper 'try_files' dans un location.

 location / { try_files $uri/index.html $uri.html $uri @app; }