我在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.4,Require 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错误的主要内容,如果未能解决你的问题,请参考以下文章
sh ubuntu 14.04,乘客,apache,rails