以下是我在nginx.conf中的内容:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
passenger_root /usr/lib/ruby/gems/1.9.1/gems/passenger-3.0.11;
passenger_ruby /usr/bin/ruby;
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain text/html text/css
application/x-javascript text/xml
application/xml application/xml+rss
text/javascript;
server {
listen 80;
server_name domain.com www.domain.com;
# autoindex on;
passenger_enabled on;
rails_env production;
access_log logs/mrfs.access.log;
location / {
root /opt/nginx/html/mrfs/public; #line updated per suggestion below
}
}
}
我可以打开和关闭自动索引,当它被注释掉时会显示403错误,或者当它被打开时会显示目录列表。当我可以访问目录列表时,我可以浏览它们并下载各种文件。在我看来,这不是一个权限问题。当我禁用自动索引时,我在错误日志中得到一个无法列出目录错误。我想我需要做的是告诉nginx如何加载我的index.html.erb文件?我怎么做?这有什么不对吗?
的更新 的
我在/ opt / nginx / html / mrfs / public文件夹中放了一个'index.html',然后加载它。那么什么会导致rails / nginx / passenger在公共场合加载index.html文件,而不是在我的路由中加载home.html.erb文件?我可以运行'rails s',然后执行一个wget http://localhost,它会拉下正确的html文件。
答案 0 :(得分:3)
您需要将root
设置为项目的public
目录:
server {
...
passenger_enabled on;
rails_env production;
root /opt/nginx/html/mrfs/public;
}
答案 1 :(得分:2)
以下是我必须将其更改为:
server {
listen 80;
server_name domain.com www.domain.com;
rails_env production;
passenger_use_global_queue on;
access_log logs/mrfs.access.log;
root /opt/nginx/html/mrfs/public;
passenger_enabled on;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}
}
如果location /
中有nginx.conf
,那么您必须启用passenger_enabled;在其中或者删除location /
块。我选择删除它。
答案 2 :(得分:1)
除了另一个答案中的“公共”文件夹更正外,我觉得包含您的应用程序的文件夹的权限/所有权存在问题。 nginx.conf中应该有一行像...
user websrv;
定义了nginx在其下运行的用户。您的rails应用程序的文件夹应归该用户所有,并且应正确设置权限。