【问题标题】:Rails application deployment and Nginx file permissionsRails 应用部署和 Nginx 文件权限
【发布时间】:2015-03-01 15:03:57
【问题描述】:

我刚刚设置了我的应用程序并使用 Capistrano 将其部署到 /srv/my_app_name。但是,当我尝试访问我的应用程序时,我收到 403 Forbidden nginx/1.6.2 错误。我的 Nginx 在www-data 用户下运行,但现在我试图了解应该为我的应用程序文件夹授予 Nginx 哪些访问权限。在我的/var/log/nginx/error.log 文件中,我有这个:

015/03/01 09:42:16 [error] 19451#0: *1 directory index of "/srv/my_app_name/current/public" is forbidden, client ...

这是/srv 文件夹的ls -l 命令的结果:

drwxrwxr-x   3 root deploy  4096 Feb 28 16:04 srv

namei -lm /srv/my_app_name/current/public/ 命令的转义:

# namei -lm /srv/my_app_name/current/public/
f: /srv/my_app_name/current/public/
drwxr-xr-x root   root   /
drwxrwxr-x root   deploy srv
drwxrwxr-x deploy deploy my_app_name
lrwxrwxrwx deploy deploy current -> /srv/my_app_name/releases/20150301140926
drwxr-xr-x root   root     /
drwxrwxr-x root   deploy   srv
drwxrwxr-x deploy deploy   my_app_name
drwxrwxr-x deploy deploy   releases
drwxrwxr-x deploy deploy   20150301140926
drwxrwxr-x deploy deploy public

我的应用 Nginx 配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    passenger_enabled on;
    rails_env production;
    # root /srv/my_app_name/;
    root /srv/my_app_name/current/public;

    # Make site accessible from http://localhost/
    server_name localhost staging.my_app_name.de www.staging.my_app_name.de;

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
            # Uncomment to enable naxsi on this location
            # include /etc/nginx/naxsi.rules
    }
}

我以前的应用程序部署到/var/www 并且运行良好,但我读到它不是将应用程序用作服务的最佳位置,因此决定将这个应用程序放在更合适的文件夹中,但现在我'我被文件权限卡住了。

问题:

  1. 我应该将www-data 的一些权限添加到公用文件夹(/srv/my_app_name/current/public)还是整个应用程序文件夹(/srv/my_app_name)?

  2. 什么是适当的权利?我目前使用deploy 用户进行部署,该用户已添加到deploy 组中。

  3. 如何添加这些权限(我的意思是命令,因为我在Linux文件权限方面不是很好)?

【问题讨论】:

  • 能否提供namei -lm /srv/my_app_name/shared/public 命令的输出?
  • + 使用应该使用/srv/my_app_name/current/public 而不是/srv/my_app_name/shared/public
  • 已将 namei -lm 结果添加到问题中。
  • @maxd 是的,我已经更改了配置并重新启动了 nginx,但结果是一样的
  • 似乎您拥有所有目录的所有o+r 权限。这是否意味着您的问题与目录权限无关。看看这个post。也许你有这篇文章中描述的问题。

标签: ruby-on-rails linux nginx deployment permissions


【解决方案1】:

原来我的 nginx 配置不正确。出于某种原因,这个工作完美:

server {
    listen 80 default_server;
    passenger_enabled on;
    passenger_app_env staging;
    root /srv/my_app_name/current/public;
    server_name localhost other_hosts;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 2015-03-29
    • 2020-09-30
    相关资源
    最近更新 更多