Nginx - 目录索引“/ var / fruby / current / public /”被禁止

时间:2014-06-08 15:32:43

标签: ruby-on-rails nginx capistrano passenger

好的,所以这个问题肯定已经问过几十次了,但老实说我经历了所有类似的问题,这些问题都与我的问题无关。

所以有一点历史和配置 Rails 3 app,Passenger + Nginx 3作为生产服务器

我目前正在通过bash脚本部署我的生产Rails 3应用程序,基本上每次克隆git repo并做一些魔术,它有问题所以我们决定迁移到Capistrano。

编写deploy.rb脚本,指定的共享文件夹,首先在测试服务器上启动它,并设法使其全部正常运行。

现在我为生产服务器执行相同的操作,通过Capistrano将其部署到我的手动bash脚本文件夹中,以便它们不会以任何方式发生冲突,从

更改nginx root
root /var/www/public;

root /var/fruby/current/public;

重新启动nginx,我在日志中收到403错误和以下记录。

2014/06/08 18:28:32 [error] 5239#0: *1 directory index of "/var/fruby/current/public/" is forbidden, client: 109.187.177.116, server: example.com, request: "GET / HTTP/1.1", host: "example.com", referrer: ""

由于乘客配置没有改变,可以安全地假设问题出现在文件夹权限的某个地方,但我老实说似乎无法确定问题所在。权限所以所有者真的看起来是一样的对我来说,也许你可以指出我正确的方向?

它必须与乘客有关,因为如果我用rails手动启动应用程序,它会很好地启动。

/opt/nginx/conf/nginx.conf

在http块内:

passenger_root /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.18;
passenger_ruby /usr/local/bin/ruby;
proxy_read_timeout 640;

服务器块:

server {
    listen   443;
    server_name  example.com;

    ssl on;
    ssl_certificate /opt/nginx/conf/certs/example.com.crt;
    ssl_certificate_key /opt/nginx/conf/certs/example.com.key.nopass;

    charset utf-8;
    #root /var/www/public; # Old directory my bash script deployed to
    root /var/fruby/current/public; # New directory, capistrano deploys to
    passenger_enabled on;
    rails_env production;

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

现在fruby文件夹具有以下权限:

drwxr-xr-x  5 root root   4096 Jun  8 18:56 fruby/

在fruby文件夹里面

drwxr-xr-x  5 root root 4096 Jun  8 18:56 ./
drwxr-xr-x 17 root root 4096 Jun  8 17:31 ../
lrwxrwxrwx  1 root root   34 Jun  8 18:56 current -> /var/fruby/releases/20140608145412/
drwxr-xr-x  4 root root 4096 Jun  8 18:54 releases/
drwxr-xr-x  7 root root 4096 Jun  8 17:46 repo/
-rw-r--r--  1 root root  170 Jun  8 18:56 revisions.log
drwxr-xr-x  7 root root 4096 Jun  8 17:47 shared/

内部共享文件夹

drwxr-xr-x  7 root   root    4096 Jun  8 17:47 ./
drwxr-xr-x  5 root   root    4096 Jun  8 18:56 ../
drwxr-xr-x  2 root   root    4096 Jun  8 17:49 bin/
drwxr-xr-x  3 root   root    4096 Jun  8 17:47 bundle/
drwxr-xr-x  2 root   root    4096 Jun  8 17:51 log/
drwxr-xr-x 10 root   root    4096 Jun  8 17:24 public/
drwxr-xr-x  6 nobody nogroup 4096 Jun  8 18:56 tmp/

一切似乎都很好,几乎相同的权限,生产服务器上有。

如果您需要更多输出,请告诉我。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

通过将Passenger更新到4.0.44并重新编译nginx(再次运行 passenger-install-nginx-module )来管理解决此问题,显然这是我测试的测试服务器的唯一区别最初。

我跑来解决问题的命令:

user@host-$: chmod 777 -R /tmp
user@host-$: chmod o+t -R /tmp
user@host-$: gem install passenger
user@host-$: passenger-install-nginx-module

前两个命令是这个答案(Getting remove_entry_secure error while using ruby application

的特征