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就绪通知机制。支持水平触发和边缘触发,使用了内存映射,减少了系统调用的开销,(磁盘到内核缓冲区,再到进程缓冲区的过程)