我的Rails应用程序运行在与Unicorn
和Nginx
服务器上,但configurationNginx并启动后,我得到了错误:
2015/08/03 15:43:44 [crit] 13951#0: *1 stat() "/home/ec2-user/apps/mybest/current/public//index.html" failed (13: Permission denied), client: 123.185.144.80, server: 52.74.148.194, request: "GET / HTTP/1.1", host: "52.74.148.194" 2015/08/03 15:43:44 [crit] 13951#0: *1 stat() "/home/ec2-user/apps/mybest/current/public/.html" failed (13: Permission denied), client: 123.185.144.80, server: 52.74.148.194, request: "GET / HTTP/1.1", host: "52.74.148.194" 2015/08/03 15:43:44 [crit] 13951#0: *1 stat() "/home/ec2-user/apps/mybest/current/public/" failed (13: Permission denied), client: 123.185.144.80, server: 52.74.148.194, request: "GET / HTTP/1.1", host: "52.74.148.194"
这里是nginx_myapp.conf
upstream unicorn { server unix:/tmp/unicorn.myapp.sock fail_timeout=0; } server { listen 80 default deferred; server_name 52.74.148.194; root /home/ec2-user/apps/mybest/current/public; location ^~ /assets/ { gzip_static on; expires max; add_header Cache-Control public; } try_files $uri/index.html $uri.html $uri @unicorn; location @unicorn { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://unicorn; } error_page 500 502 503 504 /500.html; keepalive_timeout 10; }
我GOOGLE了几个小时,但仍然无法解决这个问题。 我猜如果有任何path的错别字,不知道为什么错误信息与“ public//index.html
”,而不是“ public/index.html
”任何提示? 谢谢!
Nginx运行时用户' nginx
'如下:
编辑:
$ groups nginx nginx : nginx ec2-user groups ec2-user ec2-user : ec2-user wheel
path权限:(当前)
current]$ ls -l total 76 drwxrwxr-x 8 ec2-user ec2-user 4096 Aug 3 14:06 app drwxrwxr-x 2 ec2-user ec2-user 4096 Aug 3 14:08 assets_manifest_backup drwxrwxr-x 2 ec2-user ec2-user 4096 Aug 3 14:26 bin -rw-rw-r-- 1 ec2-user ec2-user 830 Aug 3 14:06 Capfile drwxrwxr-x 6 ec2-user ec2-user 4096 Aug 3 14:08 config -rw-rw-r-- 1 ec2-user ec2-user 153 Aug 3 14:06 config.ru drwxrwxr-x 2 ec2-user ec2-user 4096 Aug 3 14:08 db -rw-rw-r-- 1 ec2-user ec2-user 1720 Aug 3 14:06 Gemfile -rw-rw-r-- 1 ec2-user ec2-user 5262 Aug 3 14:06 Gemfile.lock drwxrwxr-x 4 ec2-user ec2-user 4096 Aug 3 14:06 lib drwxrwxr-x 2 ec2-user ec2-user 4096 Aug 3 14:35 log drwxrwxr-x 2 ec2-user ec2-user 4096 Aug 3 14:08 public -rw-rw-r-- 1 ec2-user ec2-user 249 Aug 3 14:06 Rakefile -rw-rw-r-- 1 ec2-user ec2-user 478 Aug 3 14:06 README.rdoc -rw-rw-r-- 1 ec2-user ec2-user 8 Aug 3 14:07 REVISION drwxrwxr-x 8 ec2-user ec2-user 4096 Aug 3 14:06 test drwxrwxr-x 4 ec2-user ec2-user 4096 Aug 3 14:35 tmp drwxrwxr-x 3 ec2-user ec2-user 4096 Aug 3 14:06 vendor
公众:(我甚至改成了777)
ls -l total 16 -rwxrwxrwx 1 ec2-user ec2-user 1564 Aug 3 14:06 404.html -rwxrwxrwx 1 ec2-user ec2-user 1547 Aug 3 14:06 422.html -rwxrwxrwx 1 ec2-user ec2-user 1477 Aug 3 14:06 500.html lrwxrwxrwx 1 ec2-user ec2-user 47 Aug 3 14:08 assets -> /home/ec2-user/apps/mybest/shared/public/assets -rwxrwxrwx 1 ec2-user ec2-user 0 Aug 3 14:06 favicon.ico -rwxrwxrwx 1 ec2-user ec2-user 202 Aug 3 14:06 robots.txt
将nginx.conf中的nginx用户从'nginx'更改为'ec2-user'解决。
确保nginx运行在适当的用户(主要nginx配置文件中的user ...
指令)下,然后确保该/home/ec2-user/apps/mybest/current/public/*
可以访问/home/ec2-user/apps/mybest/current/public/*
文件即它们与用户属于同一组,并且具有读取权限)。
您还需要在路径中的每个目录上拥有+ x权限。 你可以在你的终端上看到ls -l
权限,然后只要他们缺少,
chmod g+x apps cd apps chmod g+x mybest cd mybest chmod g+x current cd current chmod g+x public cd public chmod g+r *
UPD 。 正如在注释中发现的那样,nginx在ec2-user
名( user ec2-user
在config中)下运行良好。 对于/home
和/或/home/ec2-user
最有可能存在限制性的权限(对于目录上的组不是“+ x”/“+ r”)。 就个人而言,我没有看到有任何错误的nginx运行在ec2-user
名下。 或者,您可以将Rails应用程序移动到/var/www/my_app
,为nginx
用户设置权限,并从此处运行。