.html
我在名为test.html
...的文件中具有以下服务器端包含内容...
<!--#include virtual="/cgi-bin/myScript.cgi"-->
<!--#include virtual="/includes/myFile.html"-->
当我test.html
在浏览器中查看实时内容时,myFile.html
插入/渲染都很顺利,但是myScript.cgi
却给了我
[在执行此命令时出现的错误]
从浏览器地址栏来看,
/cgi-bin/myScript.cgi
呈现输出正常,证明文件存在于路径中并且权限正确(755)。SSI 处理程序设置正确,并且
myFile.html
包含得很好,证明该页面正在被解析。
那么如果 SSI 正在运行并且正在运行,为什么这个脚本myScript.cgi
却不运行呢?#include virtual
顺便说一句,这是在 cPanel 托管帐户上,我在同一托管公司的服务器上有许多其他帐户(网站),配置相同。其他的都按预期运行。
- cPanel 版本:11.30.6(版本 3)
- Apache 版本:2.2.17
- 架构:x86_64
- 操作系统:linux
- Perl 版本:5.8.8
- 内核版本:2.6.18-194.32.1.el5
- cPanel 专业版: 1.0 (RC1)
该脚本只是以格式化文本的形式返回从今天日期开始的年份。输出前面带有Content-type: text/html\n\n
,它不是新的 Perl 脚本。它正在其他帐户上运行。
答案1
我的托管公司将问题上报给 cPanel,但令我尴尬的是,最终发现是我的.htaccess
文件中的一个设置缺失了。
正常运行的帐户有此行,而损坏的帐户却没有......
Options All -Indexes
All
,默认情况下,包括托管公司为了使其正常运行而添加的内容......
Options +Includes +ExecCGI
如果没有+ExecCGI
,它就会中断,正如我在原始帖子中描述的那样。
答案2
很好的故障排除,发现您的 SSI 正常工作。
您已将问题定位到 CGI 子系统。
首先,您需要确保已在文件中设置此项.htaccess
:
Options ExecCGI
如果问题仍然存在,您需要查看错误日志来找出原因:
此错误消息与 500 错误相同(通常是 .htaccess 本身的错误所导致的),因此您可以在日志中找到描述性错误消息。
cPanel 允许您查看错误日志。
他们是你最好的朋友。
在错误日志部分,cPanel 将在顶部显示您正在寻找的客户端 IP 地址。这是您的 ISP 分配的 IP 地址。
现代版本的 cPanel(比如我在 Bluehost 使用的版本,2017 年 11 月)会突出显示来自客户端的条目,这样黑客攻击就不会分散您的注意力。如果您没有突出显示,请使用浏览器的 Ctrl-F(查找)功能来查找来自您的条目。
请参阅本回答末尾的一个例子,了解他们处理的所有黑客攻击行为。让他们处理这些攻击比自己在野外运行服务器更值得。
解答:我认为您对 CGI 的使用<!--#Include
存在问题。
大多数现代 Apache 服务器需要您使用:
<!--#exec cgi="/cgi-bin/myScript.cgi" -->
而不是简单地包含脚本。
==> 确保您的 HTML 文件具有.shtm
或.shtml
扩展名。
请注意,所有/cgi-bin/
文件都需要具有 755 权限。- 这意味着所有者具有 RWX 权限,而组和公共具有 RX 权限
chmod 755 /cgi-bin/*
===> 永远不要授予它们或 .htaccess 文件 777 权限,否则外部人员可以轻松更改它们。
这表明了为什么使用托管服务比运行自己的服务器更好。
黑客攻击的示例日志输出,大部分被 RBL 阻止: