我正在尝试在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/)
答案 0 :(得分:1)
配置示例中的passenger_base_uri
和root
与目录结构不匹配(例如/web/archive/sites/app1
vs /web/archive/sites/archive/app1
)。据我所知,Passenger不考虑位置,只考虑root
和passenger_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
}
}