Rails 4中的nginx 403禁止错误(没有index.html文件)

时间:2013-07-18 16:23:01

标签: ruby-on-rails nginx vagrant

我正在跟随一个关于在Vagrant上设置Nginx和Unicorn的Railscast http://railscasts.com/episodes/293-nginx-unicorn?view=asciicast,其中一个重要区别。 Ryan用Rails 3创建了他的应用程序(它具有默认的/public/index.html,Rails 4只能动态生成)。在安装并运行Nginx之后,我们能够在端口8080上看到默认页面。然后我们为Nginx创建了一个基本配置文件,放入rails应用程序的config目录中

/config/nginx.conf

server {
 listen 80 default;
 # server_name example.com;
 root /vagrant/public; 
}

然后删除已启用的站点中的默认页面并将符号链接到配置文件

vagrant@lucid32:/etc/nginx/sites-enabled$ sudo rm default 
vagrant@lucid32:/etc/nginx/sites-enabled$ sudo ln -s /vagrant/config/nginx.conf todo 

在此之后,Ryan重新启动了nginx并且能够在localhost:8080看到Rails索引页面。但是,当我访问localhost:8080时,我收到403 Forbidden错误。

403 Forbidden
nginx/1.1.19

更新

由于Rails 4不再具有public / index.html文件,我认为403错误可能是由于这一点造成的,正如我从这篇博文中了解到的那样 http://www.nginxtips.com/403-forbidden-nginx/。它说在配置中将autoindex设置为on(默认为关闭),但我不确定如何设置它以显示Rails主页。

当我这样做时

server {
 listen 80 default;

 root /vagrant/public; 
 location / {
               autoindex on;
        }
}

它摆脱了403权限错误(yay!),但是,它没有显示默认的Rails主页。相反,它显示了目录结构,所以我想知道设置它的正确方法是什么。 enter image description here

如果我尝试将其设置为位置/公共,我再次收到403错误。有什么想法吗?

location /public {
                   autoindex on;
            }

更新

由于我正在使用Vagrant(虚拟盒子),应用程序处于/ vagrant,但是将位置设置为location / vagrant也会导致403错误

location /vagrant {
               autoindex on;
        }

1 个答案:

答案 0 :(得分:2)

您需要将请求从Nginx传递给Unicorn。你可以这样做:

server {
  listen *:80;
  root /vagrant/public;

  location / {
    # Serve static files if they exist, if not pass the request to rails
    try_files $uri $uri/index.html $uri.html @rails;
  }

  location @rails {
    proxy_redirect    off;
    proxy_set_header  X-Forwarded-Proto $scheme;
    proxy_set_header  Host              $http_host;
    proxy_set_header  X-Real-IP         $remote_addr;

    proxy_pass http://127.0.0.1:8080;
  }
}

您可能需要更改proxy_pass网址。默认情况下,unicorn将侦听127.0.0.1:8080但是,如果您更改了它,那么您将需要指定该端口。