【问题标题】:getting 403 Forbidden nginx with rails, puma, and server blocks使用 rails、puma 和 server 块获取 403 Forbidden nginx
【发布时间】:2016-08-06 19:11:25
【问题描述】:

第一次尝试使用 rails 部署应用程序 - 我正在尝试运行 rails 应用程序,该应用程序当前给我一个 403。我正在使用 ubuntu 和 nginx。我有两个服务器块设置,我首先使用运行良好的节点应用程序进行了测试,现在一个域作为节点应用程序运行良好,但我正在尝试将另一个域设置为提供 403 的 rails 应用程序。

我结合使用了这两个教程:

我尝试在我的/home/deploy 目录和/var/www/ 中设置755 权限,但没有成功。

其他猜测-

  • index index.html index.htm 有什么关系?
  • 与我的 nginx.conf 中的 default_server deferred; 有关(尽管我尝试删除但没有影响)

这是我的相关文件,可能有问题,如果其他人有帮助,请告诉我-

rails 应用,有问题的一个:/etc/nginx/sites-enabled/centers

server {
        listen 80;
        listen [::]:80;

        root /home/deploy/apps/mll/current/public;
        index index.html index.htm;

        server_name myrailssite.com;

        location / {
                try_files $uri $uri/ =404;
        }
}

node 应用程序,在 /etc/nginx/sites-enabled/nodeapp 上按预期工作

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

        root /var/www/nodeapp/html;
        index index.html index.htm;

        server_name 162.243.199.170;

        location / {
                try_files $uri $uri/ =404;
        }
}

nginx.conf

upstream puma {
  server unix:///home/deploy/apps/mll/shared/tmp/sockets/mll-puma.sock;
}

server {
  listen 80 default_server deferred;
  server_name myrailssite.com;

  root /home/deploy/apps/mll/current/public;
  access_log /home/deploy/apps/mll/current/log/nginx.access.log;
  error_log /home/deploy/apps/mll/current/log/nginx.error.log info;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @puma;
  location @puma {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    proxy_pass http://mll-puma;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 10M;
  keepalive_timeout 10;
}

权限:

deploy@banana:/usr/bin$ namei -l /var/www/centers/
f: /var/www/centers/
drwxr-xr-x root root /
drwxr-xr-x root root var
drwxr-xr-x root root www
drwxrwxr-x root root centers


deploy@banana:/usr/bin$ namei -l /home/deploy/apps/mll/current/public/
f: /home/deploy/apps/mll/current/public/
drwxr-xr-x root   root   /
drwxr-xr-x root   root   home
drwxr-xr-x deploy deploy deploy
drwxr-xr-x deploy deploy apps
drwxr-xr-x deploy deploy mll
lrwxrwxrwx deploy deploy current -> /home/deploy/apps/mll/releases/20160415005003
drwxr-xr-x root   root     /
drwxr-xr-x root   root     home
drwxr-xr-x deploy deploy   deploy
drwxr-xr-x deploy deploy   apps
drwxr-xr-x deploy deploy   mll
drwxr-xr-x deploy deploy   releases
drwxrwxr-x deploy deploy   20160415005003
drwxrwxr-x deploy deploy public

【问题讨论】:

  • 您有两个具有相同server_name 的服务器块。您还有两个标记为default_server 的服务器块。所以我不清楚哪个服务器块应该为请求提供服务。也许您应该查看您的server names
  • 您在哪里看到相同的 server_name?节点应用程序是162.243.199.170(在启用站点的文件中标记的默认值),rails 应用程序是myrailssite.com。当我仔细观察时,虽然现在我发现我的 nginx.conf 中只有我的 myrailssite.com,但我不确定如何继续/应该如何填写该文件。
  • nginx.conf 是主文件 - 从那里开始。启用站点的文件包含在 nginx.conf 中(假设您的 nginx.conf 文件中有类似 include sites-enabled/* 的内容)。
  • 感谢您注意到这个问题,就是这样!我没有意识到这些部分是如何组合在一起的。我刚刚从nginx.conf 中删除了这些额外的服务器设置,并将它们放入我的sites-enabled,现在它可以工作了。我应该先找到并阅读这个 -> digitalocean.com/community/tutorials/… 这很有帮助

标签: ruby-on-rails ubuntu nginx puma


【解决方案1】:

我的应用程序https://www.wiki11.com也遇到了同样的问题。

您的问题来了,因为 nginx 正在尝试将 index.html 文件搜索到不存在的 /home/deploy/apps/mll/current/public 中。 为了修复,您需要使用您的 nginx 添加乘客。

要遵循的说明。

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
sudo apt-get install -y apt-transport-https ca-certificates

添加乘客 APT 存储库

sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger xenial main > /etc/apt/sources.list.d/passenger.list'
sudo apt-get update

安装passenger和nginx

sudo apt-get install -y nginx-extras passenger

现在启动 nginx 网络服务器。

sudo service nginx start

接下来,我们需要更新 Nginx 配置以将 Passenger 指向我们正在使用的 Ruby 版本。

sudo vim /etc/nginx/nginx.conf

添加或取消注释

include /etc/nginx/passenger.conf;

保存并关闭 nginx.conf。然后打开/etc/nginx/passenger.conf

sudo vim /etc/nginx/passenger.conf

如果你使用的是 .rbenv,那么

passenger_ruby /home/deploy/.rbenv/shims/ruby;

或者如果你使用的是 rvm,那么

passenger_ruby /home/deploy/.rvm/wrappers/ruby-2.5.0/ruby;

或者如果你使用的是系统红宝石,那么

passenger_ruby /usr/bin/ruby;

接下来,重启nginx服务器

sudo service nginx restart

passenger_enabled on; 添加到您的站点启用/中心或站点启用/nodeapp 文件中。

server {
        listen 80;
        listen [::]:80;

        root /home/deploy/apps/mll/current/public;
        index index.html index.htm;

        server_name myrailssite.com;
        passenger_enabled on;

        location / {
                try_files $uri $uri/ =404;
        }
}

再次重启nginx服务器,sudo service nginx restart。希望它应该工作。

更多详情,请关注, https://www.phusionpassenger.com/library/install/nginx/install/oss/xenial/

【讨论】:

  • 他在问 Puma 不使用Passenger
猜你喜欢
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
  • 2014-02-08
  • 1970-01-01
  • 2013-11-01
  • 1970-01-01
  • 2016-02-15
相关资源
最近更新 更多