HTTP:HyperText Transfer Protocol:超文本(带有超级链接的文本)传输协议

超链接:基于链接能够在文档之间跳转实现跳转的文本叫超文本,而这些链接称为超链接;

Web:诞生在上世纪90年代初期80年代末期,诞生在欧洲量子物理实验室,主要实现能够去在多个不同部门之间共享文档,而且可以快速实现文档定位一种协议;

  http/0.9:最早版本0.9,仅支持纯文本(超链接),ASCII,

  HTML:HyperText Mark Language(超文本标记语言)编写超文本的语言,开发超文本的开发语言,事先规定好了将文本通过标签的形式,给它加上独特的标记,而这些文本在被客户端浏览器解析的时候能够将这些标记解析成字体格式,或字体的表现形式;

  <h2>Titel</h2>

Browser:客户端代理,浏览器;

1.1.1.1:web,a.html

2.2.2.2:web,a.html

URI:Uniform Resource Indentifier(统一资源标识符),全局范围内,全球包括互联网在内所有可以在全局唯一引用某一个独立的资源的命名方式叫统一资源定位符;

  统一:路径格式上的统一;

URL:Uniform Resource Location(统一资源定位符),是URI的子集,互联网上统一资源表示格式;

protocol://HOST:port/path/to/file

http://www.magedu.com/download/linux.tar.gz

web资源:http://www.magedu.com/logo.gif,通过统一资源定位符标记它,并且能够让客户端访问的文件;

  多个资源很可能被整合为一个html文档

web对象:

HTTP方法:资源获取的方式;
  GET:早起在http/0.9只有GET;

http/1.0:PUT, POST, DELETE, HEAD(只返回首部,不返回主体)

MIME:Multipurpose Internet Mail Extension(多用途互联网邮件扩展)

SMTP:Simple Mail Transmission Protocol,纯文本;

  MIME:将非文本数据在传输前重新编码为文本格式,接收方能够用相反的方式将其重新还原为原来的格式,还能够调用相应的程序来打开此文件;

  Base64

协议首部:

image/jpeg

动态效果:ActiveX

Java, Applet, JRE

动态网页:服务器端存储的文档非HTML格式,而是编程语言开发的脚本,脚本接收参数之后在服务器运行一次,运行完成之后会生成HTML格式的文档,把生成的文档发给客户端;

web:index.php

web --> procotol --> php (运行index.php)

http

index.html:

  引用N个web对象:URL

动态网页:包含静态内容和动态内容;

  动态内容部分才需要运行

缓存:

URL:http://www.magedu.com/2.html

IP:

  Source IP

  Destination IP

TCP:

  Source Port

  Destination Port

http首部:

  GET/2.html

  Host:www.magedu.com(虚拟主机)

HTTP报文:请求报文,响应报文

请求报文语法:

<method>(资源获取方法) <request-URL>(请求的资源是什么) <version>(对应请求资源协议的版本号) 起始行

<headers>(HTTP协议首部) 报文首部

(空白行必须)

<entity-body>(报文主体,报文内容是什么)

响应报文语法:

<version>(对应版本) <status>(状态码) <reason-phrase>(解释状态码意义)

<headers>(响应报文首部)

<entity-body>(报文主体)

状态代码:

1xx:纯信息

2xx:"成功"类的信息(200请求资源正常,201,202)

3xx:重定向类的信息(301永久重定向,302临时重定向,304没有改变)

4xx:客户端错误类的信息(404不存在文件,)

5xx:服务器端错误的信息

请求报文:

GET / HTTP/1.1(指定/根,没有指定任何文件名字,代表访问默认页面,也就是主页)

Host: www.magedu.com(首部,首部命令加:冒号,跟上对应的值)

Connection: keep-alive(首部,首部名称加:冒号,跟上对应的值)

(没有主体)

响应报文:

HTTP/1.1 200 OK(协议版本,状态码200,OK存在)

X-Powered-By: PHP/5.2.17(首部,通过PHP解释器解析的,动态网站内容)

Vary: Accept-Encoding,Cookie,User-Agent(一些其他额外标记变化类的内容)

Cache-Control: max-age=3, must-revalidate(用来控制客户端能不能缓存)

Content-Encoding: gzip(内容编码机制,先压缩后发送)

Content-Length: 6931(内容长度)

上面两个报文的第一行通常称作报文“起始行(start line)”;后面的标签格式的内容称作首部域(Header field),每个首部域都由名称(name)和值(value)组成,中间用逗号分隔。另外,响应报文通常还有一个称作Body的信息主体,即响应给客户端的内容。

Web服务器的主要操作

1、 建立连接——接受或拒绝客户端连接请求;

2、 接收请求——通过网络读取HTTP请求报文;

3、 处理请求——解析请求报文并做出相应的动作;

4、 访问资源——访问请求报文中相关的资源;

5、 构建响应——使用正确的首部生成HTTP响应报文;

6、 发送响应——向客户端发送生成的响应报文;

7、 记录日志——当已经完成的HTTP事务记录进日志文件;

5s: 10 image, 3 css, 5html

18资源

http, tcp: 三次握手,四次断开

http/1.1:

  增强了缓存的功能

  长连接

c/s
  c:Client Agent(Browser,spider)

  s:Server

  Client --> request --> Server

    URL

  Server --> response --> Client

HTTP Method(资源获取方法)

   GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECTON

HTTP headers(HTTP首部)

  Name:value(名字:值)

  Host:www.magedu.com

  Connection:keep-alive

Server操作:

1、 建立连接——接受或拒绝客户端连接请求;

2、 接收请求——通过网络读取HTTP请求报文;

3、 处理请求——解析请求报文并做出相应的动作;

4、 访问资源——访问请求报文中相关的资源;

5、 构建响应——使用正确的首部生成HTTP响应报文;

6、 发送响应——向客户端发送生成的响应报文;

7、 记录日志——当已经完成的HTTP事务记录进日志文件;

Server模型:

单进程/单线程

多进程/多线程

单进程多请求

多进程多请求

http, MPM(多道处理模块):

  prefork

  work

  event

Client:

  IE

  Firefox

  CHrome

  Oprea

  Safari

Server:

  Apahce,--httpd

  IIS(应用程序服务器)

  nginx

  lighttpd

  thttpd

应用程序服务器:

  IIS

  tomcat(JAVA应用程序服务器, apahce, JSP, open source)

  Websphere(IBM, JSP, commodity)

  Weblogic(Oracle, JSP, commodity)

  JBoss(RedHat)

www.netcraft.com:全球最近的web服务器占用比例

 

Web服务器处理并发连接请求的架构方式

1、单线程web服务器(Single-threaded web servers)

此种架构方式中,web服务器一次处理一个请求,结束后读取并处理下一个请求。在某请求处理过程中,其它所有的请求将被忽略,因此,在并发请求较多的场景中将会出现严重的必能问题。

2、多进程/多线程web服务器

此种架构方式中,web服务器生成多个进程或线程并行处理多个用户请求,进程或线程可以按需或事先生成。有的web服务器应用程序为每个用户请求生成一个单独的进程或线程来进行响应,不过,一旦并发请求数量达到成千上万时,多个同时运行的进程或线程将会消耗大量的系统资源。

3、I/O多路复用web服务器

为了能够支持更多的并发用户请求,越来越多的web服务器正在采用多种复用的架构——同步监控所有的连接请求的活动状态,当一个连接的状态发生改变时(如数据准备完毕或发生某错误),将为其执行一系列特定操作;在操作完成后,此连接将重新变回暂时的稳定态并返回至打开的连接列表中,直到下一次的状态改变。由于其多路复用的特性,进程或线程不会被空闲的连接所占用,因而可以提供高效的工作模式。

4、多路复用多线程web服务器

将多进程和多路复用的功能结合起来形成的web服务器架构,其避免了让一个进程服务于过多的用户请求,并能充分利用多CPU主机所提供的计算能力。

代理

Web代理服务器工作于web客户端和web服务器之间,它负责接收来自于客户端的http请求,并将其转发至对应的服务;而后接收来自于服务端的响应,并将响应报文回送至客户端。

apache:17,

NCSA, httpd

  A Patchy Server = apache

FSF:GNU, GPL

ASF: Apache Software Foundation(Apache软件基金会)

  web: httpd

    Tomact(JSP应用服务器)

    Hadoop(并行处理环境, 高性能运算计算框架)

        
  www.apache.org(apache官网)

web: http://httpd.apache.org

httpd:

  Web Server, Open Source

  2.2(主流), 2.4(最新), 2.0(稳定), 1.3

httpd:

  事先创建进程:事先把进程启动起来,放在那,作为空闲进程,一旦有请求进来立即把空闲进程分配给请求予以响应,空闲进程不够,继续创建新的空闲进程;

  按需维持适当的进程

  模块化设计,核心比较小,各种功能都模块添加(包括php)

    支持运行配置, 支持单独编译模块

  支持多种方式的虚拟主机配置

    Socket IP:Port(套接字)

    虚拟主机:

      基于IP的虚拟主机;

      基于端口的虚拟主机;

      基于域名的虚拟主机;

虚拟主机:

  物理服务器

  Web程序只有一个

    却可以服务多个不同的站点

protocol://HOST:PORT/path/to/source

    Method URL version

    header
       
    body

    GET /download/linux.tar.bz2 HTTP/1.0

    Host:www.magedu.com

  支持https协议 (mod_ssl)

  支持用户认证

  支持基于IP或主机名的ACL

  支持每目录的访问控制

  支持URL重写, /image/a.jpeg, /bbs/images/abc.jpeg

RedHat(httpd):

  rpm包:

  源码编译

httpd: SElinux(事先让其处于permissive,disabled)

httpd:

  /usr/sbin/httpd(MPM多道处理模块: perfork):执行进程目录;

    httpd: root, root(在linux上小于1024的端口使用只有管理员有权限,所以启动这个服务是管理员,这个进程并不负责响应用户请求,它是专门用来负责创建空间进程和销毁多余的空闲进程,这是主导进程master process)

    httpd: apache, apache(工作进程worker process)

  /etc/rc.d/init.d/httpd:服务脚本;

  Port: (80/tcp), (ssl: 443/tcp)

  /etc/httpd:工作根目录,相当于程序安装目录;

  /etc/httpd/conf:配置文件目录

    主配置文件: httpd.conf

    /etc/httpd/conf.d/*.conf:分割的配置文件都以.conf结尾;

  /etc/httpd/modules:模块目录

  /etc/httpd/logs --> /var/log/httpd: 日志目录

    日志文件有两类: 访问日志access_log, 错误日志: err_log

  /var/www: 页面目录

    html:静态页面目录

    cgi-bin:动态内容目录

    cgi: Common Gateway Interface(通用网关接口)让web服务器能够跟额外的应用程序通信的一种机制,能够让web服务器在必要的时候启动额外的程序来处理动态内容的;

      Client --> httpd (index.cgi) --> Spawn Process (index.cgi) --> httpd --> Client

      perl, python, java, (Servlet, JSP), php

    fastcgi:

    程序: 指令和数据

      数据, 数据库服务

CPU-bound: CPU密集型;

apache

php

MySQL

LAMP

httpd:

  directive value: 指令和值;

  指令不区分字符大小写

  value则根据需要有可能要区分

LoadRunner:测试工具,可以模拟应用程序真实场景,而对服务器做接近真实测试;

MPM:Multi Path Modules多道处理模块,用于定义apache在响应多个用户请求时候所工作的模型的;

  mpm_winnt:windows nt上专用的,windows原生支持线程的;

  prefork(一个请求用一个进程响应):预先生成进程;

  wokrer(一个请求用一个线程响应,启动多个进程,每个进程生成多个线程):基于线程来工作,一个进程响应多个请求,但一个进程下使用多个线程来响应用户请求的;

  event(一个进程处理多个请求):基于事件的驱动,一个进程处理多个用户请求,但是同时处理多个请求,不是通过线程响应的,而是一个进程同时处理多个请求;

[root@localhost ~]# yum list all http*(查看yum源http开头的包)
httpd.i386                                  2.2.3-63.el5                           Server
httpd-devel.i386                            2.2.3-63.el5                           Server
httpd-manual.i386                           2.2.3-63.el5                           Server
提示:httpd.i386为主包,httpd-devel.i386、httpd-manual.i386为子包;
[root@localhost ~]# getenforce(查看selinux状态) 
Permissive
提示:apache受selinux控制,确保selinux关闭;
[root@localhost ~]# setenforce 0(将selinux状态设置为Permissive状态)
提示:这种设定只是当前生效,重启系统无效;
[root@localhost ~]# vim /etc/sysconfig/selinux(编辑selinux配置文件)
提示:通过编辑/etc/sysconfig/selinux或/etc/selinux/config文件可以设置selinux处于Permissive状态永久有效,但是不会立即生效;
[root@localhost ~]# vim /etc/selinux/config(编辑selinux配置文件)
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
SELINUX=permissive(更改为允许)
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted
[root@localhost ~]# !yum(查看yum源http开头的包)
yum list all http*
httpd.i386                              2.2.3-63.el5                        Server
httpd-devel.i386                        2.2.3-63.el5                        Server
httpd-manual.i386                       2.2.3-63.el5                        Server
提示:httpd.i386是服务器端包,httpd-devel.i386(开发包,开发库和头文件)如果不针对httpd做二次开发或者某些软件依赖就用不上,httpd-manual.i386手册;
[root@localhost ~]# yum -y install httpd(安装httpd,-y所有循环回答yes)
[root@localhost ~]# rpm -ql httpd | less(查看httpd安装生成哪些文件,将结果送给管道并分页显示)
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/proxy_ajp.conf(主配置文件组成部分)
/etc/httpd/conf.d/welcome.conf(主配置文件组成部分)
/etc/httpd/conf/httpd.conf(httpd服务主配置文件)
/etc/httpd/conf/magic(magic用于定义本地主机如何识别mime编码而来的非存文本文档)
/etc/httpd/logs
/etc/httpd/modules(链接指向/usr/lib/httpd)
/etc/httpd/run
/etc/logrotate.d/httpd
/etc/rc.d/init.d/httpd(服务脚本)
/etc/sysconfig/httpd(服务脚本配置文件)
/usr/bin/ab(apache服务器压力测试工具)
/usr/bin/htdbm
/usr/bin/htdigest(创建用户认证密码的命令)
/usr/bin/htpasswd(创建用户认证密码的命令)
/usr/bin/logresolve
/usr/lib/httpd
/usr/lib/httpd/modules(apche模块目录)
/usr/lib/httpd/modules/mod_actions.so
/usr/lib/httpd/modules/mod_alias.so
/usr/lib/httpd/modules/mod_asis.so
/usr/lib/httpd/modules/mod_auth_basic.so
/usr/lib/httpd/modules/mod_auth_digest.so
/usr/lib/httpd/modules/mod_authn_alias.so
/usr/lib/httpd/modules/mod_authn_anon.so
/usr/lib/httpd/modules/mod_authn_dbd.so
/usr/lib/httpd/modules/mod_authn_dbm.so
/usr/lib/httpd/modules/mod_authn_default.so
/usr/lib/httpd/modules/mod_authn_file.so
/usr/lib/httpd/modules/mod_authnz_ldap.so
/usr/lib/httpd/modules/mod_authz_dbm.so
/usr/lib/httpd/modules/mod_authz_default.so
/usr/lib/httpd/modules/mod_authz_groupfile.so
/usr/lib/httpd/modules/mod_authz_host.so
/usr/lib/httpd/modules/mod_authz_owner.so
/usr/lib/httpd/modules/mod_authz_user.so
/usr/lib/httpd/modules/mod_autoindex.so
/usr/lib/httpd/modules/mod_cache.so(提供缓存)
/usr/lib/httpd/modules/mod_cern_meta.so
/usr/lib/httpd/modules/mod_cgi.so
/usr/lib/httpd/modules/mod_cgid.so
/usr/lib/httpd/modules/mod_dav.so
/usr/lib/httpd/modules/mod_dav_fs.so
/usr/lib/httpd/modules/mod_dbd.so
/usr/lib/httpd/modules/mod_deflate.so
/usr/lib/httpd/modules/mod_dir.so
/usr/lib/httpd/modules/mod_disk_cache.so
/usr/lib/httpd/modules/mod_dumpio.so
/usr/lib/httpd/modules/mod_env.so
/usr/lib/httpd/modules/mod_expires.so
/usr/lib/httpd/modules/mod_ext_filter.so
/usr/lib/httpd/modules/mod_file_cache.so
/usr/lib/httpd/modules/mod_filter.so
/usr/lib/httpd/modules/mod_headers.so
/usr/lib/httpd/modules/mod_ident.so
/usr/lib/httpd/modules/mod_imagemap.so
/usr/lib/httpd/modules/mod_include.so
/usr/lib/httpd/modules/mod_info.so
/usr/lib/httpd/modules/mod_ldap.so
/usr/lib/httpd/modules/mod_log_config.so
/usr/lib/httpd/modules/mod_log_forensic.so
/usr/lib/httpd/modules/mod_logio.so
/usr/lib/httpd/modules/mod_mem_cache.so
/usr/lib/httpd/modules/mod_mime.so
/usr/lib/httpd/modules/mod_mime_magic.so
/usr/lib/httpd/modules/mod_negotiation.so
/usr/lib/httpd/modules/mod_proxy.so(反向代理)
/usr/lib/httpd/modules/mod_proxy_ajp.so(基于ajp反向代理)
/usr/lib/httpd/modules/mod_proxy_balancer.so(反向代理负载均衡)
/usr/lib/httpd/modules/mod_proxy_connect.so
/usr/lib/httpd/modules/mod_proxy_ftp.so
/usr/lib/httpd/modules/mod_proxy_http.so
/usr/lib/httpd/modules/mod_reqtimeout.so
/usr/lib/httpd/modules/mod_rewrite.so
/usr/lib/httpd/modules/mod_setenvif.so
/usr/lib/httpd/modules/mod_speling.so
/usr/lib/httpd/modules/mod_status.so
/usr/lib/httpd/modules/mod_substitute.so
/usr/lib/httpd/modules/mod_suexec.so
/usr/lib/httpd/modules/mod_unique_id.so
/usr/lib/httpd/modules/mod_userdir.so
/usr/lib/httpd/modules/mod_usertrack.so
/usr/lib/httpd/modules/mod_version.so
/usr/lib/httpd/modules/mod_vhost_alias.so
/usr/sbin/apachectl
/usr/sbin/htcacheclean
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
/usr/sbin/httxt2dbm
/usr/sbin/rotatelogs
/usr/sbin/suexec
/usr/share/doc/httpd-2.2.3
/usr/share/doc/httpd-2.2.3/ABOUT_APACHE
/usr/share/doc/httpd-2.2.3/CHANGES
/usr/share/doc/httpd-2.2.3/LICENSE
/usr/share/doc/httpd-2.2.3/NOTICE
/usr/share/doc/httpd-2.2.3/README
/usr/share/doc/httpd-2.2.3/VERSIONING
/usr/share/doc/httpd-2.2.3/migration.css
/usr/share/doc/httpd-2.2.3/migration.html
/usr/share/man/man1/ab.1.gz
/usr/share/man/man1/htdbm.1.gz
/usr/share/man/man1/htdigest.1.gz
/usr/share/man/man1/htpasswd.1.gz
/usr/share/man/man1/logresolve.1.gz
/usr/share/man/man8/apachectl.8.gz
/usr/share/man/man8/htcacheclean.8.gz
/usr/share/man/man8/httpd.8.gz
/usr/share/man/man8/rotatelogs.8.gz
/usr/share/man/man8/suexec.8.gz
/var/cache/mod_proxy
/var/lib/dav
/var/log/httpd
/var/www
/var/www/cgi-bin
/var/www/error(错误信息页面)
/var/www/error/HTTP_BAD_GATEWAY.html.var
/var/www/error/HTTP_BAD_REQUEST.html.var
/var/www/error/HTTP_FORBIDDEN.html.var
/var/www/error/HTTP_GONE.html.var
/var/www/error/HTTP_INTERNAL_SERVER_ERROR.html.var
/var/www/error/HTTP_LENGTH_REQUIRED.html.var
/var/www/error/HTTP_METHOD_NOT_ALLOWED.html.var
/var/www/error/HTTP_NOT_FOUND.html.var
/var/www/error/HTTP_NOT_IMPLEMENTED.html.var
/var/www/error/HTTP_PRECONDITION_FAILED.html.var
/var/www/error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
/var/www/error/HTTP_REQUEST_TIME_OUT.html.var
/var/www/error/HTTP_REQUEST_URI_TOO_LARGE.html.var
/var/www/error/HTTP_SERVICE_UNAVAILABLE.html.var
/var/www/error/HTTP_UNAUTHORIZED.html.var
/var/www/error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
/var/www/error/HTTP_VARIANT_ALSO_VARIES.html.var
/var/www/error/README
/var/www/error/contact.html.var
/var/www/error/include
/var/www/error/include/bottom.html
/var/www/error/include/spacer.html
/var/www/error/include/top.html
/var/www/error/noindex.html
/var/www/html(网页文件存放位置)
/var/www/icons
/var/www/icons/README
/var/www/icons/a.gif
/var/www/icons/a.png
/var/www/icons/alert.black.gif
/var/www/icons/alert.black.png
/var/www/icons/alert.red.gif
/var/www/icons/alert.red.png
/var/www/icons/apache_pb.gif
/var/www/icons/apache_pb.png
/var/www/icons/apache_pb2.gif
/var/www/icons/apache_pb2.png
/var/www/icons/apache_pb2_ani.gif
/var/www/icons/back.gif
/var/www/icons/back.png
/var/www/icons/ball.gray.gif
/var/www/icons/ball.gray.png
/var/www/icons/ball.red.gif
/var/www/icons/ball.red.png
/var/www/icons/binary.gif
/var/www/icons/binary.png
/var/www/icons/binhex.gif
/var/www/icons/binhex.png
/var/www/icons/blank.gif
/var/www/icons/blank.png
/var/www/icons/bomb.gif
/var/www/icons/bomb.png
/var/www/icons/box1.gif
/var/www/icons/box1.png
/var/www/icons/box2.gif
/var/www/icons/box2.png
/var/www/icons/broken.gif
/var/www/icons/broken.png
/var/www/icons/burst.gif
/var/www/icons/burst.png
/var/www/icons/c.gif
/var/www/icons/c.png
/var/www/icons/comp.blue.gif
/var/www/icons/comp.blue.png
/var/www/icons/comp.gray.gif
/var/www/icons/comp.gray.png
/var/www/icons/compressed.gif
/var/www/icons/compressed.png
/var/www/icons/continued.gif
/var/www/icons/continued.png
/var/www/icons/dir.gif
/var/www/icons/dir.png
/var/www/icons/diskimg.gif
/var/www/icons/diskimg.png
/var/www/icons/down.gif
/var/www/icons/down.png
/var/www/icons/dvi.gif
/var/www/icons/dvi.png
/var/www/icons/f.gif
/var/www/icons/f.png
/var/www/icons/folder.gif
/var/www/icons/folder.open.gif
/var/www/icons/folder.open.png
/var/www/icons/folder.png
/var/www/icons/folder.sec.gif
/var/www/icons/folder.sec.png
/var/www/icons/forward.gif
/var/www/icons/forward.png
/var/www/icons/generic.gif
/var/www/icons/generic.png
/var/www/icons/generic.red.gif
/var/www/icons/generic.red.png
/var/www/icons/generic.sec.gif
/var/www/icons/generic.sec.png
/var/www/icons/hand.right.gif
/var/www/icons/hand.right.png
/var/www/icons/hand.up.gif
/var/www/icons/hand.up.png
/var/www/icons/icon.sheet.gif
/var/www/icons/icon.sheet.png
/var/www/icons/image1.gif
/var/www/icons/image1.png
/var/www/icons/image2.gif
/var/www/icons/image2.png
/var/www/icons/image3.gif
/var/www/icons/image3.png
/var/www/icons/index.gif
/var/www/icons/index.png
/var/www/icons/layout.gif
/var/www/icons/layout.png
/var/www/icons/left.gif
/var/www/icons/left.png
/var/www/icons/link.gif
/var/www/icons/link.png
/var/www/icons/movie.gif
/var/www/icons/movie.png
/var/www/icons/p.gif
/var/www/icons/p.png
/var/www/icons/patch.gif
/var/www/icons/patch.png
/var/www/icons/pdf.gif
/var/www/icons/pdf.png
/var/www/icons/pie0.gif
/var/www/icons/pie0.png
/var/www/icons/pie1.gif
/var/www/icons/pie1.png
/var/www/icons/pie2.gif
/var/www/icons/pie2.png
/var/www/icons/pie3.gif
/var/www/icons/pie3.png
/var/www/icons/pie4.gif
/var/www/icons/pie4.png
/var/www/icons/pie5.gif
/var/www/icons/pie5.png
/var/www/icons/pie6.gif
/var/www/icons/pie6.png
/var/www/icons/pie7.gif
/var/www/icons/pie7.png
/var/www/icons/pie8.gif
/var/www/icons/pie8.png
/var/www/icons/portal.gif
/var/www/icons/portal.png
/var/www/icons/ps.gif
/var/www/icons/ps.png
/var/www/icons/quill.gif
/var/www/icons/quill.png
/var/www/icons/right.gif
/var/www/icons/right.png
/var/www/icons/screw1.gif
/var/www/icons/screw1.png
/var/www/icons/screw2.gif
/var/www/icons/screw2.png
/var/www/icons/script.gif
/var/www/icons/script.png
/var/www/icons/small
/var/www/icons/small/README.txt
/var/www/icons/small/back.gif
/var/www/icons/small/back.png
/var/www/icons/small/binary.gif
/var/www/icons/small/binary.png
/var/www/icons/small/binhex.gif
/var/www/icons/small/binhex.png
/var/www/icons/small/blank.gif
/var/www/icons/small/blank.png
/var/www/icons/small/broken.gif
/var/www/icons/small/broken.png
/var/www/icons/small/burst.gif
/var/www/icons/small/burst.png
/var/www/icons/small/comp1.gif
/var/www/icons/small/comp1.png
/var/www/icons/small/comp2.gif
/var/www/icons/small/comp2.png
/var/www/icons/small/compressed.gif
/var/www/icons/small/compressed.png
/var/www/icons/small/continued.gif
/var/www/icons/small/continued.png
/var/www/icons/small/dir.gif
/var/www/icons/small/dir.png
/var/www/icons/small/dir2.gif
/var/www/icons/small/dir2.png
/var/www/icons/small/doc.gif
/var/www/icons/small/doc.png
/var/www/icons/small/forward.gif
/var/www/icons/small/forward.png
/var/www/icons/small/generic.gif
/var/www/icons/small/generic.png
/var/www/icons/small/generic2.gif
/var/www/icons/small/generic2.png
/var/www/icons/small/generic3.gif
/var/www/icons/small/generic3.png
/var/www/icons/small/image.gif
/var/www/icons/small/image.png
/var/www/icons/small/image2.gif
/var/www/icons/small/image2.png
/var/www/icons/small/index.gif
/var/www/icons/small/index.png
/var/www/icons/small/key.gif
/var/www/icons/small/key.png
/var/www/icons/small/movie.gif
/var/www/icons/small/movie.png
/var/www/icons/small/patch.gif
/var/www/icons/small/patch.png
/var/www/icons/small/ps.gif
/var/www/icons/small/ps.png
/var/www/icons/small/rainbow.gif
/var/www/icons/small/rainbow.png
/var/www/icons/small/sound.gif
/var/www/icons/small/sound.png
/var/www/icons/small/sound2.gif
/var/www/icons/small/sound2.png
/var/www/icons/small/tar.gif
/var/www/icons/small/tar.png
/var/www/icons/small/text.gif
/var/www/icons/small/text.png
/var/www/icons/small/transfer.gif
/var/www/icons/small/transfer.png
/var/www/icons/small/unknown.gif
/var/www/icons/small/unknown.png
/var/www/icons/small/uu.gif
/var/www/icons/small/uu.png
/var/www/icons/sound1.gif
/var/www/icons/sound1.png
/var/www/icons/sound2.gif
/var/www/icons/sound2.png
/var/www/icons/sphere1.gif
/var/www/icons/sphere1.png
/var/www/icons/sphere2.gif
/var/www/icons/sphere2.png
/var/www/icons/tar.gif
/var/www/icons/tar.png
/var/www/icons/tex.gif
/var/www/icons/tex.png
/var/www/icons/text.gif
/var/www/icons/text.png
/var/www/icons/transfer.gif
/var/www/icons/transfer.png
/var/www/icons/unknown.gif
/var/www/icons/unknown.png
/var/www/icons/up.gif
/var/www/icons/up.png
/var/www/icons/uu.gif
/var/www/icons/uu.png
/var/www/icons/uuencoded.gif
/var/www/icons/uuencoded.png
/var/www/icons/world1.gif
/var/www/icons/world1.png
/var/www/icons/world2.gif
/var/www/icons/world2.png
[root@localhost ~]# service httpd start(启动httpd服务) 
Starting httpd:                                            [  OK  ]
[root@localhost ~]# netstat -tnlp | grep :80(查看系统服务,-t代表tcp,-n以数字显示,-l监听端口,-p显示服务名称,将结果送给管道只显示:80字符的段)
tcp        0      0 :::80                       :::*                        LISTEN      13948/httpd
[root@localhost ~]# ps aux | grep httpd(查看跟终端有关和无关进程,将结果送给管道,通过grep只显示httpd字符串相关)
root     13948  0.0  0.2  10092  2936 ?        Ss   03:58   0:00 /usr/sbin/httpd
apache   13949  0.0  0.1  10092  2056 ?        S    03:58   0:00 /usr/sbin/httpd
apache   13950  0.0  0.1  10092  2056 ?        S    03:58   0:00 /usr/sbin/httpd
apache   13951  0.0  0.1  10092  2056 ?        S    03:58   0:00 /usr/sbin/httpd
apache   13952  0.0  0.1  10092  2056 ?        S    03:58   0:00 /usr/sbin/httpd
apache   13953  0.0  0.1  10092  2056 ?        S    03:58   0:00 /usr/sbin/httpd
apache   13954  0.0  0.1  10092  2056 ?        S    03:58   0:00 /usr/sbin/httpd
apache   13956  0.0  0.1  10092  2056 ?        S    03:58   0:00 /usr/sbin/httpd
apache   13957  0.0  0.1  10092  2056 ?        S    03:58   0:00 /usr/sbin/httpd
root     13998  0.0  0.0   4220   608 pts/1    R+   04:01   0:00 grep httpd
提示:有一大堆的httpd进程,但只有一个httpd进程是以root身份运行的,是master process,其他有8个进程是以apache身份运行的,是worker process;

测试:通过在真实机windows系统的ie浏览器输入172.16.100.1进行访问测试;

这是redhat提供的一个测试用的欢迎页面;

不让显示欢迎页面:

[root@localhost ~]# cd /etc/httpd/(切换到/etc/httpd目录)
[root@localhost httpd]# ls(查看当前目录文件及子目录)
conf  conf.d  logs  modules  run
[root@localhost httpd]# tree conf.d/(显示conf.d目录树)
conf.d/
|-- README
|-- proxy_ajp.conf
`-- welcome.conf(测试页面的欢迎信息就是这个文件显示的,如果用户没有定义页面就显示这个页面,可以把这个文件删除或重命名,然后重启服务器)

0 directories, 3 files
[root@localhost httpd]# cd conf.d/(切换到conf.d目录)
[root@localhost conf.d]# mv welcome.conf welcome.conf.bak(重命名welcome.com为welcome.conf.bak)
[root@localhost conf.d]# service httpd restart(重启httpd服务)
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

测试:通过在真实机windows系统的ie浏览器输入172.16.100.1进行访问测试;

提示:不需要重启httpd服务器;

测试:通过在真实机windows系统的ie浏览器输入172.16.100.1进行访问测试;

提示:如果直接指定172.16.100.1不指定文档页面,它无法显示为a.html,应该有默认页面,web服务器的默认页面一般是在web服务器的配置文件中指定应该是那一个文件,而不是简单的给它一个页面都能识别,如果不使用路径访问,必须将文件定义为默认页面才可以;

[root@localhost html]# cd /etc/httpd/conf(切换到/etc/httpd/conf目录)
[root@localhost conf]# ls(查看当前目录文件及子目录)
httpd.conf  magic
提示:主配置文件叫httpd.conf;
[root@localhost conf]# cp httpd.conf httpd.conf.bak(备份httpd主配置文件)
[root@localhost conf]# vim httpd.conf(编辑httpd.conf主配置文件)
[root@localhost conf]# grep "Section" httpd.conf(显示httpd.conf文件包含Section字符串的段)
### Section 1: Global Environment(全局环境)
### Section 2: 'Main' server configuration(主服务器配置)
### Section 3: Virtual Hosts(虚拟主机)
提示:httpd.conf文件主要分为三个段,第二段和第三段不能同时生效,要有主服务器段就不能使用虚拟主机,要使用虚拟主机就不能使用主服务器,默认情况下使用主服务器段,而
没有使用虚拟主机,全局配置段指的是要是使用了虚拟机主机对每个虚拟主机都会生效;
[root@localhost conf]# vim httpd.conf(编辑httpd.conf主配置文件)
ServerTokens OS(指令,指令不区分字符大小写,但是参数,尤其是路径区分大小写,OS标识要输出操作系统版本相关信息)

ServerRoot "/etc/httpd"(参数为路径必须区分大小写)

提示:所有以#井号开头的都是注释信息,但是如果#井号后面没有加空格直接跟字符,这是可以启用的选项,在apache当中叫做指令;

测试:通过在真实机windows系统的ie浏览器输入172.16.100.1/b.html进行访问测试;

提示:输入不存在的页面,显示软件版本号,还有服务器在那个主机上端口是什么,这些信息都是由ServerTokens OS显示的;

通过真实机windows系统ie浏览器http://httpd.apache.org/docs/2.2/查看帮助,选择指令快速参考,找到S开头的快速定位,找到ServerTokens指令;

ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full

提示:用于定义访问不存在页面底下所显示系统关心信息详细程度,如果只想简单显示可以使用Server Tokens Major只显示apache主版本号,Minor显示次版本号,Min显示修订号,Prod[uctOnly]只显示软件是什么,OS显示操作系统版本,Full全部显示;

如果上不了网查找http://httpd.apache.org/docs/2.2文档帮助,可以安装httpd-manua手册包;

[root@localhost conf]# yum -y install httpd-manual(安装httpd-manual手册,-y所有询问回答yes)
[root@localhost conf]# cd /etc/httpd/conf.d/(切换到/etc/httpd/conf.d目录)
[root@localhost conf.d]# ls(查看当前目录文件及子目录)
manual.conf  proxy_ajp.conf  README  welcome.conf.bak
提示:生成manual.conf配置文件;
[root@localhost conf.d]# vim manual.conf(编辑manual.conf文件)
#
# This configuration file allows the manual to be accessed at 
# http://localhost/manual/
#
AliasMatch ^/manual(?:/(?:de|en|fr|ja|ko|ru))?(/.*)?$ "/var/www/manual$1"

<Directory "/var/www/manual">
    Options Indexes
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
提示:只要在页面访问路径加上/manual就可以了;
[root@localhost conf.d]# service httpd restart(重启httpd服务)
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[root@localhost conf.d]# cd -(切换到上此所处目录)
/etc/httpd/conf
[root@localhost conf]# vim httpd.conf(编辑httpd服务主配置文件)
ServerRoot "/etc/httpd"(服务根目录,不到万不得已不要更改)

PidFile run/httpd.pid(进程ID号,保存在以进程命名的文件当中,相对路径,相对于/etc/httpd路径)

Timeout 120(超时时间,用于防止SYN泛红)

KeepAlive On(是否使用长连接,如果访问量不是特别大应该打开长连接,可以提高性能,不打开每个请求都要TCP三次握手)

MaxKeepAliveRequests 100(长连接启用,最多一次请求多少资源,当达到请求数量,断开连接,从后面重新排队,0表示无限制,)

KeepAliveTimeout 15(启动长连接超时时间)

<IfModule prefork.c>(prefork模型工作属性)
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

<IfModule worker.c>(worker模型工作属性)
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>
通过真实机windows系统ie浏览器http://httpd.apache.org/docs/2.2/查看帮助,选择指令快速参考,通过T开头快速定位,找到TIMEOUT指令;
TimeOut seconds
Amount of time the server will wait for certain events before failing a request
提示:用户通过三层握手建立连接请求,TCP第一次握手发起来了,等它确认就不来了,不能一直处于维持状态;
通过真实机windows系统ie浏览器http://httpd.apache.org/docs/2.2/查看帮助,选择多处理模块(MPM)
多处理模块(MPM)
Apache 能更优雅,更高效率的支持不同的平台。尤其是 Apache 的 Windows 版本现在更有效率了,因为 mpm_winnt 能使用原生网络特性取代在 Apache 1.3 中使用
的 POSIX 层。它也可以扩展到其它平台 来使用专用的 MPM。
Apache 能更好的为有特殊要求的站点定制。例如,要求 更高伸缩性的站点可以选择使用线程的 MPM,即 worker 或 event; 需要可靠性或者与旧软件兼容的站点可以使
用 prefork。
[root@localhost conf]# man httpd(查看httpd服务man帮助文档)
       -l     Output a list of modules compiled into the server. This will not list  dynamically  loaded
              modules included using the LoadModule directive.(列出当前服务器进程编译时候所支持的模型)
[root@localhost conf]# httpd -l(查看当前服务器进程编译时候所支持的模型)
Compiled in modules:
  core.c(核心模块)
  prefork.c(支持prefork)
  http_core.c(支持http核心)
  mod_so.c(支持动态模块加载)
提示:没有woker模型;
[root@localhost conf]# rpm -ql httpd | grep bin(查看httpd安装哪些文件,将结果送给管道,通过grep只显示包含bin字符的段)
/usr/bin/ab
/usr/bin/htdbm
/usr/bin/htdigest
/usr/bin/htpasswd
/usr/bin/logresolve
/usr/sbin/apachectl
/usr/sbin/htcacheclean
/usr/sbin/httpd(这个程序默认是prefork模型)
/usr/sbin/httpd.event
/usr/sbin/httpd.worker(如果想使用worker模型服务,运行这个程序)
/usr/sbin/httxt2dbm
/usr/sbin/rotatelogs
/usr/sbin/suexec
/var/www/cgi-bin
/var/www/icons/binary.gif
/var/www/icons/binary.png
/var/www/icons/binhex.gif
/var/www/icons/binhex.png
/var/www/icons/small/binary.gif
/var/www/icons/small/binary.png
/var/www/icons/small/binhex.gif
/var/www/icons/small/binhex.png
[root@localhost conf]# httpd.worker -l(查看worker模型列表)
Compiled in modules:
  core.c
  worker.c
  http_core.c
  mod_so.c
如何使用worker模型web服务器:
[root@localhost conf]# vim /etc/sysconfig/httpd(编辑httpd服务启动脚本配置文件)
HTTPD=/usr/sbin/httpd.worker(如果使用event模型把这项改成event)
[root@localhost conf]# httpd.event -l(查看event模型列表)
Compiled in modules:
  core.c
  event.c
  http_core.c
  mod_so.c
提示:在httpd/2.2中event模型是测试模型,不建议使用,在httpd/2.4中event才真正成熟起来,变的称为独立的MPM,这个可执行程序一旦编译好之后,支持那种MPM已经
确定了,再想换就不可以了,所以红帽编译了三个,而且叫不同的名字,想使用那个调用那个,通过这种方式来实现在三个之间进行切换;
[root@localhost conf]# vim httpd.conf(编辑httpd服务主配置文件)
<IfModule prefork.c>(prefork模型工作属性,IfModule这是apache重要指令使用机制,如果某个模块配置的话,这是一个容器,只对这一个片段生效)
StartServers       8(服务器刚启动,启动多少个空闲进程)
MinSpareServers    5(最少空闲进程)
MaxSpareServers   20(最大空闲进程)
ServerLimit      256(当前服务器启动起来以后,MaxClients的值不能大于ServerLimit的值,用来限定MaxClients上限值,需要关掉服务器,把整个进程kill掉,
把ServerLimit调大,然后再启动才可以)
MaxClients       256(最大客户端数,最多允许多少个请求连接进来)
MaxRequestsPerChild  4000(每一个子进程最多响应多少次用户请求,达到最大次数,无论如何杀死子进程,再生成新的进程重新响应)
</IfModule>(容器结尾)

<IfModule worker.c>(worker模型工作属性,一个线程响应多个请求)
StartServers         2(默认启动多少个进程)
MaxClients         150(最多允许多少个用户请求)
MinSpareThreads     25(最小空闲线程)
MaxSpareThreads     75(最大空闲线程)
ThreadsPerChild     25(每一个进程最多可以生成多少个线程)
MaxRequestsPerChild  0(每一个进程最多响应多少此请求,这个进程用线程响应,所以0无法限定)
</IfModule>

Listen 80(指定监听地址端口,地址可以省略,如果不带IP地址,代表监听当前主机所有地址上的80端口,可以监听多个端口)

Listen 172.16.100.1:8080

LoadModule auth_basic_module modules/mod_auth_basic.so(apahce是模块化的,LoadModule指定apache启动装载的模块)
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 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_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 file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so
Include conf.d/*.conf(包含/etc/httpd/conf.d所有以.conf结尾的文件都是主配置文件组成部分)

User apache(apache的work进程都要使用普通用户运行)
Group apache

URL路径跟本地文件系统路径不是一码事儿, URL是相对于DocumentRoot的路径而言的。

不管怎么地,在我们的配置文件当中,我们可以定义我们的DocumentRoot这个对应路径下那一个文件能够被哪些IP地址的客户端访问,以及如何被访问,况且还可以定义在访问的时候你是否需要提供帐号和密码的;

Options

  None:不支持任何选项;

  Indexes:允许索引目录;

  FollowSynLInks:允许访问符号链接指向的原文件;

  Includes:允许执行服务器端包含(SSI);

  ExecCGI:允许运行CGI脚本;

  All:支持所有选项;

Order:用于定义基于主机的访问功能的,IP, 网络地址或主机定义访问控制机制;

  Order allow,deny(Order定义顺序,allow,deny先allow后deny)

  allow from (允许什么)

  deny from(拒绝什么)

网站仅仅允许192.168.0.0/24网络访问:

Order allow,deny

Allow from 192.168.0.0/24

网站不允许192.168.0.0/24网络访问:

Order deny,allow

Deny from 192.168.0.0/24

网站拒绝192.168.0.1,172.16.100.177地址访问:

Order deny,allow

Deny from 192.168.0.1/32

Deny from 172.16.100.177/32

Order地址表示方式:

  IP

  network/netmask

  HOSTNAME:www.a.com

  DOMAINNAME:magedu.com

  Partial IP(片段IP地址): 172.16, 172.16.0.0/16

在httpd/2.4当中不再使用allow,deny这种机制;

elinks http://172.16.100.1:纯文本浏览器,在纯文本界面下浏览网页的工具,通过交互式打开一个网页,消去了所有图片的浏览器界面;

  -dump:把网页内容显示出来以后立即退出,不再进入交互式模式;

  -source:显示网页的源代码;

AuthType Basic(表示使用基本用户认证类型)

AuthName "Restricted Files"(在用户认证的时候给它显示个名字,告诉它这到底是什么东西,为什么要认证)

AuthUserFile /usr/local/apache/passwd/passwords(认证用户的时候,用户帐号密码文件是什么)

Require user marion(只有marion这个用户才能登录的)

Group File Syntax:

GroupName: rbowen dpitts sungo rshersey

AuthType Basic

AuthName "By Invitation Only"

# Optional line:

AuthBasicProvider file

AuthUserFile /usr/local/apache/passwd/passwords(基于用户认证)

AuthGroupFile /usr/local/apache/passwd/groups(基于组认证,放的都是组名)

Require group GroupName(允许那个组中的用户允许登录的)

Require valid-user(只要出现在帐号密码文件中的用户都可以登录的)

<Directory /www/docs/private>

AuthName "Private"

AuthType Basic

AuthBasicProvider dbm

AuthDBMUserFile /www/passwords/passwd.dbm

Require valid-user

</Directory>

个人页面:

tom

http://172.16.100.1/~tom/

PV:Page View(页面访问量),按每天页面访问量;

UV:User View(客户端访问量),每天的独立IP访问量;

/web/html

  bbs/images

/www/forum bbs

http://172.16.100.1/bbs/images/logo.jpeg

知识回顾:

定义网站文档目录

访问选项:options

基于主机的访问控制

基于用户或组的访问控制

用户个人站点

错误日志

日志格式

访问日志 PV UV

路径别名

[root@localhost ~]# cd /etc/httpd/conf(切换到/etc/httpd/conf目录)
提示:httpd主配置文件在/etc/httpd/conf目录;
[root@localhost conf]# ls(查看当前目录文件及子目录)
httpd.conf  httpd.conf.bak  magic
[root@localhost conf]# grep "Section" httpd.conf(查看文件httpd.conf文件只包含Section字符串的段)
### Section 1: Global Environment(全局环境)
### Section 2: 'Main' server configuration(主服务器配置)
### Section 3: Virtual Hosts(虚拟主机)
提示:Section 2第二段和Section 3第三段不能重复出现,Section 2第二段意味着当前web服务器只提供一个web服务器,不提供虚拟主机的,如果利用Section 3第三段,
就意味着禁用了中心主机,而启用了虚拟主机,就意味着一台物理主机提供多个不同的站点;
[root@localhost conf]# vim httpd.conf(编辑httpd.conf主配置文件)

ServerAdmin root@localhost(服务器管理员,在服务器访问事先并不存在内容的时候,它有时候可能会报告说如果是错误的请给管理员发邮件,可能会显示管理员邮箱地址,
显示的邮箱地址就是ServerAdmin服务器管理员地址,服务器管理员可以是每虚拟主机定义的,就是每一个站点都需要一个)

#ServerName www.example.com:80(服务器名字,如果不启用,使用service httpd start它会反向解析IP地址到某一个主机名,如果能解析成功就把那个主机名当作服务
器的名字,否则可能会报错的说你当前主机没有主机名称,因此使用localhost当作主机名,会出现警告信息,可以跟本机一个主机名就可以了)

[root@localhost conf]# service httpd start(启动httpd服务)
[root@localhost conf]# ifconfig eth0(查看eth0接口信息)
eth0      Link encap:Ethernet  HWaddr 00:0C:29:CC:FA:AE  
          inet addr:172.16.100.1  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fecc:faae/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11102 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11986 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:948695 (926.4 KiB)  TX bytes:2261175 (2.1 MiB)
          Interrupt:67 Base address:0x2000 
[root@localhost conf]# vim /etc/hosts(编辑hosts本地解析文件)
提示:编辑/etc/hosts文件让172.16.100.1有个主机名,或者通过通过DNS服务能够解析;
[root@localhost conf]# dig -x 172.16.100.1 @127.0.0.1(通过本地解析172.16.100.1,-x快捷方式反向查找)
[root@localhost conf]# vim httpd.conf(编辑httpd服务主配置文件)
#ServerName www.example.com:80(通过某种机制能够决定主机的主机名就不会报错,如果不想报错给它一个ServerName就可以了,但是在虚拟主机当中,尤其是基于主机名
的虚拟主机这项是必须的,不然怎么能够通过主机名定义虚拟主机)

UseCanonicalName Off(正式名称,表示服务器如何在URL上实现自身的自我引用的)

DocumentRoot "/var/www/html"(文档根目录,网页文件存放位置)

[root@localhost conf]# mkdir -pv /web/html(创建/web/html目录)
mkdir: created directory `/web'
mkdir: created directory `/web/html'
[root@localhost conf]# vim httpd.conf(编辑httpd服务主配置文件)

DocumentRoot "/web/html"(更改文档根目录为/web/html目录,网页文件存放位置)

[root@localhost conf]# service httpd restart(重启httpd服务)
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

测试:通过真实机器windows系统的IE浏览器访问172.16.100.1/a.html,找不到页面,因为不再同一个路径下了;

默认情况下,当使用原来的路径访问,如果不加任何路径的话,给出一个列表,列出来让你选择那个文件,改了之后,通过172.16.100.1访问,显示为Forbidden,禁止访问,它说你没权限访问这个服务器;

[root@localhost conf]# vim httpd.conf(编辑httpd主配置文件)

DocumentRoot "/var/www/html"(将文档根目录改回原来/var/www/html目录,页面文件存放位置)

[root@localhost conf]# !ser(重启httpd服务)
service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

测试:通过真实机器windows系统的IE浏览器访问172.16.100.1/访问,会列出列表让选择,刚才改为/web/html目录就不让选择了,

[root@localhost conf]# vim httpd.conf(编辑httpd主配置文件)


DocumentRoot "/var/www/html"(事实上我们每一个所定义的网页所在位置的路径目录里边的网页能够被哪些主机所访问,而且如何被访问,事实上是由其属性定义的,对
于每一个本地路径,在这里定义的是/var/www/html,为什么在访问的时候没有对应172.16.100.1/var/www/html来访问,对于整个网站来讲根已经指向这个位置了,所以
这里的相对就是相对/var/www/html而言,因此URL路径和本地文件路径并不是一码事)

<Directory "/var/www/html">(使用容器叫Directory明确说明/var/www/html这个路径,它 应该如何被访问,里面定义一大堆指令)

</Directory>(封装起来)

<Directory "/var/www/html">(这里正好有这个路径,默认使用DocumentRoot时候,已经定义这个路径如何被访问,如果改为/web/html目录下,与它就不匹配了,所
以就不再对它生效)


#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews(Includes包含,允许执行服务器端包含的SII格式的网页文件,这也是不
安全的,除非你知道自己在做什么;SymLinksifOwnerMatch允许执行符号连接,但是属主必须要跟执行httpd进程用户的属主相匹配,意义也不大,还需要额外的检查,也不应
该开放,ExecCGI是否允许执行CGI脚本,MultiViews多视图,内容协商的一种机制,它能够根据你的客户端来源的语言和文字来判定,我应该显示哪一种网页给你,比如它发现
你的操作系统是汉语的,它能找一个与你汉语相匹配的语言的网页显示给你,所以可能有多个默认页面,不同用户通过不同的地方,地域来访问的时候,显示的内容不一样,很消耗
资源,除非你是国际化的网站,的确提供这种功能,否则MultiViews也没必要显示)

    Options Indexes FollowSymLinks(Options用于定义/var/www/html目录下的所有网页文档能够在被访问时候的访问属性的,Options后面可以根多个值,如果有多
个值彼此之间用空格隔开,Indexes索引,如果没有主页把所有文件列出来,让你选择一个显示,把整个网页根目录下DocumentRoot路径下的每一个文件都列出来,这不是好事,
别人可以把你的网页源代码统统可以拿走,所以这是一个非常不安全的做法,所以在生产环境中一定不要允许Indexes,但是默认配置为了我们配置起来简单和方便,所以它尽可能
做的可开放了,因此这种默认配置是不适合我们需要的,但是在有一种场景当中应该把它启用起来,就是把它作为下载站用的时候,里面放了一大堆的文件,可以允许别人下载的;
FollowSymLinks跟随符号链接,如果在网页路径下有个文件是符号连接,允许不允许访问这个符号链接真正指向的文件,确保没有这样的必须一定把这个功能关掉,这会降低你的
服务器的执行速度的,所以把这项关了也可以在一定程序上提高服务器性能的;)

[root@localhost ~]# cd /var/www/html/(切换到/var/www/html目录)
[root@localhost html]# ls(查看当前目录文件及子目录)
a.html
[root@localhost html]# ln -sv /etc/fstab /var/www/html/b.html(给/etc/fstab文件创建软连接/var/www/html/b.html,-s软连接,-v显示创建过程) 
create symbolic link `/var/www/html/b.html' to `/etc/fstab'
提示:默认允许FollowSymLInks跟随符号链接;
[root@localhost html]# ll(查看当前目录文件及子目录)
total 12
-rw-r--r-- 1 root root 83 Nov 22 04:18 a.html
lrwxrwxrwx 1 root root 10 Nov 23 10:01 b.html -> /etc/fstab
提示:b.html连接文件指向/etc/fstab文件,这个连接文件事实不在本地目录下;

测试:通过真实机器windows系统的IE浏览器访问172.16.100.1/b.html访问,可以访问符号连接文件;

提示:如果将/DocumentRoot改为/web/html目录,也期望它有相应的功能,把下面Directory容器中相应的修改,或者重新定义一个Directory容器也可以;

[root@localhost conf]# vim httpd.conf(编辑httpd.conf文件)
DocumentRoot "/web/html"(启用DocumentRoot根目录为/web/html目录,网页文件存放位置)
#DocumentRoot "/var/www/html"(注释掉原来的DocumentRoot根目录/var/www/html)

<Directory "/web/html">(更改Directory容器明确说明/web/html这个目录如何被访问)

[root@localhost conf]# !ser(重启httpd服务)
service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

测试:通过真实机器windows系统的IE浏览器访问172.16.100.1访问,能够使用Indes索引,因为默认定义了Indexes选项;

[root@localhost conf]# vim httpd.conf(编辑httpd服务主配置文件)

    Options none(由于Indexes和FollowSymLinks不安全,因此我们直接none)

    AllowOverride None(允许覆盖,覆盖底下两项服务器的访问控制列表)

#    Order allow,deny(定义服务器访问控制列表,Order顺序,allow,deny表示先allow后deny,deny是默认值,叫deny from all,只要没有允许,统统deny)
#    Allow from all(允许所有人访问)
     order deny,allow(定义服务器访问控制列表,Order顺序,deny,allow表示先deny后allow,allow是默认值,叫allow from all,只要没有deny,统统allow)
     Deny from 172.16.100.177 192.168.0.1(拒绝172.16.100.177和192.168.0.1访问)

[root@localhost conf]# httpd -t(测试httpd.conf主配置文件语法正确性)
Syntax OK(语法正确)
[root@localhost conf]# service httpd restart(重启httpd服务)
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

测试:通过真实机器windows系统的IE浏览器访问172.16.100.1访问,访问不了,拒绝访问,因为真实机器的IP地址正好是172.16.100.177;

测试:通过虚拟机linux主机apache服务器自己访问自己;

[root@localhost conf]# elinks http://172.16.100.1(通过elinks访问172.16.100.1网页)
[root@localhost conf]# man elinks(查看elinks的man帮助文档)
[root@localhost conf]# cd /web/html/(切换到/web/html目录)
[root@localhost html]# ls(查看当前目录文件及子目录)
[root@localhost html]# vim index.html(建立index.html页面)
Test site.

测试:通过真实机器windows系统的IE浏览器访问172.16.100.1访问,访问不了,拒绝访问;

测试:通过虚拟机linux主机apache服务器自己访问自己;

[root@localhost html]# elinks 172.16.100.1/index.html(通过elinks访问172.16.100.1/index.html页面)

提示:可以正常访问;

[root@localhost html]# elinks -dump 172.16.100.1/index.html(通过elinks访问172.16.100.1/index.html页面,-dump访问完之后直接退出)
   Test site.
[root@localhost html]# elinks -source 172.16.100.1/index.html(通过elinks访问172.16.100.1/index.html页面,-source显示源码)
Test site.
[root@localhost html]# cd -(切换到上层目录)
/etc/httpd/conf
[root@localhost conf]# vim httpd.conf(编辑httpd服务主配置文件)
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit(AllowOverride通常后面跟的值叫AuthConfig Limit或Fileinfo等等,一般用的最多的就是AuthConfig, 意味着我们
需要基于一个文件中的用户名的帐号密码需要认证以后才能访问,只不过httpd的帐号密码不是/etc/passwd和/etc/shadows中的帐号密码,而是我们自己建立的一个文件中的
帐号密码,比如我们在/etc/httpd/conf目录下建一个口令文件,这个文件中放有用户的帐号和密码,这个文件是上并不存在,需要手动建立,建完以后只允许这个文件中的某个
帐号登录访问,在访问的时候需要输入帐号密码就能访问了,这样子我们可以限定,某些比较敏感的站点,只能够让哪些可以通过访问认证用户才能访问,我们只需要将AllowOve
rride None改为AllowOverride AuthConfig, 并且提供一些额外选项就行了)
#

    AllowOverride None(指的是,是不是不让Order访问控制列表生效,还有别的控制法则)
要求用户提供帐号密码以后才能够访问网站:
[root@localhost conf]# vim httpd.conf(编辑httpd服务配置文件)

    Order allow,deny
    Allow from all
     
</Directory>
提示:去掉order deny,allow和Deny from 172.16.100.177 192.168.0.1服务器访问控制列表,确保正常情况下可以访问;
[root@localhost conf]# service httpd restart(重启httpd服务)
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

测试:通过真实机器windows系统的IE浏览器访问172.16.100.1访问,可以正常访问;

[root@localhost conf]# vim httpd.conf(编辑httpd服务主配置文件)

    AllowOverride AuthConfig(使用认证配置覆盖用户的请求)
    AuthType Basic(认证类型,基本用户认证)
    AuthName "Restricted Site..."(用户认证时候提示的信息)
    AuthUserFile "/etc/httpd/conf/htpasswd"(认证用户使用的帐号密码文件,这个文件不应该让其他用户能够看到)
    Require valid-user(允许htpasswd文件中的所有用户都能登录)
建立htpasswd文件:
[root@localhost conf]# man htpasswd(查看htpasswd命令的man帮助文档)
       htpasswd [ -c ](第一次创建文件使用-c选项) [ -m ] [ -D ] passwdfile(文件名是什么) username(添加进来的用户是什么)
       -c     Create  the  passwdfile. If passwdfile already exists, it is rewritten and
              truncated. This option cannot be combined with the -n option.(创建passwdfile文件,如果passwdfile文件存在,注意:请不要再使用-c
选项,会把里面所有内容清空的)
       -m     Use MD5 encryption for passwords. On Windows, Netware and TPF, this is the
              default.(表示用户登录的密码是以MD5的方式加密存放的)

提示:建立/etc/httpd/conf/htpasswd文件的命令是htpasswd,这个命令就是让我们创建这个文件,并且在这个文件中添加用户,并为其指定密码,也可以从这个文件中删除用户;
[root@localhost conf]# htpasswd -c -m /etc/httpd/conf/htpasswd hadoop(创建htpasswd用户密码文件,并添加hadoop用户,-c创建文件,-m使用MD5加密存放
用户密码)
New password: (输入用户密码)
Re-type new password: 
Adding password for user hadoop
[root@localhost conf]# htpasswd -m /etc/httpd/conf/htpasswd tom(给htpasswd用户密码文件添加tom用户,-m使用md5加密存放用户密码)   
New password: (输入密码)
Re-type new password: 
Adding password for user tom
提示:第二次添加用户,切记一定不要使用-c选项,会清空htpasswd文件中的内容;
[root@localhost conf]# cat htpasswd(查看htpasswd文件内容)
hadoop:$apr1$kt2La...$nynbPui.hwbbOeQa1ysbw.
tom:$apr1$agNbx...$FOrvjNFvgDsb5jPr0WGOd1
[root@localhost conf]# httpd -t(测试httpd服务主配置文件语法)
Syntax OK
[root@localhost conf]# service httpd restart(重启httpd服务)
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

测试:通过真实机器windows系统的IE浏览器访问172.16.100.1访问,需要输入用户名和密码,服务器提示Restricted Site...这是限定的站点;

输入用户名hadoop,密码smoke520,点击登录,正常访问网页;

通过其他浏览器访问172.16.100.1;

通过用户名tom,密码smoke520,等级登录,也可以正常访问网页;

[root@localhost conf]# vim httpd.conf(编辑httpd服务主配置文件)

    AllowOverride AuthConfig
    AuthType Basic
    AuthName "Restricted Site..."
    AuthUserFile "/etc/httpd/conf/htpasswd"
    Require user hadoop(只允许hadoop用户访问)

[root@localhost conf]# service httpd restart(重启httpd服务)
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

测试:通过真实机器windows系统的IE浏览器访问172.16.100.1访问,使用hadoop用户名,密码smoke520访问,可以正常访问;

再通过其他浏览器通过tom用户,密码smoke520访问页面,使用tom用户无法登录;

基于组认证:

[root@localhost conf]# vim httpd.conf(编辑httpd服务主配置文件)

    AllowOverride AuthConfig
    AuthType Basic
    AuthName "Restricted Site..."
    AuthUserFile "/etc/httpd/conf/htpasswd"
    AuthGroupfile "/etc/httpd/conf/htgroup"(指定组认证文件)
    Require group myusers(允许myusers组访问)

[root@localhost conf]# vim htgroup(编辑文件htgroup)
myusers: hadoop tom(组名myusers,用户hadoop和tom)
提示:用户hadoop和tom需要事先创建成passwdfile文件的;
[root@localhost conf]# httpd -t(检查主配置文件语法)
Syntax OK
[root@localhost conf]# !ser(重启httpd服务)
service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

测试:通过真实机器windows系统的IE浏览器访问172.16.100.1访问,需要输入用户名和密码,输入hadoop用户,密码smoke520;

可以正常访问页面;

[root@localhost conf]# man htpasswd(查看htpasswd命令的man帮助文档)

       -d     Use  crypt()  encryption  for  passwords. The default on all platforms but
              Windows, Netware and TPF. Though possibly supported  by  htpasswd  on  all
              platforms, it is not supported by the httpd server on Windows, Netware and
              TPF.(用来做加密的)
       -D     Delete  user.  If  the  username exists in the specified htpasswd file, it
              will be deleted.(删除passwdfile文件中的用户)
[root@localhost conf]# ht(通过输入ht点击TAB键两下,查看ht开头的命令有哪些)
htcacheclean  htdigest      htpasswd      httpd.event   httxt2dbm     
htdbm         htmlview      httpd         httpd.worker 
提示:apache支持的认证机制,不仅仅是basic这种方式,它也支持基于MD5,基于摘要方式认证机制,htdigest命令永固摘要认证命令,htdbm命令只是保证文件存放的位置不同;
[root@localhost conf]# vim httpd.conf(编辑httpd.conf主配置文件)

<IfModule mod_userdir.c>(mod_userdir模块属性)
    #
    # UserDir is disabled by default since it can confirm the presence
    # of a username on the system (depending on home directory
    # permissions).
    #
    UserDir disable

    #
    # To enable requests to /~user/ to serve the user's public_html
    # directory, remove the "UserDir disable" line above, and uncomment
    # the following line instead:
    # 
    #UserDir public_html

</IfModule>

[root@localhost conf]# httpd -l(列出当前httpd服务器编译时候所支持的模块)
Compiled in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c
提示:没有mod_userdir.c模块;
[root@localhost conf]# httpd -M(列出httpd服务器的静态和共享模块,这是apache支持的所有额外的模块)
Loaded Modules:
 core_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 auth_basic_module (shared)
 auth_digest_module (shared)
 authn_file_module (shared)
 authn_alias_module (shared)
 authn_anon_module (shared)
 authn_dbm_module (shared)
 authn_default_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 authz_owner_module (shared)
 authz_groupfile_module (shared)
 authz_dbm_module (shared)
 authz_default_module (shared)
 ldap_module (shared)
 authnz_ldap_module (shared)
 include_module (shared)
 log_config_module (shared)
 logio_module (shared)
 env_module (shared)
 ext_filter_module (shared)
 mime_magic_module (shared)
 expires_module (shared)
 deflate_module (shared)
 headers_module (shared)
 usertrack_module (shared)
 setenvif_module (shared)
 mime_module (shared)
 dav_module (shared)
 status_module (shared)
 autoindex_module (shared)
 info_module (shared)
 dav_fs_module (shared)
 vhost_alias_module (shared)
 negotiation_module (shared)
 dir_module (shared)(支持dir_module模块)
 actions_module (shared)
 speling_module (shared)
 userdir_module (shared)
 alias_module (shared)
 rewrite_module (shared)
 proxy_module (shared)
 proxy_balancer_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_connect_module (shared)
 cache_module (shared)
 suexec_module (shared)
 disk_cache_module (shared)
 file_cache_module (shared)
 mem_cache_module (shared)
 cgi_module (shared)
 version_module (shared)
 proxy_ajp_module (shared)
Syntax OK
[root@localhost conf]# vim httpd.conf(编辑httpd.conf主配置文件)

<IfModule mod_userdir.c>(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 disable(关闭个人页面,默认不允许,如果允许意味着每个用户可以通过http://172.16.100.1/~tom/访问自己的家目录,可以给自己的家目录建立网站,
然后使用这个目录来访问)

    #
    # To enable requests to /~user/ to serve the user's public_html
    # directory, remove the "UserDir disable" line above, and uncomment
    # the following line instead:
    # 
     UserDir public_html(启用个人页面,明确指定在用户家目录下那个一个目录里面放网页文件,可以当作用户的个人的网站访问,默认是public_html目录,所以每个用
户只要在它的家目录建立public_html目录,在里面放上网页文件,就可以访问到了,但是有个前提,用户的家目录别人不能进去,每一个用户的家目录都是700的权限,任何其它
用户都访问不到,所以包括我们运行httpd进行的apache用户不能访问,不能,也无法访问这个页面,因此得让家目录让其他人也有进去的权限,)

</IfModule>
提示:启用UserDir public_html个人页面家目录;
[root@localhost conf]# useradd hadoop(添加hadoop用户)
[root@localhost conf]# su - hadoop(切换到hadoop用户)
[hadoop@localhost ~]$ mkdir public_html(创建public_html目录)
[hadoop@localhost ~]$ cd public_html/(切换到public_html目录)
[hadoop@localhost public_html]$ vim index.html(编辑index.html网页文件)
Hadoop's Site.
[hadoop@localhost public_html]$ cd ..(切换到上级目录)
[hadoop@localhost public_html]$ exit(退出hadoop用户)
提示:一定要让hadoop家目录让其他用户具有进入的权限;
[root@localhost conf]# chmod o+x /home/hadoop/(给/home/hadoop目录其他用户添加执行权限)
[root@localhost conf]# service httpd restart(重启httpd服务)
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

测试:通过真实机器windows系统的IE浏览器访问172.16.100.1,可以正常访问;

再通过172.16.100.1/~hadoop访问hadoop个人网页,可以正常访问hadoop用户的个人网页;

[root@localhost conf]# vim httpd.conf(编辑httpd主配置文件)

#<Directory /home/*/public_html>(个人网站并不安全,因此这里定义了一大堆访问控制权限,家目录下每一个用户的/public_html)
#    AllowOverride FileInfo AuthConfig Limit(把这项改为none)
#    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec(把Options也改成none)
#    <Limit GET POST OPTIONS>(限制只允许GET、POST、OPTIONS方法)
#        Order allow,deny(服务器访问控制,Order顺序,先允许都拒绝)
#        Allow from all(所有用户都使用这些方法)
#    </Limit>
#    <LimitExcept GET POST OPTIONS>(除了GET、POST、OPTIONS其他都拒绝)
#        Order deny,allow
#        Deny from all(拒绝所有)
#    </LimitExcept>
#</Directory>

DirectoryIndex index.html index.html.var(定义主页,如果在网页工作目录定义的几种主页类型都有,自左而右匹配)

#AccessFileName .htaccess(apache支持每目录的访问控制,在网站的任何路径下创建子目录,如果这个子目录有网页文件,这个子目录网页文件能否被访问到,也可以定义单
独的访问控制法则,只需要在那个目录下建立.htaccess文件,把访问控制机制写进去Authtype Basic,只有那个目录访问才需要提供帐号密码,这个东西让apache的执行效率是
极低的,因为一旦定义这个文件以后,htaccess是自上而下继承的,如果父目录定义了子目录就不用定义,所以如果在一个目录定义了,如果这个目录还有子目录,所以这个目录访
问的时候就要搜索它父目录的文件了,所以这是非常麻烦的事情,一般情况在真正生成环境中这个应该是禁用的)

<Files ~ "^\.ht">(Files容器,只对.ht文件生效,~表示后面的内容做模式匹配,意思如果你的文件能够被^\.ht路径匹配到,\斜线表示.自身,转义,表示以.ht开头,因为
我们很多文件,.htaccess、htpasswd、htgroup一大堆这样的文件是不允许别人通过网站访问的,不然帐号密码都被别人拿走了)
    Order allow,deny(服务器访问控制,Order顺序,allow,deny先allow后deny)
    Deny from all(deny所有)
</Files>

TypesConfig /etc/mime.types(mime多用途多功能互联网邮件扩展,用来定义让http协议能够传输多媒体文档,非二进制格式文件,这里定义可以传输哪些类型,那个配置文
件保存了本机支持的mime类型)

DefaultType text/plain(默认mime类型,如果没有指定类型,使用默认类型,纯文本简单明文信息)

<IfModule mod_mime_magic.c>(如果mod_mime_magic.c模块存在,mod_mime_magic模块属性)
#   MIMEMagicFile /usr/share/magic.mime
    MIMEMagicFile conf/magic
</IfModule>

HostnameLookups Off(在记录日志的时候,我们日志记录IP地址是不是解析为记录主机名字,如果启用会反解访问的IP地址为主机名,这是及其浪费资源,而且速度非常慢)

[root@localhost conf]# tail /var/log/httpd/access_log(查看access_log日志文件后10行)
172.16.100.254 - - [23/Nov/2014:12:38:10 +0800] "GET / HTTP/1.1" 401 479 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36
 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"
172.16.100.254 - hadoop [23/Nov/2014:12:39:28 +0800] "GET / HTTP/1.1" 401 479 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/5
37.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"
172.16.100.254 - hadoop [23/Nov/2014:12:39:33 +0800] "GET / HTTP/1.1" 401 479 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/5
37.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"
172.16.100.254 - hadoop [23/Nov/2014:12:39:38 +0800] "GET / HTTP/1.1" 401 479 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/5
37.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"
172.16.100.254(那个客户端) - hadoop(那个用户) [23/Nov/2014:12:40:41 +0800] "GET(通过什么方法) / HTTP/1.1"(协议版本) 304(状态码) - "-"
 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"(客户端浏览器版本,软
件是什么)
172.16.100.254 - hadoop [23/Nov/2014:12:40:42 +0800] "GET /favicon.ico HTTP/1.1" 404 287 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) A
ppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"
172.16.100.254 - - [23/Nov/2014:12:47:42 +0800] "GET /favicon.ico HTTP/1.1" 401 479 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; T
rident/7.0; rv:11.0) like Gecko"
172.16.100.254 - hadoop [23/Nov/2014:13:25:55 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/53
7.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"
172.16.100.254 - - [23/Nov/2014:13:26:46 +0800] "GET /~hadoop HTTP/1.1" 301 314 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi
t/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"
172.16.100.254 - - [23/Nov/2014:13:26:46 +0800] "GET /~hadoop/ HTTP/1.1" 200 15 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebK
it/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"

[root@localhost conf]# vim httpd.conf(编辑httpd服务主配置文件)

HostnameLookups Off(在记录日志的时候,我们日志记录IP地址是不是解析为记录主机名字,如果启用会反解访问的IP地址为主机名,这是及其浪费资源,而且速度非常慢)

#EnableMMAP off

#EnableSendfile off(这项对提高性能很关键)

ErrorLog logs/error_log(定义错误日志)

LogLevel warn(日志级别warn看呢鞥影响系统功能,需要提醒用户的重要事件(警告))

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined(日志格式,后面的%字符串都是宏,%h表示客户端地址,%l表示以那
个用户身份,%t时间,%r来自那个网站,%>s访问哪些页面,\"%{User-Agent}i\"使用什么浏览器,每个格式后面起一个名字,combined混合模式,反斜线\表示转意,""引号
就表示引号,显示引号本身的,%u如果网站需要认证,显示登录的用户名,%>s状态码,%b响应报文大小,\"%{Referer}i\"从那个页面来的,\"%{User-Agent}i\"用户浏览器,)
LogFormat "%h %l %u %t \"%r\" %>s %b" common(普通模式)
LogFormat "%{Referer}i -> %U" referer(只记录客户端访问地址来源)
LogFormat "%{User-agent}i" agent(只记录客户端浏览器类型)

CustomLog logs/access_log combined(访问日志,日志文件access_log,日志类型combined混合模式)

通过http://httpd.apache.org/docs/2.2/mod/quickreference.html指令快速参考,查找l开头找到LogFormat;

LogFormat format|nickname [nickname]
Describes a format for use in a log file
Custom Log Formats

Format String Description
%% The percent sign
%a Remote IP-address
%A Local IP-address
%B Size of response in bytes, excluding HTTP headers.
%b Size of response in bytes, excluding HTTP headers. In CLF format, i.e. a '-' rather than a 0 when no bytes are sent. 响应报文的大小;
%{Foobar}C The contents of cookie Foobar in the request sent to the server. Only version 0 cookies are fully supported.
%D The time taken to serve the request, in microseconds.
%{FOOBAR}e The contents of the environment variable FOOBAR
%f Filename
%h Remote host 远程主机地址,客户端地址
%H The request protocol
%{Foobar}i The contents of Foobar: header line(s) in the request sent to the server. Changes made by other modules (e.g. mod_headers) affect this. If you're interested in what the request header was prior to when most modules would have modified it, use mod_setenvif to copy the header into an internal environment variable and log that value with the %{VARNAME}edescribed above.
%k Number of keepalive requests handled on this connection. Interesting ifKeepAlive is being used, so that, for example, a '1' means the first keepalive request after the initial one, '2' the second, etc...; otherwise this is always 0 (indicating the initial request). Available in versions 2.2.11 and later.
%l Remote logname (from identd, if supplied). This will return a dash unlessmod_ident is present and IdentityCheck is set On. 远端主机的登录名称
%m The request method
%{Foobar}n The contents of note Foobar from another module.
%{Foobar}o The contents of Foobar: header line(s) in the reply.
%p The canonical port of the server serving the request
%{format}p The canonical port of the server serving the request or the server's actual port or the client's actual port. Valid formats are canonical, local, orremote.
%P The process ID of the child that serviced the request.
%{format}P The process ID or thread id of the child that serviced the request. Valid formats are pid, tid, and hextid. hextid requires APR 1.2.0 or higher.
%q The query string (prepended with a ? if a query string exists, otherwise an empty string)
%r First line of request 请求报文的第一行,第一行都是访问方法,URL获取的资源,版本号;
%R The handler generating the response (if any).
%s Status. For requests that got internally redirected, this is the status of the *original* request --- %>s for the last. 状态码,如果显示原始状态,最后对应请求状态码%>s;
%t Time the request was received (standard english format) 日志产生的时间
%{format}t The time, in the form given by format, which should be in strftime(3)format. (potentially localized)
%T The time taken to serve the request, in seconds.
%u Remote user (from auth; may be bogus if return status (%s) is 401) 登录网站需要使用的用户,没做认证这个用户为空
%U The URL path requested, not including any query string.
%v The canonical ServerName of the server serving the request.
%V The server name according to the UseCanonicalName setting.
%X Connection status when response is completed:
X = connection aborted before the response completed.
+ = connection may be kept alive after the response is sent.
- = connection will be closed after the response is sent.
(This directive was %c in late versions of Apache 1.3, but this conflicted with the historical ssl %{var}c syntax.)

%I Bytes received, including request and headers, cannot be zero. You need to enable mod_logio to use this.
%O Bytes sent, including headers, cannot be zero. You need to enablemod_logio to use this.
%{VARNAME}^ti The contents of VARNAME: trailer line(s) in the request sent to the server.
%{VARNAME}^to The contents of VARNAME: trailer line(s) in the response sent from the server.

[root@localhost ~]# tail /var/log/httpd/access_log(查看access_log日志文件后10行)
172.16.100.254 -(远程主机登录的用户名,这个这个帐号不能够随便传递给别人,所以大多都是-横线) - [23/Nov/2014:12:38:10 +0800] "GET / HTTP/1.1"
(获取资源方法,资源,版本号) 401(状态码) 479(响应报文的大小) "-"(从那个页面来) "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36
 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"(浏览器类型)
172.16.100.254 - hadoop(登录用户认证名称) [23/Nov/2014:12:39:28 +0800] "GET / HTTP/1.1" 401 479 "-" "Mozilla/5.0 (Windows NT 6.1; W
OW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"
172.16.100.254 - hadoop [23/Nov/2014:12:39:33 +0800] "GET / HTTP/1.1" 401 479 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"
172.16.100.254 - hadoop [23/Nov/2014:12:39:38 +0800] "GET / HTTP/1.1" 401 479 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit
/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"
172.16.100.254 - hadoop [23/Nov/2014:12:40:41 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/5
37.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"
172.16.100.254 - hadoop [23/Nov/2014:12:40:42 +0800] "GET /favicon.ico HTTP/1.1" 404 287 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"
172.16.100.254 - -(登录用户认证用户名称,没定义显示-横线,为空) [23/Nov/2014:12:47:42 +0800] "GET /favicon.ico HTTP/1.1" 401 479 "-" "M
ozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko"
172.16.100.254 - hadoop [23/Nov/2014:13:25:55 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/5
37.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"
172.16.100.254 - - [23/Nov/2014:13:26:46 +0800] "GET /~hadoop HTTP/1.1" 301 314 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebK
it/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"
172.16.100.254 - - [23/Nov/2014:13:26:46 +0800] "GET /~hadoop/ HTTP/1.1" 200 15 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebK
it/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"

[root@localhost conf]# vim httpd.conf(编辑httpd服务主配置文件)

ServerSignature On

Alias /icons/ "/var/www/icons/"(别名,路径别名,/var/www/icons/目录别名为/icons)

路径别名测试:
期望用户在访问路径的时候使用172.16.100.1/luntan,就能够访问/bbs/forum目录下所有文件;
[root@localhost conf]# mkdir -pv /bbs/forum(创建/bbs/forum目录,-p递归创建,-v显示创建过程)
mkdir: created directory `/bbs'
mkdir: created directory `/bbs/forum'
[root@localhost conf]# vim httpd.conf(编辑httpd.conf主配置文件)

Alias /luntan "/bbs/forum"(建立/bbs/forum目录的别名为/luntan)

[root@localhost conf]# cd /bbs/forum/(切换到/bbs/forum目录)
[root@localhost forum]# vim index.html(编辑index.html网页)
/bbs/forum
[root@localhost forum]# !ser(重启httpd服务)
service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

测试:通过真实机器windows系统的IE浏览器访问172.16.100.1/luntan,可以正常访问/bbs/forum目录下的网页文件;

[root@localhost forum]# cd -(切换到上次所处的目录)
/etc/httpd/conf
[root@localhost conf]# vim httpd.conf(编辑httpd.conf文件)

Alias /luntan "/bbs/forum"(提示,这两个路径对应关系很关键,如果/luntan/后面跟斜线,那么/bbs/forum/后面也要加斜线,如果后面没有加斜线就都不能加斜线)