重生之我要学后端10--Web服务器类型及基础知识(持续更新)

Web服务器类型及其基础知识

  • 一、简介
  • 二、Apache HTTP Server
  • 三、Nginx
  • 四、处理客户端请求的过程
  • 五、web服务器和应用服务器
    • 5.1Web服务器
    • 5.2应用服务器
    • 5.3它们之间的区别
    • 5.4实际使用
    • 5.5他们和我们的后端应用是什么关系

一、简介

不同类型的服务器软件有各自的特点和优势,它们通常用作处理HTTP请求的应用程序。Apache和Nginx是两个非常流行的Web服务器,我们来看看它们是如何工作的:

二、Apache HTTP Server

Apache是一个老牌的、开源的Web服务器软件,它以其强大的功能、灵活性、模块化设计而著称。Apache的工作机制如下:

  • 多进程/多线程:Apache可以配置为使用预先生成的(预分配的)进程或线程来响应请求。这意味着它会在需要时创建一定数量的子进程或线程,并且每个子进程或线程能够独立处理一个客户端请求。其中一种叫做prefork的多进程方式,每个进程只处理一个请求;另一种叫做worker或event的方式,每个进程可以包含多个线程,每个线程处理一个请求。

  • 模块化结构:Apache的另一个特色是它的模块化架构,允许开发者使用模块来扩展服务器的功能。例如,有SSL模块支持HTTPS,有rewrite模块支持URL重写等。

  • .htaccess文件:Apache允许在服务器配置文件外部使用.htaccess文件进行目录级别的配置。这提供了一种方便的方式来改变配置,无需访问主服务器配置文件,也不需要重启服务器。

由于Apache创建进程或线程来处理新连接,因此在高并发情况下可能会消耗较多内存和计算资源。

三、Nginx

Nginx是一个相对较新的开源Web服务器软件,它以其轻量级和高性能而闻名,尤其适合处理静态内容、负载均衡和反向代理。Nginx的工作原理如下:

  • 事件驱动架构:Nginx采用了异步、非阻塞的事件驱动模型。它通常使用单主进程和多个工作进程,每个工作进程都能同时处理成千上万的连接。工作进程中的事件循环不断检查是否有新的事件(比如新的连接、数据读写就绪等),然后相应地处理这些事件。

  • 高并发连接处理:由于Nginx的工作进程是非阻塞的,并且一个工作进程能够处理多个连接,所以Nginx在高并发场景下表现很好,内存和CPU的使用率都相对较低。

  • 反向代理和负载均衡:Nginx经常被用作反向代理服务器和负载均衡器,它能够将客户端请求转发到后端的多个服务器,并根据配置的策略分配请求。

Nginx没有像Apache那样的.htaccess文件支持,但是它的配置文件被认为更易于理解和管理。Nginx的配置通常要求修改主配置文件,并可能需要重启服务来使更改生效。

四、处理客户端请求的过程

当客户端发送HTTP请求到Web服务器时,无论是Apache还是Nginx,处理过程通常会遵循以下步骤:

  • 监听请求:服务器在指定端口(通常是80或443)上监听传入的请求。

  • 接收请求:服务器接收到客户端请求后,根据请求的URI确定请求的目标资源。

  • 处理请求:服务器根据请求方法(GET, POST等)和其他相关信息处理请求。这可能涉及调用额外的模块来处理PHP、Python等脚本语言,或直接提供静态资源。

  • 生成响应:服务器生成相应的HTTP响应消息,这可能包括请求的文件、错误消息或其他数据。

  • 发送响应:服务器将响应发送回客户端,完成与该请求相关的交互。

不同服务器软件之间的主要区别在于它们如何设置来处理这些请求,以及它们如何利用系统资源来优化性能。选择哪种Web服务器软件取决于具体的应用场景、性能要求以及个人喜好。

五、web服务器和应用服务器

Web服务器和应用服务器是两个相互关联但又有区别的概念,它们在现代Web架构中都扮演着重要的角色。

5.1Web服务器

Web服务器主要处理HTTP请求,用于提供网页内容(如HTML、CSS、JavaScript文件)给用户。当浏览器向服务器发送HTTP请求时,Web服务器负责接收该请求,并根据请求内容返回静态资源或者将请求转发到后端的应用服务器。流行的Web服务器软件包括:

Nginx
Apache HTTP Server
Microsoft IIS

这些Web服务器也可以进行简单的动态内容处理,比如通过PHP模块运行PHP脚本,但它们在设计上更优化于处理静态内容、管理安全连接(SSL/TLS)、负载均衡和反向代理功能。

5.2应用服务器

应用服务器则是专门用于运行和管理后端业务逻辑的软件平台。它为应用程序提供了创建、运行和管理企业级应用所需的复杂服务和功能。应用服务器通常支持事务管理、数据库连接池、消息队列等企业级特性,以及多种编程语言和框架的集成。一些知名的应用服务器包括:

Java EE平台的应用服务器,如Wildfly(之前称为JBoss)、Websphere、GlassFish
Microsoft .NET Framework的IIS
Node.js 作为JavaScript的应用服务器环境
应用服务器通常负责动态页面生成、业务逻辑执行、数据库交互等任务,并且能够处理各种不同类型的请求,如SOAP或RESTful Web服务。

5.3它们之间的区别

  • 功能范围:Web服务器主要是为了提供Web内容和实施HTTP协议,而应用服务器提供更多的业务逻辑处理和后端服务。

  • 协议支持:Web服务器主要处理HTTP/HTTPS请求,而应用服务器支持多种协议,包括HTTP, RPC, EJB, JMS等。

  • 内容类型:Web服务器更擅长于提供静态内容和处理轻量级的动态内容,应用服务器则提供动态内容,例如JSP、ASP.NET、NodeJS应用程序。

集成能力:应用服务器通常提供了更深层次的应用集成,例如与消息传递系统、企业服务总线(ESB)和事务监控器等的整合。

5.4实际使用

在实际部署中,Web服务器和应用服务器经常被组合使用。Web服务器作为请求的接收点,负责初步处理请求,然后将需要动态处理的请求传递给应用服务器。应用服务器处理完业务逻辑后,再将结果返回给Web服务器,最后由Web服务器响应给客户端。

这样的结构可以充分利用Web服务器的高效静态内容服务和安全性,同时也能利用应用服务器的强大动态内容生成和业务逻辑处理能力。

5.5他们和我们的后端应用是什么关系

您的后端应用通常是指由您或者您的团队编写的代码,它实现了业务逻辑、数据处理、数据库交互等功能。这个应用需要运行在一个服务器环境中以便能够接收和响应客户端的请求。

而Web服务器和应用服务器则为您的后端应用提供了运行的环境和基础设施支持。下面是它们与您的后端应用之间的关系:

Web服务器
Web服务器可以作为您的后端应用的门户,主要扮演以下角色:

  • 请求分发器:接收来自客户端的HTTP请求,并根据规则将请求静态资源直接响应,或者转发动态内容请求给后端应用。

  • 安全层:提供SSL/TLS加密,确保数据传输的安全性。

  • 缓存代理:缓存后端应用生成的内容,减少对后端应用的重复调用,提高响应速度。

  • 负载均衡器:在多个后端应用副本之间分配请求,以实现高可用性和可伸缩性。

应用服务器
应用服务器则是支持后端应用执行的平台,其作用包括:

  • 运行容器:为后端应用提供了运行时环境,允许应用程序加载和执行。

  • 服务集成:集成了诸如事务管理、消息队列、数据库连接池等企业级服务。

  • 业务逻辑处理器:执行应用中编写的业务逻辑代码,如用户认证、数据处理等。

  • 中间件:作为客户端和数据资源(如数据库)之间的中介,简化了数据访问和业务逻辑的编写。

后端应用
您开发的后端应用利用了应用服务器提供的运行时环境和服务来执行业务逻辑,并可能通过Web服务器来和用户的前端进行交互。具体来说:

  • 您的代码部署在 应用服务器上,在此环境中运行。
  • Web服务器接收到HTTP请求时,它会根据配置规则决定是否将请求转发给您的后端应用。
  • 您的应用处理请求,进行必要的业务逻辑操作,并返回结果。
  • 若设置了Web服务器,它可以将应用返回的结果再发送给客户端。

综合来看,Web服务器和应用服务器为我们的后端应用提供了必要的网络和安全架构、性能优化和其他中间件服务。总而言之,它们使得我们的后端应用能够专注于核心业务逻辑,同时又能够以安全、高效和稳定的方式与外界沟通。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/861742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用k8s变更线上版本号

第一步,在镜像仓库中找到历史版本号 第二步,在rancher中在工作负载里 第三步,在rancher找到这个版本号,可以更改之前的版本号 这样就可以很方便的退回到之前的版本了

Django安装与启动

1、Django是什么? 基于python的Web开发框架,支持用户快速开发安全、可维护的网站 2、怎么安装? pip install Django4.2 3、如何启动? 不写ip和端口时候,默认启动http://127.0.0.1:8000/ python .\manage.py runse…

AI时代的量化金融:ChatGPT在交易中的应用与前景

文章目录 📑前言一、智能量化:开启金融新世界二、作者简介三、本书特色四、适读人群 在数字化、智能化的时代浪潮中,金融领域正经历着一场前所未有的变革。传统的金融分析方法逐渐被高效、精准的量化金融与算法交易所替代,而人工智…

【知识】详细介绍 CUDA Samples 示例工程

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 内容较多,可通过 左侧或右侧 的 目录 进行跳转。 CUDA 是“Compute Unified Device Architecture (计算统一设备架构)”的首字母缩写。CUDA…

面试专区|【68道JQuery高频题整理(附答案背诵版)】

1.Ajax是同步还是异步,简述Ajax的流程? Ajax(Asynchronous JavaScript and XML)是异步的。它允许在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。Ajax 的流程通常如下: 创建 XMLHttpR…

x264 码率控制 MBtree 原理:i_propagate_cost计算过程

x264 码率控制 MBtree 原理 关于x264 码率控制中 MBtree 算法的原理具体可以参考:x264 码率控制MBtree原理。 i_propagate_cost介绍 该值在 frame.h 中 x264_frame_t结构体中声明。该值是一个 uint16_t型指针变量,在 MBtree 算法中用来存储每个宏块的传播代价。在*frame_ne…

应用案例 | Panorama SCADA:开创性的铁路电气控制系统

案例概况 客户:英国铁路网运营商Network Rail 合作伙伴:Telent Technology Services Ltd 应用:实现对铁路牵引电网的高效管理与精准控制 应用产品:宏集Panorama E2 SCADA系统 一、应用背景 英国铁路网运营商Network Rail计划…

IDEA版本推荐

推荐版本: IDEA 2024.1.4 下载链接:IDEA下载 (下载时可以往下拖,选到自己想要的版本哦) 本人由于项目开发需要,陆续用过几个版本的IDEA,包括: IDEA 2020.2.4 。这是在看韩顺平老师…

创意学生木工工具——木工锯床

开展创意木工课程丰富了学校的课程多样性,强化了实践教育,并实现了跨学科的融合,在教育理念方面,创意木工课程强调了学生的主体地位,注重了学生的全面发展,并倡导了实践育人的理念,培养学生的综…

python-18-零基础自学python 类和子类的基础练习

学习内容:《python编程:从入门到实践》第二版 知识点: 类,父类与子类的继承,调用函数方法等。 练习内容: 练习9-7:管理员 管理员是一种特殊的用户。编写一个名为Admin的类,让它继…

游泳耳机入耳式好还是骨传导好?游泳教练力荐实力卓绝的四大热款

作为一名长期致力于游泳爱好者健康与运动体验提升的专业教练,我深知在水中听音乐的魅力,同时也深知选择正确的耳机对于水上运动的重要性。近年来,市场上的游泳耳机类型日益丰富,其中入耳式和骨传导两大主流各有千秋。今天&#xf…

springcloud第4季 分布式事务seata作用服务搭建1

一 seata作用 1.1 seata简介 1.seata是一款解决分布式事务的解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 1.2 seata的术语 一个中心:全局事务id,xid,在调用服务链路的上下文中进行传播。TC(Transa…

界面控件Telerik UI for Winforms 2024 Q2新版亮点 - 发布全新的AI相关组件

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件,所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。 本文将介绍界面组件Telerik UI for Winform…

高效导航:Symfony路由组件的高级应用揭秘

🌐 高效导航:Symfony路由组件的高级应用揭秘 🚀 在Symfony框架中,路由是应用程序的神经系统,负责将用户的请求导向正确的控制器。Symfony的路由组件不仅功能强大,而且提供了许多高级用法,以满足…

golang项目基于gorm框架从postgre数据库迁移到达梦数据库的实践

一、安装达梦数据库 1、登录达梦数据库官网,下载对应系统版本的安装包。 2、下载地址为:https://www.dameng.com/list_103.html 3、达梦数据库对大小写敏感,在安装初始化数据库实例时建议忽略大小写;具体安装教程可参考以下博客: …

php中闭包(Closure)的bindTo函数用法

Closure::bindTo 是 PHP 中的一个方法,用于改变闭包(Closure)内部的 $this 上下文以及其静态范围。这意味着你可以将一个闭包从一个对象或类绑定到另一个对象或类上,使其在调用时使用新的上下文。这对于在不同的对象实例间复用闭包…

C++02 变量和基本类型

基本类型 字、字节、bit、Byte之间的关系 字 word 字节 Byte 位 bit 1字 2字节 <---> 1word 2Byte 1字节 8位 <---> 1Byte 8bit 1Byte 8bits 1KB 1024Bytes 1MB 1024KB 1GB 1024MB #include <iostream> using namespace std; int main() {/*字符…

Brand Finance Retail 100 2024

近日,全球领先的品牌价值评估咨询机构Brand Finance发布了其年度行业研究报告——《Brand Finance Retail 100 2024》。该报告深入分析了全球最有价值的零售品牌及其品牌实力,揭示了品牌价值的变化趋势和品牌强度的排名情况。报告指出,尽管许多顶级零售品牌在品牌价值上遭遇了下…

deepspeed docker集群实现多机多卡训练----问题记录及解决方案资源汇总

. Docker中实现Deepspeed多机多卡训练 【掘金-雨田君的记事本】docker容器中deepspeed多机多卡集群分布式训练大模型 . 问题记录及解决方案资源汇总 问题1&#xff1a;deepspeed socketStartConnect: Connect to 172.18.0.3<54379> failed : Software caused connectio…

表达式求值的相关语法知识(C语言)

目录 整型提升 整型提升的意义 整型提升规则 整型提升实例 算术转换 赋值转换 操作符的属性 C语言的语法并不能保证表达式的执行路径唯一&#xff01;&#xff01;&#xff01; 问题表达式 整型提升 C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这…