【问题标题】:Tomcat downloading script rather than running themTomcat 下载脚本而不是运行它们
【发布时间】:2015-08-04 21:58:15
【问题描述】:

我正在尝试设置我的 tomcat 以运行 .pl 和 .cgi 脚本,但每当我访问 cgi servlet 路径时,它只会下载脚本。

我知道对于旧版本,必须重命名两个 .JAR 文件,但我认为 Tomcat 7 没有必要...

这是我的配置


操作系统

Linux version 2.6.32-504.30.3.el6.x86_64 (mockbuild@x86-027.build.eng.bos.redhat.com) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-9) (GCC) ) #1 SMP Thu Jul 9 15:20:47 EDT 2015

${CATALINA_HOME}/conf/web.xml

<servlet>
    <servlet-name>cgi</servlet-name>
    <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>0</param-value>
    </init-param>
    <init-param>
      <param-name>cgiPathPrefix</param-name>
      <param-value>WEB-INF/cgi</param-value>
    </init-param>
     <load-on-startup>5</load-on-startup>
</servlet>


<servlet-mapping>
    <servlet-name>cgi</servlet-name>
    <url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>

${CATALINA_HOME}/conf/context.xml

<Context privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

脚本目录

${CATALINA_HOME}/ROOT/WEB-INF/cgi/test.pl

${CATALINA_HOME}/webapp1/WEB-INF/cgi/test.pl

注意:两者都设置为0775


${CATALINA_HOME}/Lib 的内容

-rw-r--r--.  1 root root   15979 May  7 13:17 annotations-api.jar
-rw-r--r--.  1 root root   54466 May  7 13:17 catalina-ant.jar
-rw-r--r--.  1 root root  130554 May  7 13:17 catalina-ha.jar
-rw-r--r--.  1 root root 1621907 May  7 13:17 catalina.jar
-rw-r--r--.  1 root root  259519 May  7 13:17 catalina-tribes.jar
-rw-r--r--.  1 root root 2310271 May  7 13:17 ecj-4.4.2.jar
-rw-r--r--.  1 root root   55535 May  7 13:17 el-api.jar
-rw-r--r--.  1 root root  124750 May  7 13:17 jasper-el.jar
-rw-r--r--.  1 root root  598396 May  7 13:17 jasper.jar
-rw-r--r--.  1 root root   87805 May  7 13:17 jsp-api.jar
-rw-r--r--.  1 root root  198014 May  7 13:17 servlet-api.jar
-rw-r--r--.  1 root root  210978 May  7 13:17 tomcat7-websocket.jar
-rw-r--r--.  1 root root    6143 May  7 13:17 tomcat-api.jar
-rw-r--r--.  1 root root  786806 May  7 13:17 tomcat-coyote.jar
-rw-r--r--.  1 root root  234043 May  7 13:17 tomcat-dbcp.jar
-rw-r--r--.  1 root root   71864 May  7 13:17 tomcat-i18n-es.jar
-rw-r--r--.  1 root root   43793 May  7 13:17 tomcat-i18n-fr.jar
-rw-r--r--.  1 root root   47036 May  7 13:17 tomcat-i18n-ja.jar
-rw-r--r--.  1 root root  125623 May  7 13:17 tomcat-jdbc.jar
-rw-r--r--.  1 root root   31948 May  7 13:17 tomcat-util.jar
-rw-r--r--.  1 root root   36271 May  7 13:17 websocket-api.jar

我也在 tomcat 前面运行 Apache。这是虚拟主机:

 <VirtualHost *:80>
    ServerName localhost
    ServerAlias staging.website.com
    ProxyRequests Off
    ProxyPreserveHost On

    ErrorLog /var/log/httpd/tomcat.error.log
    CustomLog /var/log/httpd/tomcat.log combined

    <Proxy *>
           Order deny,allow
           Allow from all
    </Proxy>

    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</VirtualHost>

我做错了什么?按照我看过的所有教程,它应该可以工作。

注意:当我直接通过 tomcat 的 port(:8080) 访问 perl 脚本时,我得到一个空白页面而不是下载。

【问题讨论】:

  • 试试如果你的 cgi 是二进制可执行文件会发生什么。我昨天用lighty遇到了同样的问题。如果二进制 exe 运行而不是下载,则您可能存在权限问题(似乎不是,因为您有 775),或者您需要告诉 cgi 模块为您的脚本使用哪个处理程序。

标签: apache perl tomcat7


【解决方案1】:

我不熟悉 Tomcat 配置,但是基于多年来运行了许多 Apache 服务器,我的直接想法是您可能没有在该级别为 cgi-bin 启用脚本执行:

ScriptAlias /cgi-bin/ /filesystem/path/to/cgi-bin/directory

请注意,ScriptAlias 必须在主 apache 配置或您的虚拟主机配置中设置。它不适用于.htaccess 文件。

【讨论】:

    【解决方案2】:
    1. perl可执行文件在OS路径下,tomcat进程可以找到吗?
    2. 我不确定,但必须同时重命名 CGI 和 SSI servlet 扩展才能使它们可用。也许这就是您正在寻找的缺失步骤?

    【讨论】:

    • 1. echo $PATH 输出:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/native/bin perl 在 /usr/bin/ 2. 我一开始也是这么想的,但是我认为tomcat7没有必要。我在${CATALINA_HOME}/Lib 中看不到它们(内容如上所示)
    • 关于 2. 根据文档:CGI servlet 现在包含在 catalina.jar 中,因此在 Tomcat 6(或更高版本)中不需要重命名。
    猜你喜欢
    • 2015-03-24
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 2019-10-08
    • 2014-06-07
    相关资源
    最近更新 更多