一些常见的web server与协议简介

本文介绍了常见的Web服务器如Apache、Tomcat和Nginx的特点和应用场景,重点讲解了Apache与Tomcat、Nginx的区别以及正向代理与反向代理的概念。此外,还探讨了CGI和FastCGI的工作原理,以及Python的WSGI协议和uWSGI服务器在Web开发中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见的web服务器

Apache/Tomcat/Nginx:都是一种WEB服务器,通过HTTP协议提供各种网络服务。
Apache:Apache HTTP服务器是一个模块化的web服务器,可以运行在几乎所有广泛使用的计算机平台上,Apache支持支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。
Tomcat:Tomcat是Java的应用服务器,它只是一个Servlet容器,可以认为是Apache的扩展,但是可以独立于Apache运行。
Nginx:Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器,同时也是一个IMAP、POP3、SMTP代理服务器,多用于高连接并发。
Apache与Tomcat
①相同点:
Ⅰ两者都是Apache组织开发的;
Ⅱ两者都有HTTP服务的功能,Ⅲ两者都是免费的;

②不同点:
ⅠApache是专门用来提供HTTP服务以及相关配置的,而Tomcat是作为Java servlet开发的JSP服务器;
ⅡApache是一个Web服务器环境程序,启用他可以作为Web服务器使用,不过只支持静态网页,不支持(ASP,PHP,CGI,JSP)等动态网页,如果要在Apache环境下运行JSP的话就需要一个解释器来执行JSP网页,而这个JSP解释器就是Tomcat;
ⅢApache侧重于HTTP Server,Tomcat侧重于Servlet引擎,如果以Standalone方式运行,功能上与Apache等效,支持JSP,但对静态网页不太理想。

③实际应用中,Apache一般与Tomcat配合使用,若客户端请求的是静态页面,则只需要Apache服务器响应,若请求动态页面,则是Tomcat服务器响应请求。

Apache与Nginx:Apache是同步多进程堵塞的模型,一个连接对应一个进程;Nginx是建立在epoll机制上的异步非堵塞模型,一个线程可以对应数万个连接;在实际应用中,多使用Apache处理动态请求,使用Nginx处理静态请求,具体区别如表所示。
在这里插入图片描述
正向代理与反向代理
①正向代理即代理客户端向服务器发送请求,客户端了解要访问的服务器,
而服务器不了解访问它的客户端(服务器只了解客户端的代理服务器);
②反向代理(Reverse Proxy)即代理服务器端接受请求,主要用于服务器集群分布式部署的负载均衡,隐藏了服务器的信息。

Nginx的负载均衡算法:①weight轮询(默认,常用):接收到的请求按照权重分配到不同的后端服务器,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;
②ip_hash(常用):每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器;
③fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,结合了前两者的优点的一种调度算法,Nginx默认不支持;
④url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率,默认不支持。

注:①nginx配置文件nginx.conf中,一个server可以认为是一个web服务器,location相当于path匹配;
②请求的静态文件依然是引入外部css和js,因此必须在nginx.conf中专门配置静态文件的location匹配。

CGI/FastCGI,sgi/wsgi/uwsgi,uWSGI的区分

CGI与FastCGI:Common Gateway Interface
①CGI是一个接口协议,即固定了输入与输出的变量与数据格式,用于web server与后端app交互,其工作原理:每当客户请求CGI的时候,WEB服务器就请求操作系统生成一个新的CGI解释器进程(如php-cgi.exe),CGI 的一个进程则处理完一个请求后退出,下一个请求来时再创建新进程,不适用于大访问量及高并发的情况;
②FastCGI是为了解决CGI的这个问题而产生的,web服务器收到一个请求时,他不会重新fork一个进程(因为这个进程在web服务器启动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出。

SGI/WSGI:Python Web Server GateWay Interface,是python专用的网络服务器网关接口协议,用于WSGI server和WSGI app之间的交互,其允许开发者将web server和web app分离,并规定了Server端和App端的端口(即实现了server和app的解耦),在flask/Django框架中都有用于开发的简单WSGI server(在Django中是python manage.py runserver,flask中是app.run(),两者均为调试开发用,不可用于生产环境)。

uWSGI/uwsgi:uWSGI是一个标准的web服务器,其高性能、强扩展性,并支持多种协议和多种语言(其与WSGI并无直接联系,名称类似是为了致敬),uwsgi是uWSGI专用的一种协议,多用于nginx服务器与uWSGI服务器的数据通信。

在python为基础的后端网站中,其使用方法如下。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值