一、什么是web

    

    web是一种超文本信息系统,其主要实现方式是超文本链接,它使得文本不再像一本书那样是固定的、线性的,而是可以从一个位置跳转到另一个位置。


二、web服务器的一般配置文件CenTos6.5

    

    配置文件:

            /etc/httpd/conf/httpd.conf

    服务脚本:

            /etc/rc.d/init.d/httpd

    脚本配置文件:

            /etc/sysconfig/httpd

    模块目录:

            /etc/httpd/modules  :连接文件

            /usr/lib64/httpd/modules

    主程序:

            /usr/sbin/httpd :prefork

            /usr/sbin/httpd.event :event

            /usr/sbin/httpd.eorker :worker

    日志文件目录:    

            /var/log/httpd

                access_log : 访问日志

                error_log : 错误日志

    站点文档目录:

            /var/www/html/


三、http状态码

    1XX: 信息性状态码

    2XX: 成功状态码

        200: OK

        201: CREATED

    3XX: 重定向类的状态码

        301: Moved Permanently ,永久重定向

        302: Found,临时重定向,会在响应报文中收到一条伪响应

        304: Not Modified

    4XX:客户端类错误

        403: Forbidden    

        404: Not Found

        405: Method Not Allowed

    5XX: 服务器类错误

        500: Imternal Server Error ,服务器内部错误

        502: Bad Gateway,代理服务器从上游服务器收到一条伪响应

        503: Service Unavailable,服务暂时不可用


四、httpd的特性

        高度模块化:core + modules

        DSO:Dynamic Shared Object

        MPM: Multipath Processing Module

            统称事实上有多个实现:

                prefork :每个进程响应一个用户请求,预先生成多个空闲进程

                select():1024

                worker:启动多个进程,每个进程生成多个线程,每个线程响应一个客户请求

                event:启动多个线程,每个线程响应 N 个请求

                event-driven:事件驱动

五、httpd的配置文件说明

      1、持久连接

            KeepAlive {on|off}  设置是否启用保持连接

            MaxKeepAliveRequests 100 限制客户一次请求连接能相应的文件数量

            KeepAliveTimeout 15 限制相邻的两个请求连接的想个时间

       2、MPM参数

            

            <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>

      3、指定监听的地址和端口

              Listen [ip:]PORT

              此指令可重复指定多次

      4、DSO机制装载的模块

            显示:    

                httpd -D DUMP_MODULES

            LoadModule Module_Name /path/to/Module_File

       5、指定站点根目录

               DocumentRoot "/path/to/somewhere"

        6、站点路径访问控制

                基于本地文件系统路径:

                    <Directory /path/to/somewherr>

                    

                    </Directory>

                基于URL访问路径做访问控制

                    <Location /path/to/URL>

            

                     </Location>

        7、于Directory中可用的访问控制

           1.Options

                Indexes:当访问的路径下默认的主页面,将所有资源以列表的

                          方式呈献给用户,危险!!慎用!!!

                FollowSymlinks :跳跃符号链接

            2. AllowOverride

                支持在每个页面目录下创建

                htaccess用于实现对此目录中资源访问时的访问控制功能

        8、基于IP做访问控制

                Order allow,deny

                Deny from 192.168.1.122

                Allow from 192.168.1.1/24

              即只有192.168.1.122不能访问,其他能访问

        9、 定义默认的主页面

                DirectoryIndex

        10、配置日志功能

               ErrorLog "/path/to/error_log"

    LogLevel {debug|info|notice|warn|error|crit|alert|emerg}


    LogFormat 

    CustomLog "/path/to/access_log" LogFormat_Name


    %h: 客户端地址

    %l: 远程登录名,通常为-

    %u: 认证时输入用户名,没有认证时为-

    %t: 服务器收到 用户请求时的时间

    %r:请求报名的起始行

    %>s: 响应状态码

    %b: 响应报文的长度,单位是字节

    %{HEADER_NAME}i: 记录指定首部对应的值

        11、路径别名

                站点根目录:/var/www/html

               实现URL路径的映射,从而所访问的资源不再依赖于站点根目录

                    Alias /URL/path/to/somewhere/

        12、设定默认字符集

                   ASCII

                字符集:GB2312,GB18030,GBK

                    AddDefaultCharset

        13、CGI脚本

                /var/www/cgi-bin/

                    http://server/cgi-bim/


        14、基于用户访问控制

                用户认证

                    基本认证:Basic    

                    摘要认证:digest

                虚拟用户:仅用于访问某服务器或获取某资源的凭证;

                authentication provider:帐号和密码的存储机制;

                authorization provider:授权

            

                案例:基于文件做访问控制

                         (1) 基于用户进行认证 

                            <Directory "/var/www/html/admin">

    Options none

    AllowOverride AuthConfig

    AuthType Basic

    AuthName "Admin Area."

    #AuthBasicProvider file

    AuthUserFile /etc/httpd/conf/.htpasswd

    Require valid-user

    </Directory>


Require valid-user: 文件中所有用户均可访问

Require user USERNAME, ...


        (2) 提供认证文件

htpasswd

-c: 如果此文件事先不存在,则创建;注意,只能在

                                    创建第一个用户时使用

-m:以md5的格式编码存储用户的密码信息

-D:删除指定用户


        (3) 组认证

<Directory "/var/www/html/admin">

    Options none

    AllowOverride AuthConfig

    AuthType Basic

    AuthName "Admin Area."

    #AuthBasicProvider file

    AuthUserFile /etc/httpd/conf/.htpasswd

    AuthGroupFile /etc/httpd/conf/.htgroup

    Require group GROUP_NAME

</Directory>


组文件:

组名:user1 user2 user3

        15、虚拟主机

                基于端口

                基于IP

                基于主机名

            注意:使用虚拟主机时 注释主服务器的站点跟路径指定:DocumentRoot

                

                虚拟主机基本配置

NameVirtualHost IP:PORT


<VirtualHost IP:PORT>

ServerName 

DocumentRoot 

ServerAlias

ErrorLog

CustomLog

</VirtualHost>

            配置文件语法检查

                    httpd -t

                    service httpd configtest

            使用本机测试可以使用 elinks

                            -dump :获取到页面数据后直接退出进程

                    elinks -dump 【ip】


        16、https协议

                ssl(安全的套接字层),tls(传输层安全)

                    http协议:文本编辑

                    验证:使用telent发请求

                        telent 192.168.1.118

    

                httpd: ssl

ssl模块

单独成包


ssl会话基于IP地址创建,所以,每一个IP仅创建一个SSL会话;


ssl握手要完成的工作:

交换协议版本号

选择双方都支持的加密方式

客户端对服务器端实现身份验正

密钥交换


https协议: 基于SSL二进制编码, 443/tcp

openssl s_client 


客户端验正服务器端证书:

有效性检测:证书是否仍然在有效期内

CA的可信度检测:

证书的完整性检测:

持有者的身份检测


配置httpd工作于https:

(1) 安装mod_ssl模块

# yum install mod_ssl


(2) 为服务端生成私钥,并为其提供证书;

# mkdir /etc/httpd/ssl && cd /etc/httpd/ssl

# (umask 077; openssl genrsa -out httpd.key 1024)

# openssl req -new -key httpd.key -out httpd.csr


签署后的证书为:/etc/httpd/ssl/httpd.crt


(3) 配置使用https的虚拟主机;


SSLCertificateFile

SSLCertificateKeyFile


<VirtualHost IP:443>

DocumentRoot

ServerName

</VirtualHost>


(4) 重新装载配置

                (5) 测试

# openssl s_client -connect IP:PORT -CAfile /path/to/ca_certificate

        17、status页面

                    httpd内嵌有handler,其中有一个handler用于输出当前httpd服务

                        相关状态信息

                        handler: server-status

启用handler要使用SetHandler指令

                        handler: 当文件被调用时,apache内部表示形式;一般每

                                  种文件类型都有其隐式处理器

        18、 curl命令

                     curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, 

                FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支

                持HTTPS认证,并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,

                HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,

                上载文件断点续传,,http代理服务器管道( proxy tunneling), 甚至它还

                支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器

                等等,功能十分强大。


    curl的常用选项:

                -A/--user-agent <string> 设置用户代理发送给服务器

       -basic 使用HTTP基本认证

       --tcp-nodelay 使用TCP_NODELAY选项

       -e/--referer <URL> 来源网址

       --cacert <file> CA证书 (SSL)

       --compressed 要求返回是压缩的格式

       -H/--header <line>自定义头信息传递给服务器

       -I/--head 只显示响应报文首部信息

       --limit-rate <rate> 设置传输速度

       -u/--user <user[:password]>设置服务器的用户和密码

       -0/--http1.0 使用HTTP 1.0

        19、使用mod_defalate模块压缩也没优化传输速度

                SetOutputFilter

        

      # 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

 

# 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

        20、httpd程序包自带的工具介绍

                httpd:apache服务器程序

                        -t:测试配置文件

                        -l:列表静态模块

                        -D DUMP_MODULES列出DSO模块

                        -D DUMP_VHOSTS:列出所有虚拟主机

                htpasswd:

                      为基于文件的basic认证创建和更新用户认证文件

                apachectl:

                      脚本,httpd服务控制工具

                ab: apache benchmark

httpd的基准性能测试工具; 

                apxs: 

httpd得以扩展使用第三方模块的工具;

                htcacheclean: 

磁盘缓存清理工具;

                htdigest: 

为digest认证创建和更新用户认证文件

                httxt2dbm:

为rewrite map创建dbm格式的文件

                rotatelogs: 

不关闭httpd而切换其使用日志文件的工具

                        access_log, access_log.1, access_log.2,

                suexec:

User apache

Group apache

                        当httpd进程需要以另外的用户的身份去访问某些资源时,

                        可以以suexec作临时切换;

        21、ab工具的初步使用

                    同类工具:http_load, webbench, seige

                            Usage: ab [options] [http[s]://]hostname[:port]/path

                                  -c #: 模拟的并发数;

            -n #: 总的请求数

                                        -n的值一定要大于等于-c的值;

        22、资源限定

                软限定:可临时超出一定时长的上限

硬限定:绝对不可超出的上限

                    管理员可使用ulimit命令临时性地修改各种资源的软限制;

ulimit  -n #能同时打开的文件数

        -u #: 能同时启动的进程数

                    配置文件:

/etc/security/limits.conf

/etc/security/limits.d/*.conf

六、web服务器编译安装     

    1、检查依赖关系并安装相关软件包

        必安装"Development tools" "Development tools"

                pcre-devel-7.8-6.el6.x86_64

                pcre-7.8-6.el6.x86_64

                pcre-static-7.8-6.el6.x86_64

                apr-1.5.1.tar.bz2

                apr-util-1.5.3.tar.bz

        下载地址:http://archive.apache.org/dist/apr/

                  http://mirrors.cnnic.cn/apache//httpd/

    2、编译安装

            [root@90sec apr-1.5.1]# tar xf apr-1.5.1.tar.bz2 -C /usr/src/

            [root@90sec apr-1.5.1]# cd /usr/src/apr-1.5.1/

            [root@90sec apr-1.5.1]# ./configure --prefix=/usr/local/apr

            [root@90sec apr-1.5.1]# make && make install

            [root@90sec apr-util-1.5.3]# tar xf apr-util-1.5.3.tar.bz2 -C /usr/src/

            [root@90sec apr-util-1.5.3]# cd /usr/src/apr-util-1.5.3/

            [root@90sec apr-util-1.5.3]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

            [root@90sec apr-util-1.5.3]# make && make install

            [root@90sec httpd-2.4.10]# tar xf httpd-2.4.10.tar.bz2 -C /usr/src/

            [root@90sec httpd-2.4.10]# cd usr/src/httpd-2.4.10/

            [root@90sec httpd-2.4.10]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-mpms-shared=all --with-mpm=event --enable-modules=most

            [root@90sec httpd-2.4.10]# make && make install

                

            编译参数说明:

            --prefix=/usr/local/apache:指定安装路径

            --sysconfdir=/etc/httpd24:指定配置文件存放位置

            --enable-so:允许运行时加载DSO模块

            --enable-ssl: 提供对安全套接字层(SSL)和传输层安全(TLS)协议实现高强度加密传输

            --enable-cgi:提供对CGI脚本执行的支持

            --enable-rewrite:支持重写

            --with-zlib:是支持zlib库

            --with-pcre:启用正则表达式

            --with-apr=/usr/local/apr:如果你想使用一个已经存在的APR ,就必须在这里

                                        指定apr-config脚本的路径。

            --with-apr-util=/usr/local/apr-util/:如果你想使用一个已经存在的APU ,就必须在

                                                这里指定apu-config脚本的路径。

            --enable-modules=most:启用大多数常用模块。

            --enable-mpms-shared=all:启用MPM支持的所有模式。

            --with-mpm=event:设置默认MPM为event。

    编写二进制启动程序

             [root@90sec httpd-2.4.10]# vim /etc/profile.d/htttp.sh  

                                        export PATH=/usr/local/apache/bin:$PATH

             [root@90sec httpd-2.4.10]# source /etc/profile.d/htttp.sh

             [root@90sec httpd-2.4.10]# apachectl  启动web服务

    查看

            wKiom1PnMmvglKnOAAIhkDYfAE8611.jpg    

测试

    wKioL1PnM62iwRqFAAEO4VlSkXo903.jpg


七、设置基于用户认证和授权

            1、创建访问目录并编辑配置文件

                    [root@90sec /]# mkdir /usr/local/apache/htdocs/test

                    [root@90sec /]# vim /etc/httpd/httpd.conf 


wKioL1PnP7KytAhMAALZF1ILvw0075.jpg

  

  2、创建认证口令并添加用户

wKioL1PnQO-weS5oAAEu-9LHMCA562.jpg   

3、重启服务

wKioL1PnQSySd08tAAFxHq6tK58526.jpg


4、客户端测试

wKioL1PnQYXTzd0QAAF4Z1hAtsM668.jpg

wKiom1PnQGyAT_F_AAFoUAibvfM943.jpg


八、基于https的配置

    1、安装mod_ssl模块

        [root@90sec ~]# yum -y install mod_ssl

        [root@90sec ~]# rpm -ql mod_ssl

      2、创建CA,并生成自签证书


wKiom1PnZ4rQ_BbSAAF7_1NX0-Q203.jpg

wKiom1PnZ3LBkIFUAAOZJXvduCw055.jpg


3、为web服务生成私钥,并为其提供证书


wKiom1PnavDB5k-ZAAHuwnjlO3U969.jpgwKiom1Pnj1SgMWHlAAOQdoii4mU692.jpg


 4、修改配置文件

        [root@90sec httpd]# vim /etc/httpd/conf.d/ssl.conf 


wKioL1Pnb4CzJdHaAAEv27Uymxo408.jpg


wKiom1PnbnWgC0EsAAMCoD9F3QY462.jpg


修改本地host文件



wKioL1PnhA_jJ4dXAAKvnJX8fn4902.jpg


客户端测试


wKioL1PnkcOg_mhaAAHJfOc7Z4A650.jpg


把证书导入客户端


wKiom1PnkO-xMxv0AAcEqrczszs431.jpg


九、基于域名的虚拟主机

    1、需要用到的文件提前创建好并修改配置文件

            配置前执行

               [root@90sec http]# setenforce 0

                [root@90sec http]# iptables -F

                [root@90sec http]# service iptables stop

                iptables: Setting chains to policy ACCEPT: filter          [  OK  ]

                iptables: Flushing firewall rules:                         [  OK  ]

                iptables: Unloading modules:                               [  OK  ]

               [root@90sec ~]# vim /etc/httpd/conf/httpd.conf

            #DocumentRoot "/var/www/html"   注释掉

wKioL1Pnh7SilVdiAAGnYn8IM1k282.jpg


 2、重启服务,客户端测试

    

wKioL1Pnh9ySYcKjAAWvQnpCMBM880.jpg

wKiom1PnhsPC3MWVAAEynSwkq7U082.jpg