ubuntu 18 配置apache2并和运行cgi脚本
ubuntu 18 下配置apache2并和运行cgi脚本
配置环境太恶心了,各种问题,感谢度娘。
这个小作业还是不可避免的需要在linux下运行,没办法,只能继续在linux下整一个环境。
安装apache2
1、解决权限问题
安装过程中不可避免的会遇到一些里的权限不足的问题,所以安装前需要解决权限的问题。
su root
可以获取最高权限,并在这个终端下左右的命令都具有root权限。第一次使用需要配置密码,以后只用只需输入密码即可。比较推荐这种方式。
sudo + 命令
可以让这条命令具有root权限。
2、解决依赖包
pache2安装前需要先解决apache2的依赖包:否则直接安装往往会出现apr not found
、APR-util not found
、pcre-config for libpcre not found
类似的错误。
arp和apr-util的下载地址在这,可以找到自己适合的版本,以下两个地址是我安装的版本直接下载地址。
apr-1.4.5.tar.bz2下载地址
apr-util-1.5.2.tar.bz2
3、安装apr:
首先根剪切apr与apr-util到/usr/local/src下,然后进行解压和编译安装操作
mv apr-1.4.6.tar.bz2 /usr/local/src
mv apr-util-1.5.2.tar.bz2 /usr/local/src
tar -xjvf apr-1.4.6.tar.bz2
tar -xjvf apr-util-1.5.2tar -xjvf apr-1.4.6.tar.bz2
cd apr-1.4.6
./configure --prefix=/usr/local/apr #安装在/usr/local/下 命名为apr
make
make install
4、编译安装apr-util
mv apr-util-1.5.2.tar.bz2 /usr/local/src
tar -xjvf apr-util-1.5.2.tar.bz2
cd apr-util-1.5.2
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make
make install
5、pcre-devel包
httpd-2.4.4编译过程也要依赖于pcre-devel软件包,需要事先安装。此软件包系统光盘自带,因此,找到并安装即可。
yum -y install pcre-devel
如果没有,这里可以下载pcre-8.31.zip
./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre # (除了指定Apache的安装目录外,还要安装apr、apr-util、pcre,并指定参数)
make
make install
6、安装apache2
在解决以上依赖包之后,现在开始进行apache2的安装。
httpd-2.4.4.tar.bz2下载地址
mv httpd-2.4.4.tar.bz2 /usr/local/src
tar -xjvf httpd-2.4.4.tar.bz2
cd httpd-2.4.4
./configure --prefix=/usr/local/apache2 --enable-module=shared
命令解释
--enable-so:支持动态共享模块,如果支持php将不能与apache一起工作。必须要有
--enable-ssl:启用ssl功能,如果不启用将无法使用https
--enable-mpms-shared=all:prefork、worker、event
--with-mpm=event:event为默认
--enable-rewrite:支持URL重写
--enable-cgi :支持cgi
--enable-cgid:httpd使用event或者worker得启用被线程方式访问
--enable-modules=most :启用大多数模块
--enable-mods-shared=most:启用大多数共享模块
7、运行apache
sudo apt-get remove --purge apache apache2 # (彻底删除)
sudo /etc/init.d/apache2 restart # 重启
sudo /etc/init.d/apache2 start # 启动
sudo /etc/init.d/apache2 stop # 停止
sudo makedir /home/htdocs
sudo chmod 777 /home/htdocs # 生成网站目录,并修改权限
启动apache后,在浏览器地址栏输入localhost
即可运行。
配置apache支持cgi脚本
1、建立保存cgi脚本的文件夹,进入/var/www/
文件下,建立cgi-bi
cd /var/www
mkdir cig-bin
2、在ubuntu 18下,apache2的配置文件都在/etc/apache2下.进入/etc/apache2/mods-enabled
,打开mime.load 文件,添加模块
LoadModule mime_module /usr/lib/apache2/modules/mod_mime.so
LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so # 这一行是添加的
3、进入/etc/apache2/conf-enabled
,打开serve-cgi-bin.conf
,按如下修改:
以下第11行和12行是修改后的路径,16行是新添加的。
<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/ /var/www/cgi-bin/
<Directory "/var/www/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
AddHandler cgi-script .cgi .pl .py .sh
</Directory>
</IfDefine>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
4、重启apache2
sudo /etc/init.d/apache2 restart
运行脚本
1、运行.sh脚本
在/var/www/cgi-bin/
文件夹建立hw0.sh
(建立命令为touch hw0.sh
),并写入以下内容:
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "hello web"
exit 0
然后赋予可执行权限:
sudo chmod a+x hw0.sh
之后在浏览器地址栏输入:localhost/cig-bin/hw0.sh
即可
2、运行c脚本
在/var/www/cgi-bin/
文件夹建立hello.c
,并写入以下内容:
#include <stdio.h>
int main()
{
printf("Content-Type: text/html\n\n");
printf("Hello, world\n");
return 0;
}
然后生成cgi文件,这里不需要赋予可执行权限。
gcc hello.c -o hello.cgi
之后浏览器输入localhost/cgi-bin/hello.cgi
即可。
注意的问题
错误代码404
404为找不到文件,有可能是路径错误。
apache2的html默认文件夹在/etc/apche2/sites-enabled/000-default.conf
文件中DocumentRoot
即默认路径。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
错误代码500
这是我配置过程遇到最多的问题。
1、如果c脚本生成cgi可以运行,但py,sh脚本不能运行,原因可能是没有为sh脚本赋予可执行权限
2、还有可能的原因为脚本第一行路径不对,解决方式为找到自己的环境的路径,具体参考我上篇文章。
至此apache环境配置完成,终于可以应用起来了,如果你在配置过程中遇到各种报错,不要气馁,我前前后后也是安装了几遍才可以,其中遇到的问题不计其数,感谢度娘。