1.apache 安装
直接从源下的,apt-get install apache2
2.cgi 包下载
最开始是 wget gnu 上的最新版本,然后提示缺少依赖包( autoheader\perl 之类的),就继续下依赖包,但是导进去貌似把二进制文件弄乱了...结果没法 make ,然后下了个2014年的版本,就没有依赖包的问题.
3.cgi 和 vscode 配合(有问题)
下完了之后放在了 /usr/include/c++ 目录下,和其他的cpp头文件放一块.在 vscode 中就可以找到包了,但是 make 的时候没法自动找到,改了 target.json 也不可以(可能没改对),得手动用g++ -lcgicc才可以编译成功.
4.apache 运行 .cgi 文件的配置
apache 默认运行 cgi 目录为 /var/www/cgi-bin ,为了能通过网页上访问 cgi-bin 上的 cgi 文件,要进行两个配置文件的配置+1个加载apache 的 cgi 模块的操作.
1)配置访问 cgi 目录的虚拟站点(能够让网页找到此目录,以及执行 cgi 文件)
配置代码:
<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
AddHandler cgi-script .cgi .pl
2)在 /etc/apache2/sites-available 中添加我们自定义的站点配置文件信息( cgi.conf )
光配置了上面的,还不可以成功访问,会出现权限不足的问题.还需要在 /etc/apache2/sites-available 里面添加关于我们新增加的虚拟站点的访问信息.新建一配置文件 cgi.conf ,配置如下(我是 copy 了 apache 的一份原生配置然后照着它改的):
<VirtualHost *:80>
ServerName www.cgi.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/cgi-bin
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
3)加载 apache 的 cgi 模块
刚开始配置要不就是提示找不到页面,要不就是找到了但是是直接下载cgi文件而不是运行的情况.后来发现是没有加载 apche 的 cgi模块,无法运行,执行命令:
sudo a2enmod cgi
后,然后重启服务,就可以通过在网页上访问来运行 cgi 程序了.
4)例子
我在/var/www/cgi-bin 下写了一个cpp文件,代码如下:
#include <iostream>
using namespace std;
int main ()
{
cout << "Content-type:text/html\r\n\r\n";
cout << "<html>\n";
cout << "<head>\n";
cout << "<title>Hello World - 第一个 CGI 程序</title>\n";
cout << "</head>\n";
cout << "<body>\n";
cout << "<h2>Hello World! 这是我的第一个 CGI 程序</h2>\n";
cout << "</body>\n";
cout << "</html>\n";
return 0;
}
然后编译生成了可执行文件,把可执行文件改名为 cpp.cgi (以cgi后缀结尾的文件),接着在网页上访问此文件即可得到结果.
访问站点 www.cgi.com/cpp.cgi,网页就会出现hello world了.
总结:网上找解决方法有时候真的像大海捞针,每个人的方法都不同,要自己尝试成功后,再去理解配置的每一步,这样下次遇到类似的问题时才会有参考,而不是随便配好了就完事了.