必须在虚拟主机配置中显式声明cgi执行权限和路径映射,仅启用mod_cgi模块不够;需配置容器(含options +execcgi、addhandler、require all granted)或scriptalias,并确保脚本有shebang、可执行权限及正确http头。

要在 Apache 虚拟主机中运行 CGI 脚本,不能只靠启用模块,关键是在虚拟主机配置里显式声明 CGI 执行权限和路径映射。否则请求会返回 403 错误或直接下载脚本。
启用 mod_cgi 模块并确认加载
Apache 2.4+ 默认可能未启用 CGI 支持:
- Debian/Ubuntu 系统执行:sudo a2enmod cgi && sudo systemctl restart apache2
- RHEL/CentOS 系统检查 /etc/httpd/conf/httpd.conf 是否有未注释的:
LoadModule cgi_module modules/mod_cgi.so - 验证是否生效:apache2ctl -M | grep cgi(应输出 cgi_module (shared))
在虚拟主机配置中设置 CGI 目录权限
必须在
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 指定 CGI 脚本存放目录,例如:
- 必须包含:
Options +ExecCGI(允许执行)
AddHandler cgi-script .cgi .pl .py(识别后缀)
Require all granted(Apache 2.4+ 访问控制) - 不要遗漏 AllowOverride None,避免 .htaccess 干扰执行权限
配合 ScriptAlias 映射 URL 路径(推荐)
ScriptAlias 不仅做路径映射,还会自动赋予 CGI 执行权,比纯 Directory 配置更可靠:
- 在虚拟主机配置中加入:
ScriptAlias /cgi-bin/ "/var/www/html/cgi-bin/" - 注意 URL 路径末尾斜杠不能省:/cgi-bin/ ≠ /cgi-bin
- 对应物理目录需真实存在,且 Apache 用户(如 www-data)有读+执行权限:
sudo chown -R www-data:www-data /var/www/html/cgi-bin
sudo chmod 755 /var/www/html/cgi-bin
确保 CGI 脚本本身合规
配置全对,脚本仍可能静默失败——常见于三处硬性要求:
- 首行 shebang 必须准确,例如 Perl:#!/usr/bin/perl,Python:#!/usr/bin/env python3;用 which perl 验证路径
- 脚本文件需可执行:chmod +x /var/www/html/cgi-bin/test.cgi
- 输出必须以合法 HTTP 头开头,且头与正文间有空行:
print "Content-Type: text/html\n\n";(Perl)
echo -e "Content-Type: text/plain\n"(Bash)










