我在 Apache Web 服务器上运行 CGI 脚本时遇到问题。该脚本在我的本地计算机上运行正常,但在服务器上失败并出现 404 错误,表明 URL 不存在。我的本地计算机和服务器都运行相同版本的 Ubuntu 和 Apache。服务器上的错误日志报告 Apache 正在默认位置(即 )而/usr/lib/cgi-bin/
不是预期位置 中查找 CGI 脚本/var/www/mysite.com/cgi-bin/
。同样,它在我的本地计算机上运行良好。
[Mon Jun 03 20:17:19.522377 2024] [cgi:error] [pid 78594] [client xx.xxx.xx.xxx:55973] AH02811: script not found or unable to stat: /usr/lib/cgi-bin/hello.py
在提供的配置示例中,mysite.com 是网站真实 URL 的占位符。
以下是我的设置细节:
- Ubuntu 版本:24.04 LTS
- Apache 版本:Apache/2.4.58(Ubuntu)
- CGI 脚本路径:
/var/www/mysite.com/cgi-bin/hello.py
- 网址:
https://mysite.com/cgi-bin/hello.py
配置步骤:
站点配置:
<VirtualHost *:80> ServerName mysite.com ServerAlias www.mysite.com ServerAdmin webmaster@localhost DocumentRoot /var/www/mysite.com ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined ScriptAlias /cgi-bin/ /var/www/mysite.com/cgi-bin/ <Directory "/var/www/mysite.com/cgi-bin"> Options +ExecCGI AddHandler cgi-script .py Require all granted </Directory> </VirtualHost>
CGI脚本(hello.py):
#!/usr/bin/env python3 print("Content-Type: text/html") print() print("<html><body><h1>Test CGI Script for mysite.com</h1></body></html>")
权限:
chmod 755 /var/www/mysite.com/cgi-bin/hello.py
启用 Apache 模块:
- 程序网关
Apache 配置命令:
sudo a2enmod cgi sudo a2ensite mysite.com.conf sudo systemctl restart apache2
问题:
当我访问https://mysite.com/cgi-bin/hello.py
我的服务器时,我收到 404 错误,指出 URL 不存在。但是,同样的设置在我本地机器上运行良好。
观察结果:
该脚本在终端上运行良好,即 python3 /var/www/mysite.com/cgi-bin/hello.py
按预期运行。
故障排除步骤:
- 已验证 CGI 脚本是否存在于服务器上的正确路径中。
- 检查 CGI 脚本和目录的权限。
- 确保 CGI 模块已启用。
- 比较本地机器和服务器之间的配置。
我不知道为什么这在服务器上不起作用,但在本地却起作用。任何关于导致此问题的原因的见解或建议都将不胜感激!
我在新安装的 Ubuntu 24.04 上尝试了您的配置,一切正常。所以,您在服务器上执行的某些操作干扰了您的
ScriptAlias
指令。尝试
serve-cgi-bin
通过执行以下操作来禁用配置: