【问题标题】:Weird~Apache can not find the actually existing "bash" to execute my cgi file~奇怪~Apache找不到实际存在的“bash”来执行我的cgi文件~
【发布时间】:2011-09-24 22:32:30
【问题描述】:

你可能太容易回答了。 我的问题是关于 cgi 和 apache 网络服务器。 简单点,我有一个 html“form.html”,其中包含一个表单。要访问它,请在浏览器中输入“127.0.0.1/form.html”。 在这个html文件中点击“提交”后,地址应该是“127.0.0.1\cgi-bin\cginame.cgi”,“cginame.cgi”的内容如下:

#!/bin/bash

if [ $REQUEST_METHOD="GET" ]
then
data=$QUERY_STRING
else
data='cat'
fi
java mortcal $data

“mortcal”是一个java程序,计算并返回一个包含结果的HTML页面给用户。 我正在使用 apache 2.2 和 ubuntu 10.04。 问题是当我点击“form.html”中的“提交”按钮时,我在错误日志中得到了这些:

[Sat Sep 24 15:00:20 2011] [error] (2)No such file or directory: exec of '/usr/lib/cgi-bin/mortcgi.cgi' failed
[Sat Sep 24 15:00:20 2011] [error] [client 127.0.0.1] Premature end of script headers: mortcgi.cgi

我知道这是因为 apache 找不到 "/bin/bash" 来执行 cgi 文件。但我确实有“/bin/bash”。 太奇怪了。请帮帮我。提前谢谢你。

【问题讨论】:

  • 请将您的 CGI 脚本更改为简单的“echo Hello world”。让我们缩小问题范围。

标签: apache cgi


【解决方案1】:

要执行 CGI 脚本,您需要配置 Apache 以允许执行此操作,并且您的脚本必须遵循 HTTP 协议,以正确的格式、正确的权限以及不断地发回数据。

这里有一个很棒的教程和一个例子:http://httpd.apache.org/docs/2.2/howto/cgi.html

...但是,我需要说:通常,通过 Apache 从 shell 脚本中运行 java 程序是一个坏主意。每个请求都加载 java 运行时引擎 (JRE),运行程序,然后卸载它。存在环境、文件所有权等方面的问题——所有这些都是为什么会有像 tomcat for java 这样的应用程序服务器。所以如果你只是在尝试一些东西,那很好。如果您认为这是在专业生产环境中完成某事的好方法,我会重新考虑。

【讨论】:

  • 我检查了我的配置文件。他们都还好。所以我一直在网上搜索,最后我看到了这个:“如果你从 Windows 机器上复制了脚本,你可能会在行尾被 ^M 绊倒。你可以使用 cat -v /usr/ lib/cgi-bin/printenv.pl | head -1 以验证行尾没有 ^M。“我确实从 Windows 复制了我的 cgi 文件!我忘了提到它,因为我认为这没什么大不了的。现在我通过在 vi 中键入以下内容删除了 ^M" :%s/^V^M//g。此问题已解决。非常感谢您的回答,Mr.Harrison 和 Dark Falcon,谢谢大家。跨度>
  • @YanjinDing,将此添加为新答案,并接受它。这样,发现您的问题的其他人就会知道您是如何解决的。
【解决方案2】:

如前所述,这似乎是一种糟糕的做事方式,但是:

  1. 脚本文件权限是否允许 Web 服务器用户执行?
  2. 您是否使用任何安全框架(例如 selinux)会施加额外限制?

【讨论】:

    【解决方案3】:

    我检查了我的配置文件。他们都还好。于是我一直在网上搜索,终于看到了这个:

    "如果你从 Windows 机器上复制了脚本,你可能会被行尾的 ^M 绊倒。你可以使用 cat -v /usr/lib/cgi-bin/printenv.pl | head -1 以验证行尾没有 ^M。"

    我确实从 Windows 复制了我的 cgi 文件!我忘了提到它,因为我认为这没什么大不了的。

    现在我已经通过在 vi 中键入以下内容删除了 ^M" :%s/^V^M//g。这个问题已经解决。非常感谢您的回答,Mr.Harrison 和 Dark Falcon,谢谢大家.

    【讨论】:

      猜你喜欢
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 2016-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多