Linux系统:配置Apache支持CGI(Ubuntu)

配置Apache支持CGI

根据以下步骤配置,实现Apache支持CGI

  1. 安装Apache:
    可参照文章: Ubuntu安装Apache教程。
  2. 执行以下命令,修改Apache2配置文件000-default.conf:
powershell 复制代码
sudo vim /etc/apache2/sites-enabled/000-default.conf,

将标注行取消注释,并更新保存

  1. 执行以下命令,修改Apache2配置文件serve-cgi-bin.conf:
powershell 复制代码
sudo vim /etc/apache2/conf-available/serve-cgi-bin.conf
powershell 复制代码
<IfModule mod_alias.c>
        <IfModule mod_cgi.c>
                Define ENABLE_USR_LIB_CGI_BIN
        </IfModule>

        <IfModule mod_cgid.c>
                Define ENABLE_USR_LIB_CGI_BIN
        </IfModule>

        <IfDefine ENABLE_USR_LIB_CGI_BIN>
                ##ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/  (注释掉默认的)
                ScriptAlias /cgi-bin/ /var/www/html/cgi-bin/
                ##<Directory "/usr/lib/cgi-bin"> (注释掉默认的)
                <Directory "/var/www/html/cgi-bin/">
                        AllowOverride None
                        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                        Require all granted
                        AddHandler cgi-script cgi
                </Directory>
        </IfDefine>
</IfModule>

将ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 替换成ScriptAlias /cgi-bin/ /var/www/html/cgi-bin/

将/usr/lib/cgi-bin 替换成/var/www/html/cgi-bin/

并在</Directory >中添加AddHandler cgi-script cgi

并更新保存。

  1. 执行以下命令,修改Apache2配置文件cgid.load:
powershell 复制代码
sudo vim /etc/apache2/mods-available/cgid.load
powershell 复制代码
AddHandler cgi-script .cgi .pl .py .sh

插入红色标注代码 AddHandler cgi-script .cgi .pl .py .sh 。

并更新保存

  1. 执行以下命令,创建一个cgid.load的链接文件:
powershell 复制代码
sudo ln -s /etc/apache2/mods-available/cgid.load /etc/apache2/mods-enabled/cgid.load
  1. 执行以下命令,重启Apache服务:
powershell 复制代码
sudo /etc/init.d/apache2 restart
  1. 执行以下命令,新建cgi-bin文件夹:
powershell 复制代码
sudo mkdir /var/www/html/cgi-bin/
  1. 进行/var/www/html/cgi-bin/ 目录下 创建CGI测试程序,测试CGI程序运行环境:
    (1)新建一个文件 helloworld.c , 并输入下述内容
powershell 复制代码
#include<stdio.h>
int main()
   {
	   printf("Content-Type: text/html\n\n");
	   printf("hello world");
	   printf("第一个apache2配置下的cgi运行程序");
	   return 0;
   }

(2)执行以下命令,编译源文件:

powershell 复制代码
sudo gcc /var/www/html/cgi-bin/helloworld.c -o /var/www/html/cgi-bin/hello2.cgi

注意:执行这一步需要安装gcc依赖包。

执行成功后 在当前目录下生成一个hello2.cgi的目标文件。
/var/www/html/cgi-bin/hello2.cgi其中hello2.cgi为生产目标文件名,可以带后缀,可以不带后缀,带后缀作以提示功能,告诉使用者这是一个编译后的cgi文件。

(3)执行以下命令,修改文件权限:(如果可以直接执行第四步 并成功输出结果,可以说明文件权限是默认配置好的,可以不进行其他配置)(为什么设置文件权限,和Linux的权限管理有关,可查看下方链接)

powershell 复制代码
sudo chmod 755 /var/www/html/cgi-bin/hello2.cgi

(4)在/var/www/html/cgi-bin/目录下执行以下命令,编译源文件:

powershell 复制代码
./hello2.cgi

终端输出打印结果

  1. 页面测试:
    浏览器输入网址:http://localhost/cgi-bin/hello2.cgi ,(localhost可替换成服务器的IP) 在页面可以看到如下内容,表明CGI环境配置成功。

因为字符集问题,所以中文变成了乱码,但是只要页面加载成功,说明我们CGI环境配置成功。

  1. 注意:如果通过非root用户启动apache2, 执行 /var/www/html/cgi-bin 目录下的sh文件失败,则修改 envvars 文件,执行命令:sudo vim /etc/apache2/envvars, 将原标记处 www-data 修改为当前执行的用户及其对应的用户组,保存后,执行命令:/etc/init.d/apache2 restart , 重启apache2。重启成功后,再去浏览器输入地址访问即可。

envvars文件默认配置如上图所示,如果 1-9步骤 均无 报错。则可忽略第十步骤。

相关链接:

1.Linux系统:Linux中ln命令用法

2.Ubuntu安装Apache教程

3.GCC编译器介绍

4.为什么CGI程序的权限必须是755

相关推荐
律宏阔1 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔1 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴1 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千2 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei372 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei372 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei372 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
GeW2 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux
GeW2 小时前
工业场景中的Linux与数据库选型:高端化转型的技术底座
linux
yunwei372 小时前
eBPF 开发者教程: 简单的 XDP 负载均衡器
linux·后端·性能优化