"Access Forbidden" - Passenger, Nginx, Rails

3

我知道这方面已经有大约100个问题了,但是在经过几个小时的研究之后,我仍然找不到解决方案。这是我的nginx配置:

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

    root /home/LucyRb/public;
    passenger_enabled on;
    passenger_app_env production;

    index index.html index.htm;
    server_name <domain name>;

    location / {
            try_files $uri $uri/ /index.html;
            passenger_enabled on;
    }
}

我的 /public 目录:

root@Lucy:/var/www/LucyRb/public# namei -l *
f: 404.html
-rwxrwxrwx root root 404.html
f: 422.html
-rwxrwxrwx root root 422.html
f: 500.html
-rwxrwxrwx root root 500.html
f: favicon.ico
-rwxrwxrwx root root favicon.ico
f: robots.txt
-rwxrwxrwx root root robots.txt

我认为这不是权限问题。我已经运行 rake db:migrate 来创建数据库,并且它也成功了。我很确定环境设置正确。但是我只得到一个文件列表(因为自动索引已经开启,否则我会得到403错误)。但是路由和应用程序默认的主页都无法工作。我已经阅读了Passenger文档,并尝试使用文档和其他SO问题进行故障排除,但似乎无法使其正常工作。
我没有忘记运行 bundle install 并且所有必要的软件包都已安装,我相当确定(我有遗漏吗?mysqlrvm及其安装rails相关步骤,nginxpassenger...可能还有2-3个)。
我知道不应该启动 rails server ,因为它只允许一次连接。所以nginx应该能够正确地执行,对吗?或者我需要使用某些标志来启动它?
提前感谢你的帮助。

当你访问哪些URL时会出现“访问被禁止”的错误? - Малъ Скрылевъ
可能是因为ipv6only标志吗? - rlecaro2
你可以尝试将以下这些行添加到nginx配置日志中:passenger_root /usr/lib/ruby/gems/1.8/gems/passenger-2.2.11; passenger_ruby /usr/bin/ruby1.8; 另外,查看nginx的错误日志,通常位于/var/log/... - Малъ Скрылевъ
@ majioa 对于 passenger_root,我似乎找不到该设置的内容。我尝试的每个目录都无法加载 PassengerWatchdog,除非我不指定任何内容并回退到默认值,这很好用(除了原始问题中的路由问题)。 - casraf
它总是显示那个错误,还是只有在访问根路径时才会出现? - Mohammad AbuShady
显示剩余9条评论
8个回答

1

大家好。在Passenger作者的IRC频道上得到帮助后,我解决了这个问题。

我安装了两次Passenger。

根据我遵循的文章没有充分涵盖该主题,我认为PassengerNginx的可安装模块,这导致我使用apt-get安装了Nginx,并通过gems安装了Passenger

这是不必要的冗余,会导致冲突。

在这些情况下,要么只使用apt-get,要么只使用gems。

passenger-install-nginx-module不仅安装模块,还从头编译Nginx,因为Nginx不是可模块化应用程序。它要么与模块一起编译,要么根本没有模块。

总之:

  1. 仅使用一种方法安装Nginx和Passenger。
  2. 确保配置文件指向正确的文件。
    我也遇到了Ruby路径的问题。确保它指向包装器(wrapper),而不是可执行文件本身:

    root@Lucy:/usr/local/rvm# which ruby
    /usr/local/rvm/rubies/ruby-2.0.0-p353/bin/ruby
    

    在您的配置中:

    passenger_ruby /usr/local/rvm/wrappers/ruby-2.0.0-p353/ruby;
    

0

我原本想把这个放在我的评论部分,但是空间和格式有限制,所以:

我还看到你两次指定了passenger_enabled,这似乎是不必要的。我从来没有见过在location指令中启用它,但这可能不是你的问题。

你的日志显示什么?你似乎没有打开乘客记录/调试(在http指令中):

http {
...
    passenger_debug_log_file '/path/to/passenger_debug.log';
    passenger_log_level       5; # default
}

从你的帖子中我注意到的另一件事是,你的公共目录似乎没有包含Rails应用程序?


0
建议- 尝试将您的应用程序移动到普通用户可以访问的地方,例如主目录。

0
你是如何安装Passenger的?使用RVM?RVMSUDO还是sudo?很有可能你不应该使用root用户来运行你的应用程序。因此,文件的权限不允许Passenger使用Rails应用程序。

根据RVMSUDO的文档,我是否应该使用RVM卸载并重新安装?此外,我不明白为什么会有问题,因为服务器文件对所有人都是可访问的,而且passenger/nginx比它们拥有更高的权限... - casraf

0

假设您的 config.ru 在指定的 passenger_app_root 目录下,尝试移除您的 location / {...} 指令,在重新启动 Nginx 后,查看应用程序是否起动。我并不是说这就是解决方法,而是一种故障排除措施。


还不行。 - casraf

0

你有

# nginx config
root /home/LucyRb/public;

# shell
/var/www/LucyRb/public

你在/home/LucyRb中有一个正确的应用程序吗?如果是这样,那么/var/www/LucyRb的相关性是什么?如果这是您配置中的错误,则可能会引起一些麻烦!


0
你试过将你的文件更改为www-data用户吗?

0
每次我收到这个错误,都是因为Nginx没有正确指向 Passenger gem 和可执行文件。这是我的建议,让事情正常工作:
  1. 卸载和/或关闭任何你当前已安装的 Nginx。
  2. 进入到你应用程序的根目录,
  3. 执行命令:passenger-install-nginx-module 并让 passenger 在 /opt 下下载、编译和安装 nginx。
  4. 使用由 Passenger 脚本提供的样例配置 /opt/nginx/conf/nginx.conf
  5. 为了让服务器在启动时启动,只需将一行代码 /opt/nginx/sbin/nginx 添加到你的 /etc/rc.local script 中。
这个方法在 Ubuntu 10 和 12 上使用 RVM + Ruby 1.9、2.0 和 Rails 3 和 4 时,对我来说是可重复和无误的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接