1.CGI
CGI:Common Gateway Interface通用网关接口,这是一种独特的协议.他能帮助http处理应用程序,http本身不能执行应用程序,它仅仅只是把用户请求的资源识别是哪种类型然后返回给用户而已.比如我们登录一个网站,点击登录按钮后,http本身是不能处理这类请求的,他需要通过CGI的接口指向的目录去寻找对应的应用程序(比如:bash,python),而后应用程序执行完用户发送过来的请求,返回给用户.总的来说,CGI就是http跟应用程序的一个接口.CGI过于粗糙和简陋,他的很多执行权限都需要SUID等,所以现在很少用了,但是也需要了解他的工作机制.只有在配置文件ScriptAlias定义下的文件才能被当作CGI来执行,一个是mod_alias,是用来实现别名的,另一个mod_cgi是用来实现CGI协议的
LoadModule cgi_module modules/mod_cgi.so #这是实现ScriptAlias别名的模块 LoadModule alias_module modules/mod_alias.so/ #这是实现ScriptAlias的cgi解析的协议模块 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" #这是别名目录,ExeCGI可以实现等同效果 <Directory "/var/www/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory>
#!/bin/bash #一个bash shell的可执行程序,保存为test cat << EOF The hostname is : `hostname`. The time is : `date`. EOF
<VirtualHost *:80> #httpd.conf中的配置文件,可以通过www.a.com/cgi-bin/test访问 servername www.a.com DocumentRoot /var/www/a.com ScriptAlias /cgi-bin/ "/var/www/a.com/cgi-bin/" <Directory "/var/www/a.com/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> </VirtualHost>
The hostname is :****. #网页执行结果 The time is : Mon Mar 24 04:40:34 PDT 2014.
2.虚拟主机
简单来说,虚拟主机就是一台物理服务器提供多个站点.注意:要使用虚拟主机,中心主机必须关闭.实现虚拟主机的方式主要有三种.
1:基于不同的IP实现不同的虚拟主机.(多个主机需要多个IP,代价太高)
2:基于不同的port实现不同的虚拟主机(http默认是80端口,使用不同的端口用户访问不方便).
3:基于不同的主机名实现的虚拟主机(实用).客户端发送的报文到服务器端,由服务器端的内核拆分下4层报文,再由httpd服务拆分请求首部,来识别请求的是哪台主机
#DocumentRoot "/var/www/html" #关闭虚拟主机
<VirtualHost *:80> #虚拟主机 servername www.a.com #主机名 DocumentRoot /var/www/a.com #该主机存放网页的主目录 </Directory> </VirtualHost> <VirtualHost 172.16.2.1:80> #基于IP的虚拟主机,IP要变化 servername www.c.net DocumentRoot /var/www/c.net </VirtualHost> <VirtualHost *:8080> #基于端口的虚拟主机,端口要变化 servername www.b.org DocumentRoot /var/www/b.org </VirtualHost>
3.https
http本身不具备加密的功能,对于需要传输密文的情况下就不适用了,他可以基于ssl/tls来实现加密.经常使用的是sslv3版本和tlsv1版本.https是一种二进制格式的协议,他监听在tcp的443端口,ssl只能基于ip来实现,因为他在http协议建立之前就建立了,所以如果你有多台虚拟主机,只能一台使用ssl
ssl会话的建立过程
首先tpc/ip三次握手建立连接
在tcp/ip连接的基础上开始做SSl的会话和协商
客户端请求
服务器发送证书
客户端验证证书
日期检测,是否在有效期内
证书颁发者的可信度
检测证书的签名是否可信
持有者的身份检测
交换协议版本号
选择双方都支持的加密方式
双方实现身份验证(通常服务器端不会验证客户端的身份)
实现密钥交换
客户端在SSL上发送HTTP请求
服务器端在SSL上发送已加密响应
关闭SSL
关闭三次握手
httpd基于mod_ssl模块实现对ssl的支持
这里我就不做证书签署了,不会的可以去看我的上一篇文章.
3.1首先安装mod_ssl,httpd的
yum install mod_ssl -y #安装mod_ssl rpm -ql mod_ssl #查看安装生成的文件 /etc/httpd/conf.d/ssl.conf #到这个文件中去看看 /usr/lib64/httpd/modules/mod_ssl.so /var/cache/mod_ssl /var/cache/mod_ssl/scache.dir /var/cache/mod_ssl/scache.pag /var/cache/mod_ssl/scache.sem
3.2查看/etc/httpd/conf.dssl.conf
vim /etc/httpd/conf.d/ssl.conf #查看该文件 LoadModule ssl_module modules/mod_ssl.so #已装载mod_ssl模块 Listen 443 #监听443号端口 <VirtualHost _default_:443> #虚拟主机 DocumentRoot "/var/www/html" #默认是禁用的,这里要启用 ServerName www.a.com:443 #默认是禁用的,这里要启用 ErrorLog logs/ssl_error_log #错误日志 TransferLog logs/ssl_access_log #日志格式,ssl是二进制的,所以用这种格式 LogLevel warn #日志等级 SSLEngine on #是否开启ssl功能 SSLProtocol all -SSLv2 #支持所有(all)ssl除了SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW #支持的加密算法 SSLCertificateFile /etc/httpd/ssl/httpd.crt #web服务的证书,比较关键,要记住 SSLCertificateKeyFile /etc/httpd/ssl/httpd.key #web服务的私钥,也比较关键,要记住
3.3配置好一切可以重启网页查看了
3.4把ca的证书导入到本地windows的主机,把ca的证书传到windows中,并改后缀为crt,双击即可
4.mod_deflate
压缩数据,对于一个访问量非常大的网站来说,有时候不得不用到压缩网页的技术来节约带宽,一般来说,只压缩静态文本类的文件,对于视频和图片类的不要进行压缩,因为视频和图片的压缩比太低了.那文本类的文档是否要压缩,也要看你主机的带宽和CPU的使用情况,如果带宽很充足,而CPU快跑不动了,那就不需要压缩,反之,CPU很充足,带宽不够,那还是压缩吧.httpd自带的一个mod_deflate工具,他会调用gzip等之类的工具对指定的内容进行压缩.
4.1首先判断你的httpd是否有安装该模块
httpd -M | grep deflate
httpd -M | grep deflate #查询系统是否有该模块 Syntax OK deflate_module (shared) #系统有该模块
4.2在配置文件中加入/etc/httpd/conf.d/deflate.cond,并输入如下内容
SetOutputFilter DEFLATE #表示启用DEFLATE这个过滤器对输出内容进行过滤并完成压缩 #<IfModule mod_deflate.c> # mod_deflate configuration # Restrict compression to these MIME types AddOutputFilterByType DEFLATE text/plain #对该内容进行压缩,下同 AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/css # Level of compression (Highest 9 - Lowest 1) DeflateCompressionLevel 9 #指定压缩级别 # Netscape 4.x has some problems. BrowserMatch ^Mozilla/4 gzip-only-text/html #对Mozilla4的浏览器 # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip #对这个版本的浏览器不压缩 # MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html #
4.3重启httpd服务并查看网页是否有压缩
5.mod_status
httpd内置有一个status信息页面,且此信息可以通过web访问,显示httpd的属性信息,对于这种内生性的,没有文件系统路径的使用
<localtion[~]"">
</location>
如果某要配置其属性的URL能映射到某具体文件系统路径,建议使用
<Directory[~]"">
</Directory>
5-1.配置
/etc/httpd/conf
<Location /server-status> #访问的页面后面加上server-status SetHandler server-status #使用SetHandler这个处理器来处理 Order deny,allow allow from all #允许所有的访问,只是实验,这样很不安全,生产环境不要这样做 </Location>
5-2.访问该页面看效果
5-3.用户认证
对于5-1的设定是不安全的,所以要添加用户认证
929 <Location /server-status> 930 SetHandler server-status 931 AuthType Basic # 932 AuthName "Server Status" # 933 AuthUserFile "/etc/httpd/conf/.htpsswd" #密码文件 934 Require valid-user #对所有用户 935 Order deny,allow 936 allow from all 937 </Location>
5-4.重新装载配置文件,然后查看效果
6.用户认证
<Directory "/var/www/html/passwd"> #访问这个目录需要用户认证 349 Options None 350 Allowoverride AuthConfig #明确指明需要用户认证 351 AuthType Basic #指定认证类型,这里有Basic和 352 AuthName "This is Passwd ," #提示框的提示信息 AuthBasicProvider file #说明是文件类型认证,可以省略,因为下面的也指明了文件路径了 353 AuthUserFile "/etc/htpasswd" #帐号密码信息 354 Require valid-user #valid-user,所有位于上一个文件内的合法用户都可以访问 355 </Directory>
6-1.创建密码
使用命令: 第一个用户:htpasswd -c -m /etc/htpasswd tom #只有创建第一个用户是才使用-c,表示创建文件 第二个用户:htpasswd -m /etc/htpasswd jerry #不要使用-c,不然把第一个用户覆盖了