Nginx потерпел неудачу (13: Отказано в доступе) при запуске рельсов с единорогом

Мое приложение rails работает на сервере с Unicorn а также Nginx, но после настройки Nginx и запуска его я получил ошибку:

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;
}

Я погуглил часы, но все еще не могу решить это. Я угадал, если какой-либо путь опечаток, и не уверен, почему сообщение об ошибке с "public//index.html"не"public/index.html"Любой намек? Спасибо!

Nginx работает с пользователемnginx'как показано ниже:

РЕДАКТИРОВАТЬ:

$ groups nginx
nginx : nginx ec2-user
groups ec2-user
ec2-user : ec2-user wheel

Разрешения путей: (текущий)

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 в nginx.conf с "nginx" на "ec2-user".

1 ответ

Решение

Убедитесь, что nginx запущен под соответствующим пользователем (user ... директивой в основном конфигурационном файле nginx), а затем убедитесь, что /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 в конфиге). Скорее всего, существуют ограничительные разрешения (нет "+x"/"+r" для группы в каталогах) для /home и / или /home/ec2-user, Лично я не вижу ничего плохого в том, что nginx работает под ec2-user имя пользователя. Или вы можете переместить приложение Rails, например, в /var/www/my_app, настроить разрешения для nginx пользователь, и он запускается оттуда.

Другие вопросы по тегам