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

我跟着一个Railscast http://railscasts.com/episodes/293-nginx-unicorn?view=asciicast关于设置Nginx和独angular兽在stream浪,一个重要的区别。 Ryan正在使用Rails 3(具有默认的/public/index.html Rails 4只能dynamic生成)的应用程序。 在安装并运行Nginx之后,我们可以在端口8080上看到默认页面。然后,我们为Nginx创build了一个基本的configuration文件,放在rails应用程序的config目录中

/config/nginx.conf

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

然后删除已启用的站点中的默认页面并将其链接到configuration文件

 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/ 。 它说在configuration中将autoindex设置为on (默认closures),但是我不确定如何设置它以使Rails主页显示。

当我做到这一点

 server { listen 80 default; root /vagrant/public; location / { autoindex on; } } 

它摆脱了403权限错误(耶!),但是,它没有显示默认的Rails主页。 而是显示目录结构,所以我想知道设置它的正确方法是什么。 在这里输入图像说明

如果我尝试将其设置为位置/公共,则会再次出现403错误。 有任何想法吗?

 location /public { autoindex on; } 

更新

由于我使用stream浪汉(虚拟框),该应用程序在/stream浪,但设置位置/stream浪者也导致403错误

 location /vagrant { autoindex on; } 

您需要将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网址。 默认情况下,独角兽会在127.0.0.1:8080上监听,但是如果你改变了,那么你需要指定那个端口。