Rails,Passenger,Nginx,我得到“403 Forbidden”,但为啥呢?

Posted

技术标签:

【中文标题】Rails,Passenger,Nginx,我得到“403 Forbidden”,但为啥呢?【英文标题】:Rails, Passenger, Nginx, I get "403 Forbidden" but why?Rails,Passenger,Nginx,我得到“403 Forbidden”,但为什么呢? 【发布时间】:2016-11-14 23:47:27 【问题描述】:

我正在尝试通过端口 5000 上的Passenger-nginx 运行我的应用程序

在我的浏览器上我得到“403 Forbidden”和我的 nginx 错误日志:

2016/07/12 17:52:12 [错误] 28924#0: *1 目录索引 “/var/www/cava/public/”被禁止,客户端:Y.Y.Y.Y,服务器: cava,请求:“GET / HTTP/1.1”,主机:“X.X.X.X:5000”

在乘客根上,我使用从 passenger-config --root 获得的内容,但没有使用 rvm。 如果我在加载 rvm 的情况下使用乘客根,我会收到乘客错误,但我在这里做的对吗?

供参考我的应用配置和我的 nginx.conf:

我的应用配置

server 


    listen 5000;

    listen [::]:5000;

    server_name cava;

    root /var/www/cava/public;
    #try_files $uri/index.html $uri @app;

    # Add index.php to the list if you are using PHP
    #index index.html index.htm index.nginx-debian.html;

    #location / 
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        #try_files $uri $uri/ =404;
    #

我的 nginx.conf

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events 
    worker_connections 768;
    # multi_accept on;


http 

    passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
    passenger_ruby /home/tasos/.rvm/rubies/ruby-2.3.0/bin/ruby;


    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;


    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;

    server 

        passenger_enabled on;


        listen 443 ssl;

        root /usr/share/nginx/html;
        index index.html index.htm;

        ssl_certificate /etc/nginx/ssl/1_beast.smartupweb.com_bundle.crt;
        ssl_certificate_key /etc/nginx/ssl/smartup1.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!LOW:!aNULL:!eNULL;

        #location / 
         #       try_files $uri $uri/ =404;
        #

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

任何帮助表示赞赏。

【问题讨论】:

Nginx 403 error: directory index of [folder] is forbidden的可能重复 ls -lad /var/www/cava/public 的输出是什么? @mudasobwa 输出为drwxrwxr-x 5 tasos tasos 4096 Jul 5 15:18 /var/www/cava/public 【参考方案1】:

错误信息说明:

“/var/www/cava/public/”的目录索引被禁止

这意味着您的文件夹没有index 文件,或将被视为索引的文件。

我对Passenger不熟悉,但是如果您尝试将内容为<h1>Hello World</h1>index.html文件放在那里,它可能会显示出来。


以下内容与此问题没有直接关系,但为了保持一致,我将其保留在这里。

解决方案 1

首先,确定您的nginx 以哪个用户身份运行

ps ueax|grep 'nginx: worker'|grep -v grep|cut -f1 -d' '
#⇒ www-data

或者它可能是nobody,但根据您的conf 文件,在您的情况下它是www-data

更改/var/www/cava/public 的权限:

sudo chown -R www-data /var/www/cava/public

重试,现在应该可以了。

解决方案 2

让你的nginx be running as your user。在conf 的最顶部更改:

- user www-data:
+ user tasos;

后一种可能更便于开发。

【讨论】:

我都试过了,都没有成功。谢谢你的回答。你还有什么想法吗? 你完全正确,我按照你说的做了,我看到了“Hello world”。我想我复制了一个不适用于 rails 的配置。我现在需要为我的“真实”索引放置一个链接还是什么?或者也许你不使用rails? 这不太可能是 Rails 问题;听起来,Passenger 未能为 Rails 应用程序提供服务。我会用谷歌搜索乘客设置,但正如我已经说过的,我无法为乘客提供帮助,对此感到抱歉。 我遇到了同样的问题,我可以编辑“欢迎使用 Nginx!” index.html 并在浏览器中查看更改。问题是,我不确定为什么它没有从我的 rails 应用程序中的所有视图中读取我的 index.html.erb 文件。你知道我是否需要为我的网站自定义index.html

以上是关于Rails,Passenger,Nginx,我得到“403 Forbidden”,但为啥呢?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4 + Websocket-rails + Passenger + Nginx + 负载均衡器

nginx中error_page没有生效(nginx+passenger+rails)

使用Passenger和Apache在vps上部署我的rails应用程序

如何在 nginx、passenger 和 redmine 中使用不同的 rails_env

我应该为我的 Rails 应用程序使用 Apache 还是 Nginx &Passenger 或 Mongrel

Rails + (Phusion Passenger|Puma|Unicorn|Thin) + (Nginx|Apache) 如何协同工作?