2

我正在尝试在 sub-uri 下运行一些 Sinatra 应用程序,但似乎Passenger 没有将它们作为 Rack 应用程序来使用。

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

这些应用程序在我的本地机器上运行良好rackup,所以我觉得应用程序代码无关紧要。我还以 nginx 用户(user nginx在 nginx 配置的顶部)和用户身份登录,该archive用户是用于部署所有这些应用程序的用户,并且拥有所有目录和文件。使用任一用户导航到这些文件中的任何一个都没有问题。

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

nginx 配置

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/)
4

1 回答 1

1

passenger_base_uri与您的配置示例中的一起与目录结构(例如vs )root不匹配。据我了解,Passenger 不考虑位置,而只考虑和。/web/archive/sites/app1/web/archive/sites/archive/app1rootpassenger_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
    }
}
于 2012-08-22T17:28:56.283 回答