CGI(Common Gateway Interface):通用网官接口、这是一种协议。
httpd这个服务他只是把客户端的请求识别成哪种类型、而后响应给客户端、他的识别是靠文件的后缀名来识别文件类型的和文件内容、当他无法识别时他直接让你下载、让你自己处理了、httpd本身是无法执行脚本的、现在我们在/usr/local/apache/htdocs/目录下创建一个test.sh的脚本文件、因为我这里的apache的工根目录就是这个路径下、可以查看一下配置文件、也可以改配置文件:
# vim /usr/local/apache/htdocs/test.sh
#!/bin/bash
#
echo "hello word!"
OK、保存退出、测试一下我们可以看到浏览器提示让我们下载这个文件
于是我们把test.sh的后缀名给去掉、再去试一下:
# mv test.sh test
直接显示文件中的内容、没有执行里面的脚本、而我们想要的只是他echo里的值而已、在这里httpd本身无法执行脚本、因此我们想在服务器端执行脚本后再把结果返还给客户端、那要怎么实现呢、要执行test.sh脚本就要httpd基于CGI协议调用shell解析器了、那他又是怎么调用的呢、这里就用到我们所说的CGI了、那CGI的工作原理是什么呢:
注意:CGI这种协议过于粗糙和简陋、并且基于这个模式通信时他要求后端被调用的这个解释程序为了达到某种目的、为了获取某种资源、必须以管理员的身份运行、这样很危险。CGI很多程序都要求具有SUID(执行这个程序时不以用户的身份运行、而是以文件的属主的身份运行)或SGID(以文件的属组运行)的权限。
实现步骤:
编辑主配置文件、/etc/httpd24/httpd.conf、定义ScriptAlias、手动编译时要把CGI的模块启用了(LoadModule cgi_module modules/mod_cgi.so)
# vim /etc/httpd24/httpd.conf
# mv /usr/local/apache/htdocs/test /usr/local/apache/cgi-bin/
# cd /usr/local/apache/cgi-bin/
# vim test
保存退出后测试一下、OK、这就可以看到脚本执行后返回的结果了。
基于用户的访问控制:
如果我们要基于用户的访问控制、那就意味我们的网页文件不是所有人都可以访问、也不管来自哪个IP地址、必须输入一个合法的帐号和密码才可以访问、这就是http的认证机制:
认证类型有两种:basic(基本认证)和digest(摘要认证)、基本认证的帐号和密码是明文发送的、摘要认证是根据hash编码以后发送的。
编辑主配置文件:
# vim /etc/httpd24/httpd.conf
# mkdir -p /www/htdocs/fin
# cd /www/htdocs/fin
# vim index.html
# htpasswd -c -m /etc/httpd/conf/.htpasswd tom
-c:表示创建这个文件
-m:表示用MD5加密的存放密码
虚拟主机:
在我们的web服务器上想提供多个站点、比较我们想让一个服务器提供三个站点、那我们就用得虚拟主机了、所谓虚拟主机就是一个物理服务器提供多个站点。
要建立虚拟主机、那这些主机要怎么去做区别呢、这里我们有三种不同的方法、一个是基于不同的IP来实现虚拟主机的、另一种基于不同的端口来实现虚拟主机的、还有一种是基于主机名(FQND)来实现虚拟主机的、要注意一点的是:要使用虚拟主机提供多个站点时、得先关闭中心主机。
先关闭/etc/httpd24/httpd.conf下的中心主机
# vim /etc/httpd24/httpd.conf
# vim /etc/httpd24/extra/httpd-vhosts.conf
# cd /usr/local/apache/htdocs
# mkdir a b
分别在a和b下创建两个html文件
# vim index.html
<h2>www.a.com</h2>
<h2>www.b.com</h2>
修改了配置文件都要重启一下服务:
# service httpd24 reload
测试一下基于不同的IP地址访问的、都可以了哦!
基于端口访问的、那我们就改一下配置文件就可以了
# vim /etc/httpd24/extar.httpd-vhosts.conf
还要在主配置文件中添加一个8080的端口:
# vim /etc/httpd24/httpd.conf
Listen 8080
重启一直服务、再测试一下不同的端口访问:
# service httpd24 reload
基于FQND的不同虚拟主机来访问的、在httpd2.2以上的版本当中要基于虚拟主机的访问有一个前提、得在定义虚拟主机的配置文件里把NameVirtualHost *:80这项给启用起来、没有这项得自己手动添加进去、则否将无法访问。
# vim /etc/httpd24/extra/httpd-vhosts.conf
NameVirtualHost *:80
配置好之后那怎么解析我们的FQND呢、这里我们就不做解析了、直接在windows下的hosts下明确指定就可以了、编辑C:\Windows\System32\drivers\etc\hosts下的这个文件、加这三个域名地址就可以了、保存退出测试一下咯:
好、这就是我们基于虚拟主机的几种不同的设置。
httpd的各种配置各种功能、有待我们一一去设置、去尝试、功能强大、配置简单、不过、小生初来咋到、有什么做得不妥之处还望大神指点、在此先谢谢你的关注了!