我在 Ubuntu 上,
Apache 2.2 通过 apt-get 安装了 fcgi,然后通过 apt-get remove 将其删除。
安装了 mod-ruby
配置,我将其添加到 Apache:
LoadModule ruby_module /usr/lib/apache2/modules/mod_ruby.so
RubyRequire apache/ruby-run
<Directory /var/www>
Options +ExecCGI
</Directory>
<Files *.rb>
SetHandler ruby-object
RubyHandler Apache::RubyRun.instance
</Files>
<Files *.rbx>
SetHandler ruby-object
RubyHandler Apache::RubyRun.instance
</Files>
我在目录中有一个文件www
,并且puts 'baba'
该目录中还有其他文件,所有这些文件都可以通过 Apache 访问。
测试文件已chmod 777
在浏览器中出现403
。
在 Apache 错误日志中,我得到:
[error] access to /var/www/t.rb failed for (null), reason: Options ExecCGI is off in this directory
如果我将其移动到子文件夹rubytest
并修改相关配置为:
<Directory /var/www/rubytest>
Options +ExecCGI
</Directory>
并确保目录具有 755 权限,它只是尝试下载文件,好像它不再识别后缀 *.rb
如果我给出目录和文件 777,则会失败:
usr/lib/ruby/1.8/apache/ruby-run.rb:53:警告:LOAD_PATH 中不安全的世界可写目录 /var/www/rubytest,模式 040777 [2011 年 5 月 24 日星期二 19:39:58] [错误] mod_ruby:ruby 中的错误 [2011 年 5 月 24 日星期二 19:39:58] [错误] mod_ruby:/usr/lib/ruby/1.8/apache/ruby-run.rb:53:在
load': loading from unsafe file /var/www/rubytest/t.rb (SecurityError) [Tue May 24 19:39:58 2011] [error] mod_ruby: from /usr/lib/ruby/1.8/apache/ruby-run.rb:53:in
处理程序'
但是,如果我使用 *.rbx,它就会像魔法一样起作用...去想象吧。
答案1
确保您没有自己的.htaccess
文件- 它可能会覆盖您的阻止。/var/www
Options
Directory
此外,/var/www
很可能是您的文档根目录,并且可能继承了其他优先级更高的默认选项。尝试将您的脚本移动到新目录,例如,/var/www/ruby
;并Directory
相应地修改您的块。