我在apache中使用乘客的rails时遇到403错误

Posted

技术标签:

【中文标题】我在apache中使用乘客的rails时遇到403错误【英文标题】:I'm getting 403 error using passenger for rails in apache 【发布时间】:2013-08-08 23:44:01 【问题描述】:

我已经安装了所需的工具,并遵循了几个教程试图让乘客做出响应。

我可以访问公共文件夹(public/500.html 或 422.hml)中的静态文件。昨天我通过虚拟主机进入,发现一些乘客错误。但过了一段时间,主机重新启动了服务,从那以后我就再也无法访问 rails 应用程序了。

link

link

link

这些是我用来配置服务器的一些链接。我也读过这可能是一个许可问题;我已经检查过了,但我不确定它是否正常。

【问题讨论】:

403 禁止错误是权限问题。检查文档根目录并确保 index.php 具有 644 权限。还要确保 index.php 的用户所有权与能够访问的 500.html 一样。 这是一个 Rails 应用程序,通过 apache + 乘客工作。我可以访问本地文件,例如图像。但是当rails应该响应时,给了我这个错误。 【参考方案1】:

首先检查您的错误日志。默认情况下,它位于/var/log/apache2/

如果您有client denied by server configuration 问题,请检查您的站点配置文件/etc/apache2/sites-available/your-site.conf。它必须符合Phusion Passenger User Guide。看看Require all granted

<Directory "/home/user/folder">
    Require all granted 
    Options FollowSymLinks
    # This relaxes Apache security settings.
    AllowOverride None
    # MultiViews must be turned off.
    Order allow,deny
    Allow from all
</Directory>

【讨论】:

如果您使用的是 Apache >= 2.4Require all granted 似乎是必需的【参考方案2】:

对我来说没问题,这意味着我正在运行 rails 2.3 并使用 Phusion Passenger 5.x

显然 5.x 根本不适用于 2.2,而 2.3 需要您先复制一个 config.ru 文件(这样 rails 将使用 rack 作为后端)。

2.3 的示例 config.ru 文件:

# Rack Dispatcher

# Require your environment file to bootstrap Rails
require File.dirname(__FILE__) + '/config/environment'

# Dispatch the request
run ActionController::Dispatcher.new

我不明白为什么咒语似乎不起作用,就像Passenger 忽略了我的rails 应用程序。

在我的 /var/log/apache2/error.log 文件中,我有这个:

[2015 年 5 月 11 日星期一 15:47:00.397891] [autoindex:error] [pid 17490:tid 3058694976] [client 216.49.181.251:49248] AH01276:无法提供目录 /home/x/y/railsapp/public/ : 找不到匹配的 DirectoryIndex (index.html,index.cgi,index.pl,index.php,index.xhtml,index.htm),并且服务器生成的目录索引被选项指令禁止,引用者:https://www.google.com/

这让我很困惑,显然意思是“乘客没有在那个虚拟主机上运行”。

如果我创建了一个 public/index.html 文件,apache 服务就很好,所以这不是权限问题。

我也看到了,说明乘客正常启动:

[ 2015-05-11 18:23:53.9594 4964/b7415700 agent/Watchdog/Main.cpp:728 ]:所有 Phusion 乘客代理已启动!

另见https://www.phusionpassenger.com/documentation/Users%20guide%20Apache%204.0.html#_i_get_a_403_forbidden_error

所以基本上使用乘客 5.x(在发行说明中它说不支持 rails 2.2,只有在 root 中创建“config.ru”文件时才支持 2.3您的 rails 应用程序。它适用于旧版本的机架,如 rails 2.3 所需的,只需删除较新的机架 gem 并安装 1.1.6 或其他,如果有,请删除供应商的机架 gem。GL!

另外作为旁注,此消息:

[2015 年 5 月 11 日星期一 18:25:10.235574] [core:alert] [pid 5263:tid 3017780032] [client 127.0.0.1:56737] /home/rdp/dev/prod_flds/public/.htaccess: 无效命令'RewriteEngine',可能拼写错误或由未包含在服务器配置中的模块定义

意思是“删除乘客通常不需要的 public/.htaccess 文件”

【讨论】:

很好的解释,config.ru 文件里面有什么? @SurgePedroza 添加了我的无论如何,FWIW。【参考方案3】:

在我的 Mac OS 10.9(类 Unix 系统)上,我在 apache 中使用乘客的 rails 时也遇到了 403 错误。 这里有一些提示:

    您可以检查 apache 日志目录并查看发生了什么。 目录:/var/log/apache2/error_log

    问题:权限被拒绝:访问/被拒绝(文件系统路径'path_apache_access'),因为路径的组件上缺少搜索权限

    通过 CLI 检查 'path_apache_access':ls -ld 'path_apache_access' 并使用 chmod +x 更改路径权限。

    另外,请注意:Httpd Wiki - (13) Permission Denied-。

    问题:配置错误:无法执行身份验证。未设置 AuthType!

    问题:客户端被服务器配置拒绝

    转到 /etc/apache2/httpd.conf 并查看 标签。

    通过 CLI 检查 apache 版本:apachectl -v,如果 Apache

    <Directory "rails_app_directory/public">
          # This relaxes Apache security settings.
          AllowOverride all
          # MultiViews must be turned off.
          Options -MultiViews
          # Uncomment this if you're on Apache >= 2.4:
          # Require all granted
          Options FollowSymLinks
          Order allow,deny
          Allow from all
    </Directory>
    

【讨论】:

【参考方案4】:

答案是乘客给了我 403,因为我必须将 apache 配置上的环境变量“RackEnv”设置为“开发”(在我的情况下)。

【讨论】:

以上是关于我在apache中使用乘客的rails时遇到403错误的主要内容,如果未能解决你的问题,请参考以下文章

Rails生产方式的乘客

Apache2 的 Rails 乘客问题

无法启动 Phusion 乘客看门狗?

sh ubuntu 14.04,乘客,apache,rails

通过 Faye 在 Rails 应用程序上进行实时聊天,但通过 Apache 在乘客上进行实时聊天

Apache 403 随处可见 XAMPP Linux