Linux中级(四)Apach再涉
作者:互联网
一、虚拟主机
概念:让你的一台服务器上面,有好多个主网页存在,但实际上硬件只有一台主机,但是从网络地址来看,似乎有多台主机存在
基于名称:即每个 IP 多个站点
(1)单击两个连接发现不同的信息内容
http://http.wzj.com
http://mail.wzj.com
(2)dig http.wzj.com|mailwzj.com
现象:显示的是相同的IP,即这两个网址都指向同一个IP!
功能:可以让多个主机名对应到不同的主网页目录(DocumentRoot 参数),看起来像有多台主机的样子!
实验的前提
一个主机有多个别名
方式1:客户端的/etc/hosts对IP设置多个别名
方式2:DNS帮你解析域名的IP
服务器子配置文件进行配置
(1)编辑子配置文件
vim /etc/httpd/conf.d/vhost.conf
#(1)默认的虚拟主机的配置
<VirtualHost _default_:80>
DocumentRoot /www/html/ #声明资源的根目录(没有明确说明时,任何可以解析成此IP但都可以访问此资源)
#说明:默认配置文件的根目录是/etc/httpd,所以这里是相对路径
Customlog logs/default.log conbined #三种日志类型的混合(right、error、default)
</virtualHost>
(2)reload服务或者httpd -t来检测语法是否有问题!
(3)客户端测试
实验现象:客户端可以通过各个主机名的来访问同一资源,和我们的需求有一点背道而驰!
需求:每个主机有各自的资源,客户端通过不同的主机名访问,对应的资源应该是不一样的
(1)创建虚拟目录,并改变上下文类型,并创建各自的家目录
(2)子配置文件进行配置
#(1)默认的虚拟主机的配置
<VirtualHost _default_:80>
DocumentRoot /www/html/
#ServerName master.wzj.com
#说明:默认配置文件的根目录是/etc/httpd
Customlog logs/default.log combined
</virtualHost>
#(2)当客户端输入http.wzj.com,实际访问的是/web_virt_dir/http/html下的资源
<VirtualHost *:80>
DocumentRoot /web_virt_dir/http/html
ServerName http.wzj.com
Customlog logs/music.log combined #日志产生(不同的主页指定不同的登陆信息,容易分析debug)
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /web_virt_dir/mail/html
ServerName mail.wzj.com
Customlog logs/mail.log combined
</VirtualHost>
#上面只是声明客户端访问的位置,具体能不能看到资源,需要下面的设置
#声明可以访问的资源目录
<Directory "/web_virt_dir">
Require all granted #所有用户均可!
</Directory>
子配置目录加载顺序:是按照字母顺序加载的!
查看加载顺序:httpd -S --->这个命令将会显示 Apache 是如何解析配置文件的
说明:测试的时候可以看日志以及在浏览器输入不同的域名看展示的内容根据结果来验证!
附上DNS相关数据库配置文件
二、Apach默认支持的网页程序语言
tomcat是一个插件-->jsp转换成html
java jsp 运行在tomcat服务器比较好
但是asp .net 最好运行在服务器windows2003的IIS
2.1)默认是html
说明:不需要安装相关的插件!
2.2)php
写一个php的脚本放到web站点的资源目录中
<?php
phpinfo();
?>
#PHP程序提供的函数库,显示www服务器内的相关信息(Apach和PHP)!
客户端测试实验现象:没有报错,但是看不到内容
原因:没有安装PHP的插件
注意:一定要重启服务才能加载conf的配置文件!
说明:需要插件的支持
说明:插件与模块区别主要看是否有相应的配置文件!
注意:缓存的问题(firefox -->ctrl+shift+delete)
2.3)补充:CGI
CGI(Common Gateway Interface) 是WWW技术中最重要的技术之一。CGI是外部应用程序(CGI程序)与WEB服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。
案例:现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户端输入一些信息,如评论之类的东西。接着用户按一下“发布或提交”(到 目前为止工作都在客户端),浏览器把这些信息(数据)传送到服务器的 CGI目录下特定的CGI程序中,于是CGI程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中,然后CGI程序将执行结果返回给服务器(webServer),然后服务器将结果返回给客户端,表示请求的任务已经结束。此时用户在浏览器里将看到“留言结束”的字样,整个过程结束。
核心:理解上面的交互过程!
CGI的工作方式,从Web服务器的角度看:是在特定的位置定义了可以运行CGI程序,当服务器端收到一个匹配URL的请求,相应的程序就会被调用,并将客户端发送的数据作为输入,程序的输出会由Web服务器收集,并加上合适的(Head)档头,再发送回客户端。
特点:一般每次的CGI请求都需要新生成一个程序的副本来运行,这样大的工作量会很快将服务器压垮!因此一些更有效的技术像mod_perl,可以让脚本解释器直接作为模块集成在Web服务器(例如:Apache)中,这样就能避免重复载入和初始化解释器。不过这只是就那些需要解释器的高级语言(即解释语言)而言的;使用诸如C一类的编译语言则可以避免这种额外负荷。由于C及其他编译语言的程序与解释语言程序相比,前者的运行速度更快、对操作系统的负荷更小,使用编译语言程序是可能达到更高执行效率的,然而因为开发效率等原因,在目前直译性语言还是最合适的!
了解:编译语言和解释性语言!
了解:Apach对于Configuring Apache to permit CGI
2.4)Apach配置执行CGI程序
说明:以下理解来源于对文档的解读
2.4.1)默认的设置
#如果Apache是使用共享模块支持构建的,那么您需要确保模块已加载(不是太理解)
# LoadModule foo_module modules/mod_foo.so -->54行左右
httpd -l (查看加载的模块)!
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" -->234行左右
含义:客户端请求URL(http://域名/cgi-bin/*.pl)则服务器端会执行/var/www/cgi-bin/*.pl的脚本!
2.4.2)自定义
出于安全原因,CGI程序通常仅限于脚本别名的目录!
采取了适当的安全预防措施,可以从任意目录运行CGI程序。例如希望用户在其主目录中拥有Web内容,如果他们想拥有自己的CGI程序,但不能访问主CGI bin目录,他们需要能够在其他地方运行CGI程序。
需求:允许在任意目录中执行CGI
有两个步骤:
首先)必须使用addhandler或sethandler指令激活CGI脚本处理程序
其次)其次必须在options指令中指定execcgi
perl脚本语言:核心是正则表达式!
(1)创建任意的可以执行CGI程序目录
注意:上下文类型,这里的发布目录是/www/html(自定义的)!
perl的测试脚本如下
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";
测试说明:如果是pl为后缀那么访问的时候是在请求下载,而如果是cgi为后缀则是文本形式!
chmod a+x /www/html/cgi/ceshi.pl
#让其具有执行的权限!
原因:Apach不知道它是一个可执行的脚本,需要在配置文件中声明告诉它
#(1)默认的虚拟主机的配置
<VirtualHost _default_:80>
DocumentRoot /www/html/
<!--ServerName master.wzj.com-->
<!--说明:默认配置文件的根目录是/etc/httpd-->
Customlog logs/default.log combined
</virtualHost>
<!--声明可以访问的资源目录-->
<Directory "/web_virt_dir">
Require all granted
</Directory>
<Directory /www/html/cgi>
<!--(1)告诉服务器可以执行该目录的CGI程序或者脚本(激活此功能)-->
Options +ExecCGI
<!--(2)告诉服务器将cgi或pl扩展名为cgi程序的所有文件处理为cgi程序-->
AddHandler cgi-script .cgi .pl
</Directory>
测试://master.wzj.com/cgi/ceshi.pl
结果:Tue Apr 30 23:02:43 CST 2019
明确一点:浏览器本身不具有解析perl脚本的功能,需要相应插件的支持!
记得:重新启动服务-->客户端测试(就可以看到了)
说明:每个主页面都用于自己的CGI程序,但是不能读取
cgi-bin目录,通过自定义目录的形式,允许CGI程序在任意的目录执行
2.5)python
说明:原来用mod_python,现通常使用mod_wsgi代替!
(1)安装支持python的插件的mod_wsgi模块
WSGI(Web Server Gateway Interface)
yum install mod_wsgi.x86_64
/etc/httpd/conf.modules.d/10-wsgi.conf -->核心配置文件
(2)指定WSGI目录,放置wsgi程序
说明:如果是自定义的需要创建目录,并修改目录上下文类型,以便能httpd能被Selinux允许!
注意:webqpp.wsgi的上下文类型,并给他x的权限!
#(1)默认的虚拟主机的配置
<VirtualHost _default_:80>
DocumentRoot /www/html/
#ServerName master.wzj.com
#说明:默认配置文件的根目录是/etc/httpd
Customlog logs/default.log combined
</virtualHost>
<VirtualHost *:80>
DocumentRoot /web_virt_dir/http/html
ServerName http.wzj.com
Customlog logs/music.log combined
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /web_virt_dir/mail/html
ServerName mail.wzj.com
Customlog logs/mail.log combined
</VirtualHost>
############核心部分##############
<VirtualHost *:80>
ServerName wsgi.wzj.com
WSGIScriptAlias / /var/www/cgi-bin/webapp.wsgi #理解这句话的含义(可以换成其它的尝试下)!
</VirtualHost>
#声明可以访问的资源目录
<Directory "/web_virt_dir">
Require all granted
</Directory>
<Directory "/www/html/cgi">
Options +ExecCGI
AddHandler cgi-script .cgi .pl
</Directory>
客户端测试:wsgi.wzj.com
说明:这里是在客户端的/etc/hosts自定义wgsi.wzj.com的映射
结果:UNIX EPOCH time is now 1556670131.06
注意:重启httpd服务,然后客户端测试
CGI -->Common Gateway Interface -->数据库和网页的接口
标签:CGI,cgi,再涉,Apach,html,wzj,Linux,com,客户端 来源: https://blog.csdn.net/wzj_110/article/details/89680311