Apache 默认不执行 Python 脚本,需三步配置:启用 CGI 模块(LoadModule cgi_module、AddHandler cgi-script .py)、映射并授权 CGI 目录(ScriptAlias + Directory 配置)、编写合规脚本(首行解释器路径、输出 Content-Type 及空行、后续 HTML 内容)。

Apache 默认不执行 Python 脚本,要让它通过 CGI 方式运行 .py 文件,核心是三件事:启用 CGI 模块、指定可执行目录与后缀、确保脚本符合 CGI 协议规范。整个过程不依赖额外框架,纯原生配置即可生效。
启用 CGI 模块并声明 Python 脚本后缀
打开 Apache 主配置文件(如 /etc/apache2/apache2.conf 或 /usr/local/etc/httpd/httpd.conf),确认以下两行已取消注释:
- LoadModule cgi_module modules/mod_cgi.so(加载 CGI 支持)
- AddHandler cgi-script .py .cgi(告诉 Apache 把 .py 和 .cgi 当作可执行 CGI 程序)
如果使用 Debian/Ubuntu 系统,还可直接运行:
a2enmod cgi,然后重启服务。
配置 CGI 目录权限与路径映射
CGI 脚本不能放在任意目录,必须放在 Apache 明确授权执行的路径中。常见做法是:
立即学习“Python免费学习笔记(深入)”;
- 用 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" 将 URL 路径
/cgi-bin/映射到服务器上的物理目录(如 /var/www/cgi-bin) - 为该目录添加执行权限配置:
<Directory "/var/www/cgi-bin"> Options +ExecCGI AllowOverride None Require all granted </Directory>
注意:Windows 用户需将路径写成正斜杠格式,如 C:/apache/cgi-bin;macOS 用户默认 CGI 目录常为 /usr/local/var/www/cgi-bin。
编写合规的 Python CGI 脚本
脚本本身必须满足 CGI 协议要求,否则会报 500 错误。关键点有三个:
-
首行指定解释器路径,例如:
#!/usr/bin/env python3(Linux/macOS)或#!C:\Python39\python.exe(Windows) -
输出 Content-Type 响应头 + 一个空行,缺一不可:
print("Content-Type: text/html") print() # 必须是空 print(),不能有空格或字符串 -
后续输出即 HTML 内容,例如:
print("<h1>Hello from CGI</h1>")
保存为 /var/www/cgi-bin/test.py 后,记得赋予执行权限:
chmod +x /var/www/cgi-bin/test.py
验证与排错
重启 Apache 后,访问 http://localhost/cgi-bin/test.py。若页面空白或报错,检查:
- Apache 错误日志(如 /var/log/apache2/error.log),看是否有权限拒绝、解释器找不到、语法错误等提示
- 脚本是否真的有执行权限(ls -l 查看是否含
x) - Python 解释器路径是否真实存在(尤其 Windows 下需绝对路径)
- 是否漏掉空行——这是最常见 500 原因


















