nginxsinatrathin

How do I configure nginx correctly to work with my Sinatra app running on thin?


I have a Sinatra app (app.rb) that resides within within /var/www/example. My setup is nginx, thin, and sinatra.

I have both nginx and thin up and running but when I navigate to my site, I get a 404 from nginx. I assume that the server block config is wrong. I've tried pointing root to /var/www/example/ instead of public but that makes no difference. I don't think the request makes it as far as the sinatra app.

What am I doing wrong?

Server block:

server {
        listen 80;
        listen [::]:80;

        root /var/www/example/public;
        index index.html index.htm index.nginx-debian.html;

        server_name example.com www.example.com;

        location / {
                try_files $uri $uri/ =404;
        }
}

config.ru within /var/www/example directory:

require File.expand_path('../app.rb', __FILE__)
run Sinatra::Application

config.yml within /var/www/example directory:

---
 environment: production
 chdir: /var/www/example
 address: 127.0.0.1
 user: root
 group: root
 port: 4567
 pid: /var/www/example/pids/thin.pid
 rackup: /var/www/example/config.ru
 log: /var/www/example/logs/thin.log
 max_conns: 1024
 timeout: 30
 max_persistent_conns: 512
 daemonize: true

Solution

  • You have to tell nginx to proxy requests to your Sinatra application. The minimum required to accomplish that is to specify a proxy_pass directive in the location block like this:

    location / {
      proxy_pass http://localhost:4567;
    }
            
    

    The Nginx Reverse Proxy docs have more information on other proxy settings you might want to include.