配置CGI、虚拟主机、https、mod_deflate、mod_status

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配置好一切可以重启网页查看了

wKiom1MyvdCCijDmAAILFliK-_s763.jpg

3.4把ca的证书导入到本地windows的主机,把ca的证书传到windows中,并改后缀为crt,双击即可

wKiom1Myv2GhM5prAAEF-sKsU3s848.jpg

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服务并查看网页是否有压缩

wKiom1My7XeDVnX0AAHkm4vP6XE585.jpg

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.访问该页面看效果

wKioL1M1mEuBxo1QAAH5GKbQRXQ386.jpg

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.重新装载配置文件,然后查看效果

wKiom1M1mo7h2ptxAAD8SJtxfvU368.jpg

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,不然把第一个用户覆盖了


你可能感兴趣的:(python,配置文件,gateway,应用程序,虚拟主机)