如何正确配置 nginx 以在 thin 上与我的 Sinatra 应用程序 运行 一起工作?

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

我有一个位于 /var/www/example 中的 Sinatra 应用程序 (app.rb)。我的设置是 nginx、thin 和 sinatra。

我同时拥有 nginx 和 thin up 运行 但是当我导航到我的站点时,我从 nginx 收到了 404。我假设服务器块配置是错误的。我试过将 root 指向 /var/www/example/ 而不是 public 但这没有区别。我认为该请求没有达到 sinatra 应用程序的程度。

我做错了什么?

服务器块:

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 在 /var/www/example 目录中:

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

config.yml 在 /var/www/example 目录中:

---
 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

您必须告诉 nginx 将请求代理到您的 Sinatra 应用程序。完成此操作所需的最低限度是在 location 块中指定一个 proxy_pass 指令,如下所示:

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

Nginx Reverse Proxy docs 提供了有关您可能想要包括的其他代理设置的更多信息。