11、http status 

查看web服务器状态的模块:status 

要求安装mod_status模块,默认是安装的。 

                 1、已经加载了LoadModule status_module modules/mod_status.so 

                 2、按需要开启ExtendedStatus on 

                 3、配置文件

                                    <Location /status>                                //"/status"可以随意设置,最终代表的就是域名后面的路径

    SetHandler server-status                // 这个选项固定不要变 
        authname "status-auth"             //名字可以任意取
        authtype "basic"                          //basic,是固定格式
        authuserfile /var/www/.auth-status            //通过htpasswd 命令创建的用户数据库路径 
        require valid-user                         //启动用户名认证功能。
#    Order deny,allow                            //通过ip进行限制,后面alllow 表示默认权限
#    Deny from all                                 //设置拒绝的ip地址
#    Allow from .example.com             //也可以设置域名、主机名。
</Location>

练习:

建立httpd服务器(编译安装)要求:

1、提供两个基于名称的虚拟主机

a、www1.magedu.com,页面文件为:/web/vhosts/www1 ,错误日志为:/var/log/httpd/www1.err,访问日志为:/var/log/httpd/www1.access

b、www2.magedu.com,页面文件为:/web/vhosts/www2 ,错误日志为:/var/log/httpd/www2.err,访问日志为:/var/log/httpd/www2.access

c、为两个虚拟主机建立各自的主页文件index.html

d、通过www1.megedu.com/status输出httpd的工作状态信息,且提供用户名、密码认证。

2、为上题中的第二个虚拟主机提供https服务。

a、要求证书认证

b、设置部门为tech,主机名为www2.magedu.com,邮件为gongbing@dtedu.com

此服务器禁止来自104.0.0.57主机的访问。

ServerTokens OS

ServerRoot "/etc/httpd"

PidFile run/httpd.pid

Timeout 60

KeepAlive on

MaxKeepAliveRequests 100

KeepAliveTimeout 15

<IfModule prefork.c>

StartServers       8

MinSpareServers    5

MaxSpareServers   20

ServerLimit      256

MaxClients       256

MaxRequestsPerChild  4000

</IfModule>

<IfModule worker.c>

StartServers         4

MaxClients         300

MinSpareThreads     25

MaxSpareThreads     75 

ThreadsPerChild     25

MaxRequestsPerChild  0

</IfModule>

Listen 80

LoadModule auth_basic_module modules/mod_auth_basic.so

LoadModule auth_digest_module modules/mod_auth_digest.so

LoadModule authn_file_module modules/mod_authn_file.so

LoadModule authn_alias_module modules/mod_authn_alias.so

LoadModule authn_anon_module modules/mod_authn_anon.so

LoadModule authn_dbm_module modules/mod_authn_dbm.so

LoadModule authn_default_module modules/mod_authn_default.so

LoadModule authz_host_module modules/mod_authz_host.so

LoadModule authz_user_module modules/mod_authz_user.so

LoadModule authz_owner_module modules/mod_authz_owner.so

LoadModule authz_groupfile_module modules/mod_authz_groupfile.so

LoadModule authz_dbm_module modules/mod_authz_dbm.so

LoadModule authz_default_module modules/mod_authz_default.so

LoadModule ldap_module modules/mod_ldap.so

LoadModule authnz_ldap_module modules/mod_authnz_ldap.so

LoadModule include_module modules/mod_include.so

LoadModule log_config_module modules/mod_log_config.so

LoadModule logio_module modules/mod_logio.so

LoadModule env_module modules/mod_env.so

LoadModule ext_filter_module modules/mod_ext_filter.so

LoadModule mime_magic_module modules/mod_mime_magic.so

LoadModule expires_module modules/mod_expires.so

LoadModule deflate_module modules/mod_deflate.so

LoadModule headers_module modules/mod_headers.so

LoadModule usertrack_module modules/mod_usertrack.so

LoadModule setenvif_module modules/mod_setenvif.so

LoadModule mime_module modules/mod_mime.so

LoadModule dav_module modules/mod_dav.so

LoadModule status_module modules/mod_status.so

LoadModule autoindex_module modules/mod_autoindex.so

LoadModule info_module modules/mod_info.so

LoadModule dav_fs_module modules/mod_dav_fs.so

LoadModule vhost_alias_module modules/mod_vhost_alias.so

LoadModule negotiation_module modules/mod_negotiation.so

LoadModule dir_module modules/mod_dir.so

LoadModule actions_module modules/mod_actions.so

LoadModule speling_module modules/mod_speling.so

LoadModule userdir_module modules/mod_userdir.so

LoadModule alias_module modules/mod_alias.so

LoadModule substitute_module modules/mod_substitute.so

LoadModule rewrite_module modules/mod_rewrite.so

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

LoadModule proxy_http_module modules/mod_proxy_http.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

LoadModule proxy_connect_module modules/mod_proxy_connect.so

LoadModule cache_module modules/mod_cache.so

LoadModule suexec_module modules/mod_suexec.so

LoadModule disk_cache_module modules/mod_disk_cache.so

LoadModule cgi_module modules/mod_cgi.so

LoadModule version_module modules/mod_version.so

Include conf.d/*.conf

User apache

Group apache

ServerAdmin gongbing@dtedu.com

ServerName www1.dtedu.com:80

UseCanonicalName Off

<Directory /> #对虚拟目录同样起作用

    AllowOverride AuthConfig

    Authname "gongbing"

    AuthType Basic

    AuthUserFile /root/passwd

    Require user "gongbing"

    

</Directory>

<Directory "/var/www/html”>

    Options Indexes FollowSymLinks ExecCGI

    AllowOverride none

    Order allow,deny

   Allow from 10.40.0.0/24

</Directory>

<IfModule mod_userdir.c>

    #

    # UserDir is disabled by default since it can confirm the presence

    # of a username on the system (depending on home directory

    # permissions).

    #

    UserDir disabled

    #

    # To enable requests to /~user/ to serve the user's public_html

    # directory, remove the "UserDir disabled" line above, and uncomment

    # the following line instead:

    # 

    #UserDir public_html

</IfModule>

DirectoryIndex index.html index.html.var

AccessFileName .htaccess

<Files ~ "^\.ht">

    Order allow,deny

    Deny from all

    Satisfy All

</Files>

TypesConfig /etc/mime.types

DefaultType text/plain

<IfModule mod_mime_magic.c>

    MIMEMagicFile conf/magic

</IfModule>

HostnameLookups Off

ErrorLog logs/error_log

LogLevel warn

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%h %l %u %t \"%r\" %>s %b" common

LogFormat "%{Referer}i -> %U" referer

LogFormat "%{User-agent}i" agent

CustomLog logs/access_log combined

ServerSignature On

Alias /icons/ "/var/www/icons/"

Alias /gongbing "/root/gongbing.html"

<Directory "/var/www/icons">

    Options Indexes MultiViews FollowSymLinks

    AllowOverride None

    Order allow,deny

    Allow from all

</Directory>

<IfModule mod_dav_fs.c>

    # Location of the WebDAV lock database.

    DAVLockDB /var/lib/dav/lockdb

</IfModule>

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

<Directory "/var/www/cgi-bin">

    AllowOverride None

    Options None

    Order allow,deny

    Allow from all

</Directory>

IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8

AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*

AddIconByType (IMG,/icons/p_w_picpath2.gif) p_w_picpath/*

AddIconByType (SND,/icons/sound2.gif) audio/*

AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe

AddIcon /icons/binhex.gif .hqx

AddIcon /icons/tar.gif .tar

AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv

AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip

AddIcon /icons/a.gif .ps .ai .eps

AddIcon /icons/layout.gif .html .shtml .htm .pdf

AddIcon /icons/text.gif .txt

AddIcon /icons/c.gif .c

AddIcon /icons/p.gif .pl .py

AddIcon /icons/f.gif .for

AddIcon /icons/dvi.gif .dvi

AddIcon /icons/uuencoded.gif .uu

AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl

AddIcon /icons/tex.gif .tex

AddIcon /icons/bomb.gif /core

AddIcon /icons/back.gif ..

AddIcon /icons/hand.right.gif README

AddIcon /icons/folder.gif ^^DIRECTORY^^

AddIcon /icons/blank.gif ^^BLANKICON^^

DefaultIcon /icons/unknown.gif

ReadmeName README.html

HeaderName HEADER.html

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

AddLanguage ca .ca

AddLanguage cs .cz .cs

AddLanguage da .dk

AddLanguage de .de

AddLanguage el .el

AddLanguage en .en

AddLanguage eo .eo

AddLanguage es .es

AddLanguage et .et

AddLanguage fr .fr

AddLanguage he .he

AddLanguage hr .hr

AddLanguage it .it

AddLanguage ja .ja

AddLanguage ko .ko

AddLanguage ltz .ltz

AddLanguage nl .nl

AddLanguage nn .nn

AddLanguage no .no

AddLanguage pl .po

AddLanguage pt .pt

AddLanguage pt-BR .pt-br

AddLanguage ru .ru

AddLanguage sv .sv

AddLanguage zh-CN .zh-cn

AddLanguage zh-TW .zh-tw

LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW

ForceLanguagePriority Prefer Fallback

AddDefaultCharset UTF-8

AddType application/x-compress .Z

AddType application/x-gzip .gz .tgz

AddType application/x-x509-ca-cert .crt

AddType application/x-pkcs7-crl    .crl

AddHandler type-map var

AddType text/html .shtml

AddOutputFilter INCLUDES .shtml

Alias /error/ "/var/www/error/"

<IfModule mod_negotiation.c>

<IfModule mod_include.c>

    <Directory "/var/www/error">

        AllowOverride None

        Options IncludesNoExec

        AddOutputFilter Includes html

        AddHandler type-map var

        Order allow,deny

        Allow from all

        LanguagePriority en es de fr

        ForceLanguagePriority Prefer Fallback

    </Directory>

</IfModule>

</IfModule>

BrowserMatch "Mozilla/2" nokeepalive

BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0

BrowserMatch "RealPlayer 4\.0" force-response-1.0

BrowserMatch "Java/1\.0" force-response-1.0

BrowserMatch "JDK/1\.0" force-response-1.0

BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully

BrowserMatch "MS FrontPage" redirect-carefully

BrowserMatch "^WebDrive" redirect-carefully

BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully

BrowserMatch "^gnome-vfs/1.0" redirect-carefully

BrowserMatch "^XML Spy" redirect-carefully

BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully

<Location /status>

    SetHandler server-status

    Order deny,allow

    Deny from 10.40.0.57

    Allow from .example.com

</Location>

NameVirtualHost *:80 #这个需要开启,否则报错

<VirtualHost *:80>

ServerAdmin gongbing@dtedu.com

DocumentRoot /web/vhosts/www1/

ServerName www1.dtedu.com

ErrorLog /var/log/httpd/www1.err

CustomLog /var/log/httpd/www1.access common

</VirtualHost>

<VirtualHost *:80>

ServerAdmin gongbing@dtedu.com

DocumentRoot /web/vhosts/www2/

ServerName www2.dtedu.com

ErrorLog /var/log/httpd/www2.err

CustomLog /var/log/httpd/www2.access common

</VirtualHost>

SSL.conf配置文件:

LoadModule ssl_module modules/mod_ssl.so

Listen 443

SSLPassPhraseDialog  builtin

SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)

SSLSessionCacheTimeout  300

SSLMutex default

SSLRandomSeed startup file:/dev/urandom  256

SSLRandomSeed connect builtin

SSLCryptoDevice builtin

<VirtualHost _default_:443>

DocumentRoot "/web/vhosts/www1” ##定义虚拟主机的主页位置,同80端口的同一域名可以不同网页,实现不同网站的访问效果。

ServerName www1.dtedu.com:443 ##证书名称要和这里保持一致

ErrorLog logs/ssl_error_log

TransferLog logs/ssl_access_log

LogLevel warn

SSLEngine on ##启动ssl服务

SSLProtocol all -SSLv2 ##ssl协议支持所有版本,除去sslv2

SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES ##支持的加密算法,!表示不支持

SSLCertificateFile /etc/httpd/ssl/httpd.crt ##证书文件位置

SSLCertificateKeyFile /etc/httpd/ssl/httpd.key ##私钥文件位置

<Files ~ "\.(cgi|shtml|phtml|php3?)$">

    SSLOptions +StdEnvVars

</Files>

<Directory "/var/www/cgi-bin">

    SSLOptions +StdEnvVars

</Directory>

SetEnvIf User-Agent ".*MSIE.*" \

         nokeepalive ssl-unclean-shutdown \

         downgrade-1.0 force-response-1.0

CustomLog logs/ssl_request_log \

          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>       

curl命令讲解

常用参数

-I:只显示响应报文信息

-u username:password:输入用户名密码,用于认证。

-e “path”:用于指定从哪个地址跳转到此为止,通常用于欺骗httpd的访问日志。

-A:指定浏览器名称

I/O模型

产生的原因:

CPU处理速度远远大于I/O设备,CPU要实现高效使用,采用的方法就是多进程、多线程,内存高高效率采用的是DMA,缓存,I/O高效率采用的就是阻塞和非阻塞,同步、异步。

1、阻塞I/O(磁盘访问)

指进程访问数据的时候,如果数据处于就绪状态,就执行,如果未就绪,就等待。

2、非阻塞I/O(网络传输)

指进程访问数据的时候,如果数据处于就绪状态,就执行,如果未就绪,就处理其他事物,不等待。

3、同步I/O

指访问数据的机制,主动请求并等待I/O操作完成的方式,当数据就绪后在读写的时候必须阻塞。

4、异步I/O

指主动请求数据后可以继续处理其他事物,随后等I/O操作完毕的通知,这可以使进程在数据读写的时候不发生阻塞。

消息通知机制

产生的原因:

由于I/O模型存在阻塞,进程状态存在就绪、等待等多个状态,当要实现高效率常常是多个进程同时进行。所以如何知道那个进程处于就绪状态呢?于是产生了通知机制。

1、忙等待

什么也不干,就等待进程进入就绪状态。

2、多路I/O通知机制

同样是一种非阻塞机制,多个进程同时执行,并将就绪结果放到指定队列中,方便查询。

2.1select

单个进程最大监视的文件描述符(I/O状态)是1024个,线性扫描(全部询问)开销大,水平触发

2.2poll

对select()有一定提升,没有最大描述符限制,水平触发

2.3SIGIO

相对于select、poll最大的不同是,select、pool是通知描述符的就绪状态,直到我们操作他们之前,总是产生通知消息。而SIGIO只通知一次。也称为边缘触发。

此触发方式是linux2.4下性能最好的多路I/O就绪通知方法。

2.4epoll

linux2.6下性能最好的多路I/O就绪通知机制。支持水平触发和边缘触发,使用了内存映射,减少了系统调用的开销,(磁盘到内核缓冲区,再到进程缓冲区的过程)