httpd基础

时间:2019-05-11 09:47来源:计算机教程
hpptd 前言 这篇主要介绍HTTP服务程序环境 可能有一些介绍不到,博主能力有限,欢迎大神来纠正改进 HTTP协议从http/0.9到如今的http/2.0中间发生了很大的改变,现在主流的事http/1.1 在很多

hpptd

前言

这篇主要介绍HTTP服务程序环境

可能有一些介绍不到,博主能力有限,欢迎大神来纠正改进

HTTP协议从http/0.9到如今的http/2.0中间发生了很大的改变,现在主流的事http/1.1

图片 1

在很多面试当主就会问起http协议各个版本的不同之处,这里就不介绍它们之间的区别了,有想要了解的可以百度下,面试的时候看下

HTTP工作机制:
http请求:http request
http响应:http response
一次http事务:请求<-->响应

在上篇中基本简单说了下https://www.cnblogs.com/xsuid/p/9451811.html

http服务器程序:
       httpd apache
       nginx
       lighttpd

http服务器应用

http服务器程序
httpd
apache
nginx
lighttpd

应用程序服务器
IIS .asp
tomcat .jsp
jetty 开源的servlet容器,基于Java的web容器
Resin CAUCHO公司,支持servlets和jsp的引擎
webshpere(IBM), weblogic(BEA), jboss,oc4j(Oracle)

市场占有率统计 www.netcraft.com

httpd
20世纪90年代初,国家超级计算机应用中心NCSA开发
1995年开源社区发布apache(a patchy server)
ASF: apache software foundation
FSF:Free Software Foundation
特性:
高度模块化:core modules
DSO: Dynamic Shared Object 动态加/卸载
MPM:multi-processing module多路处理模块(支持多种I/O模型)

Httpd介绍

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

httpd:

20世纪90年代初,国家超级计算机应用中心NCSA开发

httpd功能特性

虚拟主机:一个物理服务器搭建多个网站
IP、Port、FQDN
CGI:Common Gateway Interface,通用网关接口
(网关:连接不同网段、不同协议之间的通信)
反向代理
负载均衡
路径别名
丰富的用户认证机制
basic
digest
支持第三方模块

特性:

高度模块化:core modules

DSO: Dynamic Shared Object 动态加/卸载

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

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

MPM工作模式

Httpd 2.2常见配置

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

prefork:

1、多进程I/O模型,每个进程响应一个请求,默认模型

2、个主进程:生成和回收n个子进程,创建套接字,不响应请求

3、多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个

如图:

图片 2

httpd配置文件的组成:

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

worker:

1、复用的多进程I/O模型,多进程多线程,IIS使用此模型

2、一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n

如图:

图片 3

配置格式

directive value
directive: 不区分字符大小写
value: 为路径时,是否区分大小写,取决于文件系统

event:

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

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

如图:

图片 4

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

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

HTTP安装

2、修改监听IP,Port端口

Listen [IP:]PORT

(1) 省略IP表示为0.0.0.0;

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

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

版本

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

CentOS 7:默认2.4版本

3、持久连接

关键字:KeepAlive
Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接 。一个TCP三次握手建立连接以后,每个资源获取完成以后不会立即断开连接,超过定义的超时时间或者超过传输的资源个数,才会断开连接状态。

断开条件:
数量限制:100
时间限制:以秒为单位, httpd-2.4 支持毫秒级 副作用:对并发访问量较大的服务器,持久连接功能会使用有 些请求得不到响应
折衷:使用较短的持久连接时间

设置: KeepAlive On|Off
KeepAliveTimeout 15 #设置超时时间
MaxKeepAliveRequests 100 #设置一次连接请求资源数量

测试:
telnet WEB_SERVER_IP PORT
GET /URL HTTP/1.1
Host: WEB_SERVER_IP

安装方式

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

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

4、MPM( Multi-Processing Module)多路处理模块

prefork, worker, event(试验阶段)
httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现 对不同MPM机制的支持
确认方法:
ps aux | grep httpd
默认为/usr/sbin/httpd, 即prefork模式

查看模块列表
查看静态编译的模块 httpd -l

[root@CentOS6 ~]#httpd -l |grep 'prefork'
  prefork.c     #表示正在使用的模块prefork.c

查看静态编译及动态装载的模块 httpd –M
动态模块加载:不需重启即生效
动态模块路径 /usr/lib64/httpd/modules/

更换使用的httpd程序
/etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker #默认该行被注释
重启服务生效
pstree -p|grep httpd 查看进程和线程

Httpd 2.4 与之不同 以动态模块方式提供
配置文件:/etc/httpd/conf.modules.d/00-mpm.conf
httpd –M |grep mpm
重启服务生效
pstree -p|grep httpd 查看进程和线程

prefork的默认配置: 在主配置文件中
关键字:MPM

worker的默认配置:

HTTP-CentOS 7程序环境

5、DSO: Dynamic Shared Object

关键字:LoadModule
加载动态模块配置
/etc/httpd/conf/httpd.conf
配置指定实现模块加载格式:
LoadModule <mod_name> <mod_path>
模块文件路径可使用相对路径:
相对于ServerRoot(默认/etc/httpd)
模块文件路径:/etc/http/modules
添加模块可以在主配置文件中直接添加,也可以按照相应的格式在/etc/httpd/conf.d/目录下单独配置,便于管理

新版本2.4特性

MPM支持运行为DSO机制;以模块形式按需加载

event MPM生产环境可用

异步读写机制

支持每模块及每目录的单独日志级别定义

每请求相关的专用配置

增强版的表达式分析式

毫秒级持久连接时长定义

基于FQDN的虚拟主机不需要NameVirutalHost指令

新指令,AllowOverrideList

支持用户自定义变量

更低的内存消耗

6、定义'Main' server的文档页面路径

关键字:DocumentRoot “/path”
文档路径映射:
DocumentRoot指向的路径为URL路径的起始位置
示例: DocumentRoot "/app/data"
http://HOST:PORT/test/index.html
--> /app/data/test/index.html
注意:SELinux和iptables的状态
/etc/httpd/conf.d/welcome.conf 文件定义了当用户访问页面不存在,也就是出现403错误时默认跳转的页面。

配置文件:

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

7、定义站点主页面

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

检查配置语法:

httpd –t
service httpd configtest

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

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

模块相关的配置文件:

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

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

systemd unit file:

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

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
参考帮助:
http://httpd.apache.org/docs/2.2/mod/mod_log_config .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”的值;即发出请求的应用程序

主程序文件:

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

11、设定默认字符集

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

日志文件:

/var/log/httpd
access_log:访问日志
error_log:错误日志

12、定义路径别名

格式: Alias /URL/ "/PATH/"
DocumentRoot "/www/htdocs" http://www.huxiaoqi.com/download/bash.rpm ==>/www/htdocs/download/bash.rpm
Alias /download/ "/rpms/pub/" http://www.huxiaoqi.com/download/bash.rpm ==>/rpms/pub/bash.rpm http://www.huxiaoqi.comlogo.png ==>/www/htdocslogo.png

站点文档:

/var/www/html

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和用户验证,有一个满足即可

模块文件路径:

/usr/lib64/httpd/modules

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>

服务控制:

systemctl enable|disable httpd.service
systemctl {start|stop|restart|status} httpd.service

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中显示服务器详细信息

查看模块列表

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

查看静态编译的模块

httpd -l

请求报文

图片 5

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

httpd –M

HTTP响应报文

图片 6

动态模块加载:不需重启即生效

动态模块路径
/usr/lib64/httpd/modules

图片 7

报文语法格式

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:请求时附加的数据或响应时附加的数据

Httpd 2.4常见配置

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

http协议首部

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

首部的分类:

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

2、修改监听的IP和Port

1) 省略IP表示为本机所有IP

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

示例:

Listen 192.168.1.100:8080

Lsten 80

通用首部:

Date: 报文的创建时间
Connection:连接状态,如keep-alive, close
Via:显示报文经过的中间节点(代理,网关)
Cache-Control:控制缓存,如缓存时长
MIME-Version:发送端使用的MIME版本

3、持久连接

Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接
断开条件:数量限制:100

       时间限制:以秒为单位, httpd-2.4 支持毫秒级

副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应

折衷:使用较短的持久连接时间

请求首部:

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

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

设置:

KeepAlive On|Off
KeepAliveTimeout 15
MaxKeepAliveRequests 100

条件式请求首部

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

编辑:计算机教程 本文来源:httpd基础

关键词: