Ubuntu下Apache2运行CGI程序遇403错误及多类型脚本配置问询
问题解决:Apache运行CGI脚本(Perl/EXE/Shell)的配置修正
一、403错误的核心原因与修复
你的配置使用了Apache 2.2的旧权限指令,而当前版本是Apache 2.4,已采用全新授权语法;同时需确保CGI模块已启用。
修复步骤:
- 启用CGI模块:
执行命令:sudo a2enmod cgi - 替换权限配置:
将<Directory "/usr/lib/cgi-bin">段内的:
替换为Apache 2.4的标准授权指令:Order allow,deny Allow from allRequire all granted
二、配置支持多种脚本后缀(.pl/.exe/.cgi/.sh)
在AddHandler指令中添加所有需要支持的文件后缀,修改后如下:
AddHandler cgi-script .pl .cgi .sh .exe
注意:Linux系统下的.exe文件需为可执行二进制文件(如兼容Wine的程序),确保系统能正常运行它。
三、脚本与权限验证
- Shebang检查:你的Perl脚本
hw.pl中#!/usr/bin/perl是正确的,可通过which perl命令确认该路径存在。 - 脚本权限:所有待运行的脚本必须具备可执行权限(你的
hw.pl为-rwxr-xr-x、fh_fe.exe为-rwxrwxrwx,已满足要求)。 - 目录权限:
/usr/lib/cgi-bin的drwxr-xr-x权限正常,Apache进程用户(通常为www-data)可读取并进入该目录。
四、修改后的完整VirtualHost配置
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Require all granted AddHandler cgi-script .pl .cgi .sh .exe </Directory> </VirtualHost>
五、重启Apache服务
修改配置后必须重启服务使设置生效:
sudo systemctl restart apache2
现在访问localhost/cgi-bin/hw.pl即可正常输出"Hello, World."。其他后缀的脚本只要满足可执行、Shebang正确(如.sh脚本需添加#!/bin/bash),即可正常运行。
内容的提问来源于stack exchange,提问作者Jonathan Leslie
相关产品推荐
相关产品推荐

