Rails 应用程序部署和 Nginx 文件权限
Rails application deployment and Nginx file permissions
我刚刚使用 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
并运行良好,但我了解到它不是将应用程序用作服务的最佳位置,因此决定将此应用程序放在更合适的文件夹中,但现在我被文件权限卡住了。
问题:
我应该只将 www-data
的某些权限添加到 public 文件夹 (/srv/my_app_name/current/public
),还是添加到整个应用程序文件夹 (/srv/my_app_name
) ?
什么是正当权利?我目前使用 deploy
用户进行部署,即添加到 deploy
组。
如何添加这些权限(我的意思是命令,因为我在 Linux 文件权限方面不是很好)?
原来是我的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;
}
我刚刚使用 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
并运行良好,但我了解到它不是将应用程序用作服务的最佳位置,因此决定将此应用程序放在更合适的文件夹中,但现在我被文件权限卡住了。
问题:
我应该只将
www-data
的某些权限添加到 public 文件夹 (/srv/my_app_name/current/public
),还是添加到整个应用程序文件夹 (/srv/my_app_name
) ?什么是正当权利?我目前使用
deploy
用户进行部署,即添加到deploy
组。如何添加这些权限(我的意思是命令,因为我在 Linux 文件权限方面不是很好)?
原来是我的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;
}