首先需要查看默认配置中是否有使用 ScriptAlias
指令:
通过如下命令查看
sudo grep -lr 'ScriptAlias' /etc/apache
根据输出的文件分析上下文(例如 if 指令有没有被执行,define 指令有没有被执行),看该文件里面的ScriptAlias
指令是否有被执行到,例如在我的机器上,该指令就没有被执行到。
一、建立测试环境
新建用户 www
存放 cgi-bin
测试文档及其他站点资源,并修改相应的目录权限。
useradd -d /home/www -m -s /bin/zsh
chmod 777 /home/www
cd /home/www
mkdir cgi-bin
chmod 777 cgi-bin
二、修改配置文件
下面修改/etc/apache2/site-available/000-default.conf
配置文件。
DocumentRoot /home/www/
ScriptAlias /cgi-bin/ /home/www/cgi-bin/
<Directory "/home/www/cgi-bin/">
Options +ExecCGI
Order allow,deny
Allow from all
</Directory>
作用是将url
/
虚拟映射到实际目录 /home/www
并将 /home/www/cig-bin/
目录下的所有文件作为 cgi
文件对待。
这里由于 /home
目录的权限为 755, 我们通过修改配置文件 /etc/apache2/apache2.conf
来添加可访问权限。
<Directory /home/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
作用是允许目录 /home/www
接收所有请求,如果目录下没有索引文件index.html
则显示目录和文件列表。
重启apache
服务
sudo apache2ctl -k restart
浏览器输入http://127.0.0.1/,效果如下图所示
三、测试cgi
perl 脚本
编写perl
脚本 prel_hello.cgi
#!/usr/bin/perl
print "Content-Type: test/plain\n\n";
print "Hello!\r\n";
放到目录/home/www/cgi-bin
下,就能通过浏览器打开http://127.0.0.1/cgi-bin/prel_hello.cgi
c编译二进制文件
编写 hello.c
文件:
#include <stdio.h>
int main()
{
printf("Content-Type: text/html\n\n");
printf("Hello, world\n");
return 0;
}
编译
gcc -o c_hello.cgi hello.c
放到目录/home/www/cgi-bin
下,就能通过浏览器打开http://127.0.0.1/cgi-bin/c_hello.cgi
如果你出现了目录权限问题,建议你先阅读一下下面的文章,熟悉一下Apache
的配置选项参数