Passenger / nginx没有加载Sinatra app

时间:2012-08-21 00:54:18

标签: nginx sinatra passenger rack

我正在尝试在sub-uri下运行一些Sinatra应用程序,但看起来Passenger没有把它们当作Rack应用程序。

从nginx-error日志:403错误,directory index of "/web/archive/sites/archive/app1/" is forbidden。如果我将index.html放在该目录中,那么该HTML文件将呈现。

我的本​​地计算机上的应用程序运行良好rackup,所以我觉得应用程序代码无关紧要。我还将nginx用户({nginx配置顶部的user nginx)和archive用户(用于部署所有这些应用程序的用户)和它拥有所有目录和文件。使用任何一个用户导航到这些文件都没有问题。

此外,如果我将其移至子域(例如archive.domain.com),然后将应用符号链接置于/web/archive/sites(而不是/web/archive/sites/archive)中,则此设置可正常工作,并且否则使用几乎相同的nginx配置,这就是为什么我不相信这是一个权限问题。

nginx config

server {
    listen 80;
    server_name domain.com;

    location /archive {
        root /web/archive/sites;
        passenger_enabled on;
        passenger_base_uri /app1;
        passenger_base_uri /app2
    }
}

目录结构

/web
  |
  +-- archive/
       |
       +-- sites/
       |    |
       |    +-- archive/
       |         |
       |         +-- app1 -> /web/archive/apps/app1/current/public
       |         |
       |         +-- app2 -> /web/archive/apps/app2/current/public 
       |
       +-- apps/
            |
            +-- app1/
            |    |
            |    +-- current/
            |    |
            |    +-- public/
            |    |
            |    +-- config.ru
            |
            +-- app2/
                 |
                 +-- (same as app1/)

1 个答案:

答案 0 :(得分:1)

配置示例中的passenger_base_uriroot与目录结构不匹配(例如/web/archive/sites/app1 vs /web/archive/sites/archive/app1)。据我所知,Passenger不考虑位置,只考虑rootpassenger_base_uri

尝试将配置更改为

server {
    listen 80;
    server_name domain.com;

    location /archive {
        root /web/archive/sites/archive;
        passenger_enabled on;
        passenger_base_uri /app1;
        passenger_base_uri /app2
    }
}