常用配置

检查配置语法:

httpd –t
service httpd configtest

http协议

http协议:stateless 无状态
服务器无法持续追踪访问者来源
解决http协议无状态方法
cookie :
重cookie:服务器将用户的所有的用户信息以文本文件的形式记录下来封装生成cookie信息和一个唯一编号保留下来,然后将cookie通过http协议发送给客户端,客户端将收到了cookie保存在磁盘当中。客户端每次访问服务器都会在请求报文中携带自己的cookie上传给服务器,服务器通过cookie信息来确认用户的信息并且每次访问都会更新,添加cookie信息。这种方法有两个缺点,一个是每次用户访问网站都会上传自己的cookie信息,占用了大量的网络带宽增加了服务器负担。此外由于cookie信息保留在客户端的原因,也就以为这同一个用户如果换一台电脑去访问同样的网站,该用户的用户信息还是无法被服务器识别。所以目前,重cookie这种方式比较落后很少应用。
轻cookie:轻cookie相比重cookie的区别在于,轻量级的cookie不再存放用户的所有用户信息,而是给每个用户生成一个ID,根据用户每次访问携带的ID来进行身份确认,同时配合session将用户的用户信息与ID匹配并存放在服务器的磁盘和内存中,以此来弥补重cookie的缺陷。
session 服务端存放
http事务:一次访问的过程
请求:request
响应:response

基于FQDN(主机头)实现

说明:想要主机名访问必须使用DNS解析或hosts文件解析

在这我们写到hosts文件中

vim /etc/hosts

图片 1

1、编辑配置文件

vim /etc/httpd/conf.d/texe.conf



<virtualhost *:80>
documentroot /data/web2
servername www.b.com
<directory /data/web2>
require all granted
</directory>
ErrorLog "logs/b_error_log" #错误日志分开
CustomLog "logs/b_access_log" combined #访问日志分开
</virtualhost>

<virtualhost *:80>
documentroot /data/web3
servername www.c.com
<directory /data/web3>
require all granted
</directory>
ErrorLog "logs/c_error_log"
CustomLog "logs/c_access_log" combined
</virtualhost>

<virtualhost *:80>
documentroot /data/web1
servername www.a.com 
ServerAlias  a.com *.a.com #别名也就是泛域名
<directory /data/web1>
require all granted
</directory>
ErrorLog "logs/a_error_log"
CustomLog "logs/a_access_log" combined
</virtualhost>

2、重启服务并测试

图片 2

备注:如果用IP地址访问,那么配置文件中谁靠前谁就是默认地址

hpptd

8、自定义日志格式

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 [options] [URL…]

选项:
-A/–user-agent

event:

1、事件驱动模型(worker模型的变种)

2、一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力

如图:

图片 3

备注:MPM模式也是面试中常问的问题

https实现

(1) 为服务器申请数字证书
测试:通过私建CA发证书
​ (a) 创建私有CA
​ (b) 在服务器创建证书签署请求
​ (c) CA签证

(2) 配置httpd支持使用ssl,及使用的证书
yum -y install mod_ssl
配置文件:/etc/httpd/conf.d/ssl.conf
​ DocumentRoot #主站点目录,默认会从httpd主配置文件全局设定获取
​ ServerName
​ SSLCertificateFile
​ SSLCertificateKeyFile

(3) 测试基于https访问相应的主机 openssl s_client [-connect host:port]
[-cert filename] [CApath directory] [-CAfile filename]

实验:实现HTTPS,HSTS
一、实验部署:
使用三台虚拟机,一台提供DNS服务和CA,一台提供httpd服务,一台验证客户端
二、部署DNS服务:
在第一台服务器安装BIND实现DNS服务
编辑主配置文件,允许验证客户端机器访问查询

[root@CentOS6 ~]#vim /etc/named.conf
options {
        listen-on port 53 { localhost; };
        #设置本机所有IP都对53端口监听
        allow-query     { 172.18.45.7; };
        #允许验证客户端查询本机的DNS服务,只修改必要项即可
};

在区域配置文件中添加要解析的域

[root@CentOS6 ~]#vim /etc/named.rfc1912.zones 
zone "huxiaoqi.com" IN {
        type master;
        file "huxiaoqi.com.zone";
};

配置解析库文件:

[root@CentOS6 ~]#vim /var/named/huxiaoqi.com.zone
$TTL 86400      ; 1 day
@   IN   SOA    dns1.huxiaoqi.com. rname.invalid. (
                                1          ; serial
                                86400      ; refresh (1 day)
                                3600       ; retry (1 hour)
                                604800     ; expire (1 week)
                                10800      ; minimum (3 hours)
                                )
                        NS      dns1.huxiaoqi.com.
dns1                    A       172.18.45.6
www                     A       172.18.45.61
#添加A记录,将域名为www.huxiaoqi.com的IP地址解析为提供httpd服务的服务器IP地址:172.18.45.61

将验证客户端机器的DNS指向DNS服务器172.18.45.6

[root@CentOS7 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0 
#DNS1=172.18.0.1
DNS2=172.18.45.6
#注意:如果该机器之前已经设置了DNS服务器,那么需要注释掉之前配置的DNS服务器,否则系统默认使用第一个DNS服务器去解析FQDN,如果第一台DNS服务器不能解析该FQDN系统也不会去调用另外一台DNS服务器,除非第一台DNS服务器宕机系统才会主动去调用DNS2.

三、搭建CA颁发证书:
(一)创建所需要文件
touch /etc/pki/CA/index.txt 生成证书索引数据库文件
echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号

(二)CA自签证书

  1. 生成私钥
    cd /etc/pki/CA/
    (umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

    [root@CentOS6 CA]#(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
    Generating RSA private key, 2048 bit long modulus
    ...........................+++
    e is 65537 (0x10001)
    # -out /etc/pki/CA/private/cakey.pem 必须按照配置文件指定目录以及文件名 
    
  2. 生成自签名证书
    openssl req -new -x509 –key
    /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem

    [root@CentOS6 CA]#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 7300
      -key /etc/pki/CA/private/cakey.pem私钥位置
      -out /etc/pki/CA/cacert.pem自签名证书的位置以及文件名
      -req -new: 生成新证书签署请求 
      -x509: 专用于CA生成自签证书 
      -key: 生成请求时用到的私钥文件 
      -days n:证书的有效期限 
      -out /PATH/TO/SOMECERTFILE: 证书的保存路径
    

(三)颁发证书

  1. 在需要使用证书的主机生成证书请求给web服务器生成私钥
    (umask 066; openssl genrsa -out /etc/pki/tls/private/test.key 2048)

    [root@CentOS7 certs]#(umask 066;openssl genrsa -out /etc/pki/tls/private/app.key 2048)
    -out /etc/pki/CA/private/app.key #指定生成私钥位置、文件名
    
  2. 利用私钥生成证书申请文件
    openssl req -new -key /etc/pki/tls/private/test.key -days 365 -out
    etc/pki/tls/test.csr

    [root@CentOS7 tls]#openssl req -new -key /etc/pki/tls/private/app.key -days 365 -out /etc/pki/tls/app.csr
    -key /etc/pki/tls/private/app.key   #自己的私钥
    -out /etc/pki/tls/app.csr           #申请书的位置以及文件名
    
  3. 将证书请求文件传输给CA

  4. CA签署证书,并将证书颁发给请求者
    openssl ca -in /tmp/test.csr –out /etc/pki/CA/certs/test.crt -days
    365

    [root@CentOS6 CA]#openssl ca -in /etc/pki/CA/app.csr -out /etc/pki/CA/certs/app.crt
    -out /etc/pki/CA/certs/app.crt 生成证书的文件名以及路径
    

    四、配置httpd支持使用ssl,及使用的证书
    安装httpd,然后准备一个测试的默认页面,开启服务:

    [root@Centos6 ~]#vim /var/www/html/index.html 
    hello,world
    hahahahahahaha
    

    使用浏览器访问效果如下:
    图片 4

配置ssl:
首先安装httpd的ssl模块:yum -y install mod_ssl
然后编辑ssl配置文件:/etc/httpd/conf.d/ssl.conf
这里需要准备三个文件,CA的自签名证书、httpd服务器的私钥以及httpd服务的证书,在ssl的配置文件中指明这三个文件的所在位置,为了方便管理建议将这三个文件存放在一起,比如直接在/etc/httpd/conf.d,目录下创建一个ssl目录存放这三个文件。

[root@Centos6 ssl]#tree
.
├── app.crt
├── app.key
└── cacert.pem

编辑/etc/httpd/conf.d/ssl.conf 文件:

[root@Centos6 ~]#vim /etc/httpd/conf.d/ssl.conf 
SSLCertificateFile /etc/httpd/conf.d/ssl/app.crt
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/app.key
SSLCACertificateFile /etc/httpd/conf.d/ssl/cacert.pem
#取消注释这三项并指明对应文件的对应位置

https在ssl.conf中默认定义监听443端口

[root@Centos6 ssl]#ss -tnl
State    Recv-Q Send-Q  Local Address:Port Peer Address:Port 
LISTEN   0      128              :::80            :::*     
LISTEN   0      128              :::443           :::*     
#端口开启说明配置没有错误

重启httpd服务
再次使用浏览器访问加密模式的httpd服务效果如下:
图片 5

五、在浏览器中导入证书信任
证书导入受信以后的浏览效果:
图片 6

至此就可以说httpd服务实现了https,但是访问时需要用户手动输入https属性,不能自动跳转。
六、实现HSTS:
在/etc/httpd/conf.d/目录下创建独立的hsts配置文件并编辑:

[root@Centos6 ~]#vim /etc/httpd/conf.d/hsts.conf
Header always set Strict-Transport-Security "maxage=15768000"
RewriteEngine on 
RewriteRule ^(/.*)$  https://%{HTTP_HOST}$1 [redirect=301]

编辑完成以后,重读配置文件,在次访问直接输入网址就能实现https的自动跳转了

查看静态编译及动态装载的模块

httpd –M

HTTP响应报文

图片 7

特性:

高度模块化:core + modules

DSO: Dynamic Shared Object 动态加/卸载

MPM:multi-processing module多路处理模块

9、

(1) Options:后跟1个或多个以空白字符分隔的选项列表
在选项前的+,- 表示增加或删除指定选项
常见选项:
Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户
(当用户访问的URL不存在index文件时是否显示一个目录页面)
FollowSymLinks:允许访问符号链接文件所指向的源文件
None:全部禁用
All: 全部允许
示例:

[root@CentOS6 ~]#vim /etc/httpd/conf.d/test.conf
<Directory /var/www/html/test>  #受控目录
Options -Indexes        #不允许返回目录索引
Options -FollowSymLinks #不允许访问软链接文件
</Directory>

(2) AllowOverride
与访问控制相关的哪些指令可以放在指定目录下的
.htaccess(由AccessFileName指定)文件中,覆盖之前的配置指令
.htaccess:在指定目录中创建该文件,只控制该目录的访问
只对

(3) order和allow、deny
放在directory, .htaccess中
order:定义生效次序;写在后面的表示默认法则
Order allow,deny
Order deny,allow
Allow from, Deny from
IP (四种写法)
网络:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
示例:

<files "*.txt">             #控制所有*.txt文件
order deny,allow 
deny from 172.16.100.100    #拒绝该IP访问所有以.txt结尾的文件
allow from 172.16
</files>
allow,DENY DENY,ALLOW
ONLY ALLOW ALLWO ALLOW
ONLY DENY DENY DENY
BOTH DENY ALLOW
NONE DENY ALLOW

1、版本号修改

备注:要是别人查询到你的网站事用http那个版本,是不是不好,容易利用版本漏洞进行攻击,所以让他不显示版本号

1、首先得有个主页,在这我就随便创建个index.httml

echo /var/www/html/index.html > /var/www/html/index.html

2、我们先来看一下没有进行版本设置时候得情况,在67主机上

curl -I 192.168.43.57

图片 8

版本信息一目了然

3、在服务器端(57)隐藏版本信息设置

cd /etc/httpd/conf.d/
vim texe.conf

备注:写在主配置文件里也可,推荐写在以上目录下,方便来管理,主配置文件中标记了/conf.d/目录,写在/conf.d/目录下得配置优先生效

ServerTokens Prod
# 写入

systemctl restart httpd

systemctl reload httpd

#重启服务最好用reload

4、再次测试验证

图片 9

OK

MPM工作模式

prefork:多进程I/O模型,每个进程响应一个请求,默认模型
一个主进程:生成和回收n个子进程,创建套接字,不响应请求
多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024(系统中默认并发进程数)个

worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型
一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n

event:事件驱动模型(worker模型的变种)
一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力
httpd-2.2: event 测试版, centos6默认
httpd-2.4:event 稳定版,centos7默认

16、http跳转到https

说明:当我们输入 “www.a.com”
自动跳转到””

1、修改配置文件

[root@centos7_05 conf.d]# vim texe.conf



RewriteEngine on  #启动这个引擎
rewritecond %{SERVER_PORT} !^443 #条件跳转--如果不是443的时候我就进行跳转
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301] #这是跳转规则

2、重启测试

图片 10

条件式请求首部

Expect:允许客户端列出某请求所要求的服务器行为
If-Modified-Since:自从指定的时间之后,请求的资源是否发生过修改
If-Unmodified-Since:与上面相反
If-None-Match:本地缓存中存储的文档的ETag标签是否与
服务器文档的Etag不匹配
If-Match:与上面相反

安全域:

需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因

实体首部:

Allow: 列出对此资源实体可使用的请求方法
Location:告诉客户端真正的实体位于何处
Content-Encoding:对主体执行的编码
Content-Language:理解主体时最适合的语言
Content-Length: 主体的长度
Content-Location: 实体真正所处位置
Content-Type:主体的对象类型,如text 缓存相关:
ETag:实体的扩展标签
Expires:实体的过期时间
Last-Modified:最后一次修改的时间

模块相关的配置文件:

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

1、显示服务器版本信息

关键字:ServerTokens
ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
ServerTokens Prod[uctOnly] :Server: Apache
ServerTokens Major: Server: Apache/2
ServerTokens Minor: Server: Apache/2.0
ServerTokens Min[imal]: Server: Apache/2.0.41
ServerTokens OS: Server: Apache/2.0.41 (Unix)
ServerTokens Full (or not specified): Server: Apache/2.0.41 (Unix)
PHP/4.2.2 MyMod/1.2

This setting applies to the entire server and cannot be enabled or
disabled on a virtualhost-by-virtualhost basis. After version 2.0.44,
this directive also controls the information presented by the
ServerSignature directive.
建议使用:ServerTokens Prod(安全考虑不显示太详细的版本信息)

[root@CentOS6 ~]#curl -I 172.18.45.6
HTTP/1.1 200 OK
Date: Fri, 29 Sep 2017 01:42:20 GMT
Server: Apache/2.2.15 (CentOS)  #修改之前
Server: Apache      #修改结果
Last-Modified: Sat, 05 Aug 2017 11:36:50 GMT
ETag: "1a015f-3a-55600078b343c"
Accept-Ranges: bytes
Content-Length: 58
Connection: close
Content-Type: text/html; charset=UTF-8

Httpd 2.4常见配置

备注:在这我用两台主机进行实验,分别是:192.168.43.57、192.168.43.67,57当http服务器,67当客户端,首先yum安装HTTP服务器

首部的分类:

通用首部
请求首部
响应首部
实体首部
扩展首部

访问日志

1、定义日志格式:

LogFormat "%h %l %u %{%Y-%m-%d %H:%M:%S}t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" testlog

备注:根据环境需求来定义

2、使用日志格式:

CustomLog "logs/access_log" testlog

参考帮助:

man 3 strftime

13、基于用户的访问控制

认证质询:WWW-Authenticate:响应码为401,拒绝客户端
请求,并说明要求客户端提供账号和密码

认证:Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源

认证方式两种:
basic:明文
digest:消息摘要认证,兼容性差

安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因

用户的账号和密码
虚拟账号:仅用于访问某服务时用到的认证标识
存储:文本文件,SQL数据库,ldap目录存储,nis等

basic认证配置示例:

(1) 定义安全域

<Directory “/path"> 
    Options None 
    AllowOverride None 
    AuthType Basic          #验证类型
    AuthName "String“       #提示符
    AuthUserFile  "/PATH/HTTPD_USER_PASSWD_FILE" 
    Require  user  username1  username2 ... 
</Directory> 

允许账号文件中的所有用户登录访问:
Require valid-user

(2) 提供账号和密码存储(文本文件)
使用专用命令完成此类文件的创建及用户管理
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
-c:自动创建文件,仅应该在文件不存在时使用
-m:md5格式加密,默认方式
-s: sha格式加密
-D:删除指定用户

[root@CentOS6 ~]#vim /etc/httpd/conf.d/test.conf
<Directory /var/www/html/test>
authtype basic
authname "hehe"
authuserfile "/etc/httpd/conf.d/.httpusers"
require user hehe 
</Directory>

基于组账号进行认证

(1) 定义安全域

<Directory “/path"> 
    AuthType Basic 
    AuthName "String“ 
    AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE" 
    AuthGroupFile "/PATH/HTTPD_GROUP_FILE" 
    Require  group  grpname1  grpname2 ... 
</Directory> 

(2) 创建用户账号和组账号文件;
组文件:每一行定义一个组
GRP_NAME: username1 username2 …
这里无论是用户还是组都是对于httpd服务来说的,与的用户与组linux无关

远程客户端和用户验证的控制
Satisfy ALL|Any
ALL 客户机IP和用户验证都需要通过才可以
Any客户机IP和用户验证,有一个满足即可

版本

CentOS 6:默认2.2版本(官方以停止支持)

CentOS 7:默认2.4版本

mod_deflate(压缩)模块

使用mod_deflate模块压缩页面优化传输速度
适用场景:

(1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持

(2) 压缩适于压缩的资源,例如文本文件

配置文件写法:
LoadModule deflate_module modules/mod_deflate.so #加载模块
SetOutputFilter DEFLATE #启动压缩功能
# 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 只压缩text/html
BrowserMatch ^Mozilla/4 gzip-only-text/html
Netscape 4.06-08三个版本 不压缩
BrowserMatch ^Mozilla/4.0[678] no-gzip
Internet Explorer标识本身为“Mozilla /
4”,但实际上是能够处理请求的压缩。如果用户代理首部匹配字符串
“MSIE”(“B”为单词边界”),就关闭之前定义的限制
BrowserMatch bMSI[E] !no-gzip !gzip-onlytext/html

基于IP地址实现

1、在物理机上增加三个IP地址

ip a a 192.168.43.101/24 dev ens33
ip a a 192.168.43.102/24 dev ens33
ip a a 192.168.43.103/24 dev ens33

2、修改配置文件

vim /etc/httpd/conf.d/texe.conf



<virtualhost 192.168.31.101:80>
documentroot /data/web1
servername www.a.com
<directory /data/web1>
require all granted
</directory>
</virtualhost>

<virtualhost 192.168.31.102:80>
documentroot /data/web2
servername www.b.com
<directory /data/web2>
require all granted
</directory>
</virtualhost>

<virtualhost 192.168.31.103:80>
documentroot /data/web3
servername www.c.com
<directory /data/web3>
require all granted
</directory>
</virtualhost>

3、重启服务并测试

图片 11

11、设定默认字符集

关键字:AddDefaultCharset UTF-8
中文字符集:GBK, GB2312, GB18030

结语:后续更精彩

httpd配置文件的组成:

[root@CentOS6 ~]$ grep "Section" /etc/httpd/conf/httpd.conf              #主配置文件
Section 1: Global Environment           #全局环境设置
Section 2: 'Main' server configuration  #主服务器配置
Section 3: Virtual Hosts                #虚拟主机

安装方式

rpm:centos发行版,稳定,建议使用
编译:定制或特殊需求

备注:后面会介绍编译安装—-

http重定向https

将http请求转发至https的URL
重定向
Redirect [status] URL-path URL
status状态:
Permanent(永久跳转):Returns a permanent redirect status (301)
indicating that the resource has moved permanently
Temp(临时跳转):Returns a temporary redirect status (302). This is the
default
示例:
Redirect temp /
#将原有的网站根目录跳转到加密的访问页面
这种跳转的方式比较简单,但是性能还有优化空间。利用这种跳转方式,用户访问未加密页面的时,首先服务器会返回给客户端一个信息,告诉客户端要访问的页面已经跳转,并返回跳转的地址。然后客户端再向跳转的页面发送访问请求。这样用户每次访问都会重复以上步骤,影响效率。HSTS技术则可以有效优化此步骤。

基于端口实现

分别对应8001、8002、8003

1、编辑配置文件

vim /etc/httpd/conf.d/texe.conf



listen 8001  #端口
listen 8002  #
listen 8003  #
<virtualhost *:8001> #定义
documentroot /data/web1 #主站点
servername www.a.com 
<directory /data/web1> #定义授权
require all granted # 都授权
</directory>
</virtualhost>

<virtualhost *:8002>
documentroot /data/web2
servername www.b.com
<directory /data/web2>
require all granted
</directory>
</virtualhost>

<virtualhost *:8003>                                                                                                          
documentroot /data/web3
servername www.c.com
<directory /data/web3>
require all granted
</directory>
</virtualhost>

2、重启服务

3、测试

图片 12

报文语法格式

request报文

response报文

method: 请求方法,标明客户端希望服务器对资源执行的动作
GET、HEAD、POST等
​ GET:从服务器获取一个资源
​ HEAD:只从服务器获取文档的响应首部
​ POST:向服务器输入数据,通常会再由网关程序继续处理
​ PUT:将请求的主体部分存储在服务器中,如上传文件
​ DELETE:请求删除服务器上指定的文档
​ TRACE:追踪请求到达服务器中间经过的代理服务器
​ OPTIONS:请求服务器返回对指定资源支持使用的请求方法

协议查看或分析的工具: tcpdump, wireshark,tshark

version: 服务器版本
HTTP/

status: 状态码,三位数字,如200,301, 302, 404, 502;
标记请求处理过程中发生的情况
status(状态码): 面试考点
​ 1xx:100-101 信息提示
​ 2xx:200-206 成功
​ 3xx:300-305 重定向
​ 4xx:400-415 错误类信息,客户端错误
​ 5xx:500-505 错误类信息,服务器端错误
​ 200: 成功,请求数据通过响应报文的entity-body部分发送;OK
​ 301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部
Location指明了资源现在所处的新位置;Moved Permanently永久跳转
​ 302: 响应报文Location指明资源临时新位置 Moved Temporarily
​ 304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变
,则通过响应此响应状态码通知客户端;Not Modified
​ 401: 需要输入账号和密码认证方能访问资源;Unauthorized
​ 403: 请求被禁止;Forbidden
​ 404: 服务器无法找到客户端请求的资源;Not Found
​ 500: 服务器内部错误;Internal Server Error
​ 502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad
Gateway
​ 503 – 服务不可用,临时服务器维护或过载,服务器无法处理请求
​ 504 – 网关超时

reason-phrase: 状态码所标记的状态的简要描述

headers:
每个请求或响应报文可包含任意个首部;每个首部都有首部名称,后面跟一个冒号,而后跟一个可选空格,接着是一个值

entity-body:请求时附加的数据或响应时附加的数据

6、定义站点主页面

默认是找index.html文件最为主页得,也可更改把以下代码加入texe.conf配置文件就可

DirectoryIndex index.php 
# 值可以是多个。找步到第一个找第二个

请求报文

图片 13

Httpd介绍

响应首部:

信息性: Age:从最初创建开始,响应持续时长
Server:服务器程序软件名称和版本
协商首部:某资源有多种表示方法时使用
Accept-Ranges:服务器可接受的请求范围类型
Vary:服务器查看的其它首部列表
安全响应首部: Set-Cookie:向客户端设置cookie Set-Cookie2: 以上面相似
WWW-Authenticate:来自服务器对客户端的质询列表

12、ServerSignature On | Off | EMail

说明:

当客户请求的网页并不存在时,服务器将产生错误文档,缺省情况下由于打开了
ServerSignature选项,错误文档的最后一行将包含服务器的名字、Apache的版本等信息

如果不对外显示这些信息,就可以将这个参数设置为Off

设置为Email,将显示ServerAdmin 的Email提示

httpd自带的工具程序

httpd自带的工具程序
htpasswd:basic认证基于文件实现时,用到的账号密码文件生成工具

apachectl:httpd自带的服务控制脚本,支持start和stop

apxs:httpd-devel包提供,扩展httpd使用第三方模块工具

rotatelogs:日志滚动工具
access.log –> access.log, access.1.log –> access.log,
acccess.1.log, access.2.log

suexec:访问某些有特殊权限配置的资源时,临时切换至指 定用户身份运行

HTTP-CentOS 7程序环境

14、虚拟主机

站点标识: socket
IP相同,但端口不同
IP不同,但端口均为默认端口
FQDN不同;
请求报文中首部
Host: www.huxiaoqi.com

有三种实现方案:
基于ip:为每个虚拟主机准备至少一个ip地址
基于port:为每个虚拟主机使用至少一个独立的port
基于FQDN:为每个虚拟主机使用至少一个FQDN
注意:一般虚拟机不要与main主机混用;因此,要使用虚拟主机,
一般先禁用main主机
禁用方法:注释中心主机的DocumentRoot指令即可

虚拟主机配置方法:

<VirtualHost IP:PORT>
    ServerName FQDN 
    DocumentRoot “/path" 
</VirtualHost> 

建议:上述配置存放在独立的配置文件中
其它可用指令:
ServerAlias:虚拟主机的别名;可多次使用
ErrorLog: 错误日志
CustomLog:访问日志
<Directory “/path”>

Alias
基于IP的虚拟主机示例:

<VirtualHost 172.16.100.6:80> 
    ServerName www.a.com 
    DocumentRoot "/www/a.com/htdocs" 
</VirtualHost> 

<VirtualHost 172.16.100.7:80> 
    ServerName www.b.net 
    DocumentRoot "/www/b.net/htdocs" 
</VirtualHost> 

<VirtualHost 172.16.100.8:80> 
    ServerName www.c.org 
    DocumentRoot "/www/c.org/htdocs" 
</VirtualHost>

基于端口的虚拟主机:
可和基于IP的虚拟主机混和使用

listen 808 
listen 8080 
<VirtualHost 172.16.100.6:80> 
    ServerName www.a.com 
    DocumentRoot "/www/a.com/htdocs" 
</VirtualHost> 

<VirtualHost 172.16.100.6:808> 
    ServerName www.b.net 
    DocumentRoot "/www/b.net/htdocs" 
</VirtualHost> 

<VirtualHost 172.16.100.6:8080> 
    ServerName www.c.org 
    DocumentRoot "/www/c.org/htdocs" 
</VirtualHost>

基于FQDN的虚拟主机示例:

[root@CentOS6 ~]#vim /etc/httpd/conf.d/test.conf 
  1 NameVirtualHost *:80
  2 <VirtualHost *:80> 
  3         servername www.huxiaoqi.com
  4         DocumentRoot "/app/www.huxiaoqi.com/"
  5 </VirtualHost>
  6 
  7 <VirtualHost *:80> 
  8         servername mile.huxiaoqi.com
  9         DocumentRoot "/app/mile.huxiaoqi.com/"
 10 </VirtualHost>
 11 
 12 <VirtualHost *:80> 
 13         servername zhengzhou.huxiaoqi.com
 14         DocumentRoot "/app/zhengzhou.huxiaoqi.com/"
 15 </VirtualHost>

HTTP安装

代理请求首部:

Proxy-Authorization: 向代理服务器认证

查看模块列表

https

https:http over ssl

主程序文件:

/usr/sbin/httpd
httpd-2.4支持MPM的动态切换

Httpd 2.2常见配置

修改配置文件之前,先备份

http协议常用的状态码

200: 成功,请求数据通过响应报文的entity-body部分发送;OK

301:
请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved
Permanently

302: 响应报文Location指明资源临时新位置 Moved Temporarily

304:
客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not
Modified

401: 需要输入账号和密码认证方能访问资源;Unauthorized

403: 请求被禁止;Forbidden

404: 服务器无法找到客户端请求的资源;Not Found

500: 服务器内部错误;Internal Server Error

502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad
Gateway

503 – 服务不可用,临时服务器维护或过载,服务器无法处理请求

504 – 网关超时

请求首部:

Accept:通知服务器自己可接受的媒体类型
Accept-Charset: 客户端可接受的字符集
Accept-Encoding:客户端可接受编码格式,如gzip
Accept-Language:客户端可接受的语言

Client-IP: 请求的客户端IP
Host: 请求的服务器名称和端口号
Referer:跳转至当前URI的前一个
URL User-Agent:客户端代理,浏览器版本

systemd unit file:

/usr/lib/systemd/system/httpd.service

httpd安装

版本:
CentOS 6: 2.2
CentOS 7: 2.4
安装方式:
rpm:centos发行版,稳定,建议使用
编译:定制或特殊需求
CentOS 6
程序环境:httpd-2.2

配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf

检查配置语法:
httpd –t
service httpd configtest

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

脚本配置文件:
/etc/sysconfig/httpd

服务控制和启动:
chkconfig httpd on|off service
{start|stop|restart|status|configtest|reload} httpd

站点网页文档根目录: /var/www/html

模块文件路径:
/etc/httpd/modules
/usr/lib64/httpd/modules

主程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.worker
/usr/sbin/httpd.event

主进程文件:
/etc/httpd/run/httpd.pid

[root@CentOS6 run]#cat httpd.pid 
2367
#服务启动时自动创建,存放服务的主进程编号
#当服务停止文件自动删除

日志文件目录:
/var/log/httpd access_log: 访问日志
error_log:错误日志

帮助文档包: httpd-manual(yum下载httpd的官方文档)
下载完成以后,重新加载服务配置文件,通过浏览器访问本机的IP/manual目录。
配置文件目录树:

[root@CentOS6 ~]#tree /etc/httpd
/etc/httpd
├── conf
│   ├── httpd.conf
│   └── magic
├── conf.d
│   ├── mod_dnssd.conf
│   ├── README
│   └── welcome.conf
├── logs -> ../../var/log/httpd
├── modules -> ../../usr/lib64/httpd/modules
└── run -> ../../var/run/httpd

2、更改主目录

1)首先创建目录

mkdir /data/website -pv

2)创建index.html首页

echo /data/website/index.html > /data/website/index.html

3)设置配置文件

vim /etc/httpd/conf.d/texe.conf

图片 14

DocumentRoot "/data/website"
<Directory "/data/website">
Require all granted
</Directory>

4)重启服务

5)测试

图片 15

注意:SELinux和iptables的状态

7、定义站点主页面

关键字:DirectoryIndex
DirectoryIndex index.html index.html.var

17、使用mod_deflate模块压缩页面优化传输速度

适用场景:

(1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持

(2) 压缩适于压缩的资源,例如文本文件

1、编辑配置文件

vim /etc/httpd/conf.d/texe2.conf



AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
DeflateCompressionLevel 9
SetOutputFilter DEFLATE

2、重启测试

15、status页面

模块:LoadModule status_module modules/mod_status.so

<Location /server-status> 
SetHandler server-status 
Order allow,deny 
Allow from 172.16 
</Location> 
#定义的URL:/server-status不是固定不变的,可以更改

主配置文件中添加:ExtendedStatus On
在server-status中显示服务器详细信息

15、实现https加密访问

说明:要是你的网站涉及到“¥”那么就必须加https加密访问

生产中是向CA机构花钱申请的,在这里我们自己搭建一个CA服务器,我们用67当CA服务器

1、CA服务器端(67)安装yum包

yum install mod_ssl

2、httpd服务器申请证书

cd /etc/pki/CA

1)生成私钥

(umask 077;openssl genrsa -out private/cakey.pem 2048)

2)自签名

openssl req -new -x509 -key private/cakey.pem -out cacert.pem

3)CA主机创建目录

touch index.txt
echo 01 > serial
#存放序列号

4)在57HTTP服务器主机创建目录来存放证书与私钥并生产自己的私钥

cd /etc/httpd/conf.d/
# 在这个目录下创建存放目录
mkdir ssl

[root@centos7_05 ssl]# (umask 077;openssl genrsa -out heepd.key 2048)

5)57HTTP主机生成请求

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

图片 16

6)CA服务器给HTTP颁发证书

备注:把57主机生成的申请文件scp传送给CA主机

scp httpd.csr 192.168.43.67:/etc/pki/CA/

CA给HTTP签名

openssl ca -in httpd.csr -out certs/httpd.csr
#颁发证书

7)把HTTP的证书和CA的证书传送到(57)HTTP服务器

scp certs/httpd.csr cacert.pem 192.168.43.57:/etc/httpd/conf.d/ssl/

8)修改ssl.cof配置文件

[root@centos7_05 conf.d]# vim ssl.conf

图片 17

9)重启服务测试

图片 18

图片 19

图片 20

安全请求首部:

Authorization:向服务器发送认证信息,如账号和密码
Cookie: 客户端向服务器发送cookie
Cookie2:用于说明请求端支持的cookie版本

基于组验证

示例:
<Directory "/www/htdocs/admin">
 Options None
 AllowOverride None
 AuthType Basic
 AuthName "Administator private"
 AuthUserFile "/etc/httpd/conf.d/.htpasswd"
 AuthGroupFile "/etc/httpd/conf.d/.htgroup"
 Require group g1
</Directory>

创建用户

和上面创建方法一样

给用户分组

图片 21

备注:

在/etc/httpd/conf.d目录下创建

ctrl+D结束

备注:

远程客户端和用户验证的控制

Satisfy ALL|Any

ALL 客户机IP和用户验证都需要通过才可以

Any客户机IP和用户验证,有一个满足即可

2、修改监听IP,Port端口

Listen [IP:]PORT

(1) 省略IP表示为0.0.0.0;

(2) Listen指令至少一个,可重复出现多次 Listen 80 Listen 8080

(3) 修改监听socket,重启服务进程方可生效

9、设定默认字符集

AddDefaultCharset UTF-8
中文字符集:GBK, GB2312, GB18030

10、日志设定

日志类型:
​ 访问日志
​ 错误日志

错误日志:
​ ErrorLog logs/error_log
​ LogLevel warn loglevel 可选值:
​ debug, info, notice, warn,error crit, alert, emer

访问日志:
定义日志格式:LogFormat format strings
LogFormat “%h %l %u %t “%r” %>s %b “%{Referer}i” “%{User-Agent}i””
combined

使用日志格式:
CustomLog logs/access_log combined
参考帮助:
.html#formats

%h 客户端IP地址
%l 远程用户,启用mod_ident才有效,通常为减号“-”
%u 验证(basic,digest)远程用户,非登录访问时,为 一个减号“-”
%t 服务器收到请求时的时间
%r First line of
request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本
%>s 响应状态码
%b 响应报文的大小,单位是字节;不包括响应报文http首部
%{Referer}i
请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的
%{User-Agent}i 请求报文中首部“User-Agent”的值;即发出请求的应用程序

10、定义路径别名

意思是说:

当用户访问192.168.43.57/data目录时,出现的数据不在website/data目录下,其实是在/website/app/stud目录下

实现方式:

Alias /data  /app/stud

备注:别忘了授权文件夹

<Directory "/app/stud">
Require all granted
</Directory>

重启服务

8、站点访问控制常见机制

可基于两种机制指明对哪些资源进行何种访问控制
访问控制机制有两种:客户端来源地址,用户账号
文件路径:

<Directory  “/path">    #对于本地目录的访问控制
...         
</Directory> 
<File  “/path/file”>    #对于本地文件的访问控制
... 
</File> 
<FileMatch "PATTERN">   #对于匹配文件的访问控制
... 
</FileMatch>

RUL路径:

<Location  "">                  #对于URL的访问控制
... 
</Location> 
<LocationMatch "">              #对于匹配的URL的访问控制
... 
</LocationMatch>

示例:

<FilesMatch ".(gif|jpe?g|png)$"> 
<Files “?at.*”>  通配符 
<Location /status> 
<LocationMatch "/(extra|special)/data">

通配符匹配比较消耗服务器的性能,客户端每次请求资源都会对资源进行比较,降低了服务器的性能,定义的规则越复杂服务器的维护也不会越难

发表评论

电子邮件地址不会被公开。 必填项已用*标注