HTTP协议

一、http协议

1.1http相关概念

  • 互联网:是网络的网络,是所有类型网络的母集

  • 因特网:世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上,大家把连接在因特网上的计算机都成为主机。

  • 万维网:WWW(world wide web)万维网并非某种特殊的计算机网络,是一个大规模的、联机式的信息贮藏库,使用链接的方法能非常方便地从因特网上的一个站点访问另一个站点(超链技术),具有提供分布式服务的特点。万维网是一个分布式的超媒体系统,是超文本系统的扩充,基于B/S架构实现

  • URL:万维网使用统一资源定位符(Uniform Resource Locator)来标志万维网上的各种文档,并使每个文档在整个因特网的范围内具有唯一的标识符URL。

  • HTTP:为解决"用什么样的网络协议来实现整个因特网上的万维网文档”这一难题,就要使万维网客户程序(以浏览器为主,但不限于浏览器)与万维网服务器程序之间的交互遵守严格的协议,即超文本传送协议(HyperText Transfer Protocol)。HTTP是处于应用层的协议,使用TCP传输层协议进行可靠的传送。因此,需要特别提醒的是,万维网是基于因特网的一种广泛因特网应用系统,且万维网采用的是HTTP(80/TCP)和 HTTPS(443/TCP)的传输协议,但因特网还有其他的网络应用系统(如:FTP、SMTP等等)。

  • HTML:为了解决"怎样使不同作者创作的不同风格的万维网文档,都能在因特网上的各种主机上显示出来,同时使用户清楚地知道在什么地方存在着链接”这一问题,万维网使用超文本标记语言(HyperText Markup Language),使得万维网页面的设计者可以很方便地用链接从页面的某处链接到因特网的任何一个万维网页面,并且能够在自己的主机品目上将这些页面显示出来。HTML与txt一样,仅仅是是一种文档,不同之处在于,这种文档专供于浏览器上为浏览器用户提供统一的界面呈现的统一规约。且具备结构化的特征,这是txt所不具备的强制规定。

1.2常见http服务器程序

  • httpd apache,存在C10K(10K connections)问题

  • nginx 解决C10K问题lighttpd

  • IIS .asp 应用程序服务器

  • tomcat .jsp 应用程序服务器

  • jetty 开源的servlet容器,基于Java的web容器

  • Resin CAUCHO公司,支持servlets和jsp的引擎

  • webshpere:IBM公司

  • weblogic:BEA,Oracle

  • jboss:RedHat,IBM

  • oc4j:Oracle

1.3apache介绍和特点

20世纪90年代初,美国国家超级计算机应用中心NCSA开发,1995年开源社区发布apache

apache 名字来源,流传最广的解释是(也是最显而易见的):这个名字来自于一个事实:当Apache在1995年初开发的时候,它是由当时最流行的HTTP服务器NCSA HTTPd 1.3的代码修改而成的,因此是"一个修补的(a patchy)”服务器。然而,在Apache服务器官方网站的FAQ中是这么解释的:"Apache这个名字是为了纪念名为Apache的美洲原住民印第安人的一支,众所周知他们拥有高超的作战策略和无穷的耐性。”贝伦多夫说:"我选择阿帕奇这个名字是取其积极含义。阿帕奇族是最后一个屈服于美国政府的民族。当时我们担心大公司迟早会参与竞争并‘教化’这块最早的网络之地,所以在我看来,阿帕奇是个很好的名称,也有人说这个词一语双关-因为正如Apache(与"a patchy"谐音)的名字所表明的那样,他们确实是在给服务器打补丁。”

apache官网: www.apache.org

软件基金会

  • ASF:apache software foundation

  • FSF:Free Software Foundation

apache 功能:

  • 提供http协议服务

  • 多个虚拟主机:IP、Port、FQDN

  • CGI:Common Gateway Interface,通用网关接口,支持动态程序

  • 反向代理

  • 负载均衡

  • 路径别名

  • 丰富的用户认证机制:basic,digest

  • 支持第三方模块

apache特性:

  • 高度模块化:core + modules

  • DSO:Dynamic Shared Object 动态加载/卸载

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

1.4MPM multi-processing module 工作模式

prefork:多进程I/O模型,每个进程响应一个请求,CentOS 7 httpd默认模型一个主进程:生成和回收n个子进程,创建套接字,不响应请求多个子进程:工作 work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求

Prefork MPM预派生模式,有一个主控制进程,然后生成多个子进程,每个子进程有一个独立的线程响应用户请求,相对比较占用内存,但是比较稳定,可以设置最大和最小进程数,是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景

优点:稳定

缺点:慢,占用资源,不适用于高并发场景

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

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

worker MPM是一种多进程和多线程混合的模型,有一个控制进程,启动多个子进程,每个子进程里面包含固定的线程,使用线程程来处理请求,当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求,由于其使用了线程处理请求,因此可以承受更高的并发。

优点:相比prefork 占用的内存较少,可以同时处理更多的请求

缺点:使用keep-alive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。(该问题在prefork模式下,同样会发生)

event:事件驱动模型(worker模型的变种),CentOS8 默认模型

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

event MPM是Apache中最新的模式,2012年发布的apache 2.4.X系列正式支持event 模型. 属于事件驱动模型(epoll),每个进程响应多个请求,在现在版本里的已经是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力event只在有数据发送的时候才开始建立连接,连接请求才会触发工作线程,即使用了TCP的一个选项,叫做延迟接受连接TCP_DEFER_ACCEPT,加了这个选项后,若客户端只进行TCP连接,不发送请求,则不会触发Accept操作,也就不会触发工作线程去干活,进行了简单的防攻击(TCP连接)

优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放

缺点:没有线程安全控制

1.5httpd-2.4相关文件

配置文件:

  • /etc/httpd/conf/httpd.conf 主配置文件

  • /etc/httpd/conf.d/*.conf 子配置文件

  • /etc/httpd/conf.d/conf.modules.d/ 模块加载的配置文件

检查配置语法:httpd -t 或 apache2 -t

服务单元文件:

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

  • 配置文件:/etc/sysconfig/httpd

服务控制和启动

  • systemctl enable|disable httpd.service

  • systemctl {start|stop|restart|status|reload} httpd.service

  • apachectl start|stop|restart|configtest

  • service httpd start|stop|restart|configtest

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

模块文件路径:

  • /etc/httpd/modules

  • /usr/lib64/httpd/modules

主服务器程序文件:/usr/sbin/httpd

二、配置虚拟机

httpd 支持在一台物理主机上实现多个网站,即多虚拟主机

网站的唯一标识:

  • IP相同,但端口不同

  • IP不同,但端口均为默认端口

  • FQDN不同, IP和端口都相同

多虚拟主机有三种实现方案:

  • 基于ip:为每个虚拟主机准备至少一个ip地址

  • 基于port:为每个虚拟主机使用至少一个独立的port

  • 基于FQDN:为每个虚拟主机使用至少一个FQDN,请求报文中首部 Host:www.kgc.com

2.1基于IP的虚拟主机

1.设置虚拟IP

2.编辑配置文件

[root@localhost ~]# vim /etc/httpd/conf.d/test.conf
--------------------------------------------------------------

<VirtualHost 172.16.18.6>
    ServerAdmin support@jfedu.net
    DocumentRoot "/opt/html/6"
    ServerName www.accp.com
    ErrorLog "logs/6_error_log"
    CustomLog "logs/6_access_log" common
</VirtualHost>

<VirtualHost 172.16.18.10>
    ServerAdmin support@jfedu.net
    DocumentRoot "/opt/html/10"
    ServerName www.accp.com
    ErrorLog "logs/10_error_log"
    CustomLog "logs/10_access_log" common
</VirtualHost>


<Directory "/opt/html">
    # Allow open access:
    Require all granted
</Directory>
 

2.2基于端口地址

listen 9527

<VirtualHost 172.16.18.6:80>
    ServerAdmin support@jfedu.net
    DocumentRoot "/opt/html/6"
    ServerName www.accp.com
    ErrorLog "logs/6_error_log"
    CustomLog "logs/6_access_log" common
</VirtualHost>

<VirtualHost 172.16.18.6:9527>
    ServerAdmin support@jfedu.net
    DocumentRoot "/opt/html/10"
    ServerName www.accp.com
    ErrorLog "logs/10_error_log"
    CustomLog "logs/10_access_log" common
</VirtualHost>


<Directory "/opt/html">
    # Allow open access:
    Require all granted
</Directory>
 

2.3基于域名

1.修改httpd配置文件

listen 9527

<VirtualHost 172.16.18.6>
    ServerAdmin support@jfedu.net
    DocumentRoot "/opt/html/6"
    ServerName www.xzq.com
    ErrorLog "logs/6_error_log"
    CustomLog "logs/6_access_log" common
</VirtualHost>

<VirtualHost 172.16.18.6>
    ServerAdmin support@jfedu.net
    DocumentRoot "/opt/html/10"
    ServerName www.cyq.com
    ErrorLog "logs/10_error_log"
    CustomLog "logs/10_access_log" common
</VirtualHost>


<Directory "/opt/html">
    # Allow open access:
    Require all granted
</Directory>
 

2.写域名

三、HTTPD常见配置

3.1指定服务器名

[root@centos7 ~]#httpd -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain 
name, using centos7.localdomain. Set the 'ServerName' directive globally to 
suppress this message
Syntax OK
[root@centos7 ~]#vim /etc/httpd/conf/httpd.conf
#ServerName www.example.com:80
servername www.magedu.org 
[root@centos7 ~]#httpd -t
Syntax OK

3.2监听地址

写在子配置文件也可以

3.3隐藏服务器版本信息

写入命令,进行隐藏信息

3.4持久连接

 

3.5DSO

3.6修改默认的站点目录

3.7alias别名

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-21 00:50:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-21 00:50:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-21 00:50:02       82 阅读
  4. Python语言-面向对象

    2024-02-21 00:50:02       91 阅读

热门阅读

  1. 前端开发框架推荐总结二

    2024-02-21 00:50:02       41 阅读
  2. Nginx是什么?怎么用?

    2024-02-21 00:50:02       59 阅读
  3. rust-learn

    2024-02-21 00:50:02       52 阅读
  4. 数据结构——时间复杂度

    2024-02-21 00:50:02       51 阅读
  5. 【前端】Vue中引入excel模板并下载以及XLSX使用

    2024-02-21 00:50:02       47 阅读
  6. KeepAlived搭建高可用的HAproxy负载均衡集群系统

    2024-02-21 00:50:02       55 阅读
  7. 有一台阿里云轻量应用服务器可以用来做什么?

    2024-02-21 00:50:02       70 阅读
  8. linux部署File Browser文件管理系统

    2024-02-21 00:50:02       44 阅读
  9. Nginx笔记

    2024-02-21 00:50:02       43 阅读
  10. linux: pushd、popd与dirs用法详解

    2024-02-21 00:50:02       48 阅读
  11. leetcode经典题库(简单)

    2024-02-21 00:50:02       43 阅读
  12. stable-cascade 文生图模型diffusers使用案例

    2024-02-21 00:50:02       47 阅读
  13. mybatis概念

    2024-02-21 00:50:02       64 阅读
  14. JDK1.8之后的版本变更

    2024-02-21 00:50:02       41 阅读
  15. TypeConverter学习

    2024-02-21 00:50:02       56 阅读