我正在跟随Railscast http://railscasts.com/episodes/293-nginx-unicorn?view=asciicast关于在Vagrant上设置Nginx和Unicorn,其中一个重要区别. 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主页.相反,它显示了目录结构,所以我想知道设置它的正确方法是什么.
如果我尝试将其设置为位置/公共,我再次收到403错误.有任何想法吗?
location /public {
autoindex on;
}
更新
由于我正在使用Vagrant(虚拟盒子),应用程序处于/ vagrant,但是将位置设置为location / vagrant也会导致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网址.默认情况下,unicorn将侦听127.0.0.1:8080但是,如果您已更改它,则需要指定该端口.