HTTP:HypeText Transfer Protocol:超文本传输协议

URI:Uniform Resource Indentifier:统一资源标识符


状态代码:

1xx    纯信息

2xx    成功类的信息(200)

3xx    重定向类的信息(301,302,304)

4xx    客户端错误类的信息(404)

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


web服务器的主要操作

1、建立连接-接受或拒绝客服端连接请求

2、接受请求-通过网络读取HTTP请求报文

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

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

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

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

7、记录日志-当已经完成的HTTP事物记录进日志文件


报文的第一行通常称作报文起始行,后面标签格式的内容称作首部域,每个首部域都有名称和值组成,中间用逗号分隔。响应报文通常还有一个称作Body的信息主体,即响应给客服端的内容


httpd:

    web server,开源软件

    事先创建进程

    按需维护适当的进程

    模块设计,核心比较小,各种功能都模块添加

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

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

        socket:IP:Port

        虚拟主机:

            基于IP的虚拟主机

            基于端口的虚拟主机

            基于域名的虚拟主机

    支持https协议

    支持用户认证

    支持基于IP或主机名的ACL

    支持每目录的访问控制

    支持URL重写


httpd:

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

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

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

        主配置文件:httpd.conf

        /etc/httpd/conf.d/*.conf

    /etc/httpd/modules    模块目录

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

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

    /var/www/

        html    静态页面

        cgi-bin    动态

            cgi:common gateway interface通用网关接口

httpd安装

yum -y install httpd


MPM:mutil path modules

    mpm_winnt

    prefork(一个请求用一个进程响应)

    worker(一个请求用一个线程响应,启动多个进程,每个进程生成多个线程)

    event(一个进程处理多个请求)


/etc/httpd/httpd.conf

Options    选项

    None:不支持任何选项

    Indexes:允许索引目录

    FollowSymLinks:允许访问符号连接指向的源文件

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

    SymLinksifOwnerMatch:

    ExecCGI:允许执行CGI脚本

    MultiViews:多功能视图

    All:支持所有选项

AllowOverride:允许覆盖 #服务器访问列表

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

    Order allow,deny    #除了allow之外的都deny
    Allow from all

AllowOverride AuthConfig:用户认证访问机制

    AuthType Basic    基本用户认证

    AuthName ""    显示名字

    AuthUserFile "/etc/httpd/conf/htpasswd"    用户的帐号密码文件

    AuthGroupFile /etc/httpd/conf/htpgroup    组的文件

    Require user username    只有这个用户才能访问

    Require group

    Require valid-user    所有的用户都可以访问

例如添加用户

        AllowOverride AuthConfig
        AuthType Basic
        AuthName "身份验证"
        AuthUserFile "/etc/httpd/conf/htpasswd"
        Require valid-user

添加组

    AuthGropuFile "/etc/httpd/conf/group"

    vim /etc/httpd/conf/group

        group:tom jerry


htpasswd -c -m /etc/httpd/conf/htpasswd

    -c    第一次创建,之后再创建不需要加-c

    -m    以MD5加密方式存放

DirectoryIndex:索引,默认访问页面    

AccessFileName:一个目录的访问权限,一般要禁用

ErrorLog:错误日志

LogLevel:日志级别

LogFormat:日志格式

    %h    客户端地址

    %l     远程用户登录名称,大多数都是”-“

    %u    登录网站时候的用户

    %t    日志产生的时间

    %r    请求报文第一行,“方法,资源,版本号”

    %s    状态码

    %b    响应报文的内容大小

    %{Referer}i    你从哪个页面来

    %{User-agent}i    浏览器类型

CustomLog:访问日志

Alias:路径别名


虚拟主机:

apache服务:服务于多个不同的站点

要使用虚拟主机,必须先注释中心主机的DocumentRoot

虚拟主机的定义

<VirtualHost HOST>

</VirtualHost>

基于IP的HOST写法

    IP1:80

    IP2:80

基于端口

    IP:80

    IP:8080

基于域名

    *:80

ServerName不同

下例四种不同的虚拟主机及验证

[root@localhost conf.d]# vim Virtual.conf

NameVirtualHost 192.168.1.202:80


<VirtualHost 192.168.1.201:80>
        ServerName a.com
        DocumentRoot /www/a.com
        CustomLog /var/log/a.com/access_log combined
        ErrorLog /var/log/a.com/error.log
</VirtualHost>

<VirtualHost 192.168.1.202:80>
        ServerName b.com
        DocumentRoot /www/a.org
        CustomLog /var/log/b.com/access_log combined
        <Directory "/www/a.org/">
                Options none
                AllowOverride authconfig
                AuthType basic
                AuthName "Restrict area"
                AuthUserFile "/www/htpasswd"
                Require valid-user
        </Directory>
</VirtualHost>

<VirtualHost 192.168.1.202:80>
        ServerName d.com
        DocumentRoot /www/d.com
        CustomLog /var/log/d.com/access_log combined
        ErrorLog /var/log/d.com/error_log
        <Directory "/www/d.com">
                Options none
                AllowOverride none
                Order deny,allow
                Deny from 192.168.1.102
        </Directory>
</VirtualHost>

<VirtualHost 192.168.1.201:8080>
        ServerName c.com
        DocumentRoot /www/c.com
</VirtualHost>

    

设定默认虚拟主机

<VirtualHost _default_:80>

DocumentRoot /www/default80

#...

</VirtualHost>


<Location /status>    定义URL,开放server-status

    SetHandler server-status    执行一个动作

    Order Deny,allow

    Deny from all

    Allow from .example.com


基于openssl的https服务配置

yum install mod_ssl

在证书CA服务器上

cd /etc/pki/CA

(umask 077;openssl genrsa -out private/ca.key 2048)

vim /etc/pki/tls/openssl.cnf

openssl req -new -x509 -key private/ca.key -out cacert.pem -days 3655

mkdir certs newcerts crl

touch index.txt serial

echo 01 > serial

切换到客户端服务器上

cd /etc/pki/CA

(umask 077;openssl genrsa -out private/ca.key 2048)

vim /etc/pki/tls/openssl.cnf

openssl req -new -x509 -key private/ca.key -out cacert.pem -days 3655

mkdir certs newcerts crl

touch index.txt serial

echo 01 > serial

openssl req -new -key server.key -out server.csr

然后把server.csr发给CA服务器上

切换CA服务器

openssl ca -keyfile ca.key -in server.csr -out server.pem

然后再把server.pem传给客户端服务器

切换客户端服务器

vim /etc/httpd/conf.d/ssl.conf

SSLCertificateFile /etc/httpd/ssl/server.crt

SSLCertificateKeyFile /etc/httpd/ssl/ca.key

service httpd restart