apache是什么?他和Django有什么关系?

apache是什么

一个很笼统的介绍:apache是一个开源的且免费的web服务软件(web server),大约为全球46%的网站提供了服务,官方名字是 Apache HTTP server

上述文字常见于很多介绍中,但是对于初学的我来说并不能看懂。核心是apache是一个web server,那web server又是什么?

web server是什么

互联网上有许多服务软件,web server只是其中最常见的一种,并且覆盖非常广,由于人们日常的使用习惯,导致其他的server看起来没有那么重要,比如邮件服务(mail server)、文件服务(fail server)等等其他server。每一种server的功能都相当于一个中介,将服务器物理存盘上的数据/文件,组织成用户需要的页面并进行返回。邮件服务读取邮件返回,文件服务操作文件,而web服务就是操作网页了。

apache是什么?他和Django有什么关系?
web server从服务器中取出的文件可能是用python/java/php等各式各样的语言写成,而要返回给用户的则是一个html网页。

apache web server怎么工作

apache web server会像其他web server一样,处理用户发来的连接。在同一时间可能会有成千上万个连接从不同的客户端发来(比如Firefox chrome 和Safari等等),它需要非常有条理的将这些连接进行响应。同时apache是一个跨平台的软件,既可以为unix系统的服务器提供服务,也可以为Windows系统的服务器提供服务。
比如说,当您正在通过浏览器阅读这篇博客,您的浏览器像****的服务器发送了一个请求,****服务器的web server(假设是apache的),就会检查这个请求,从服务器中取出相应的文件,组织成html进行返回。客户端和服务器之间用http协议进行沟通,而apache web server 就是要保证两个机器之间能够平稳的沟通。

apache 和其他web server的对比

除了apache之外,还有很多的web server,比如NGINX、tomcat等。

NGINX

Apache使用基于线程的结构,对于流量大的网站而言性能不太能保证。而NGINX能够比较好的应对大流量。其次nginx是事件驱动的,它不会为每个请求创建一个新的进程。相反,它在一个线程中处理每个请求。此主进程管理几个执行请求实际处理的子进程。通过这种方式能够应对大流量的访问。
所以对于大流量的网站,nginx能提供更稳定的性能。

tomcat

tomcat也是apache公司开发的一个web server,他的全称是apache tomcat,他也是一个http的服务程序,不同的是他可以提供Java软件,这样就能提供动态网页而非静态网页。

把这些web server装在个人的电脑上,自己的本机也可以成为一个服务器,运行一个web服务程序,并为其分配端口,则接入同一网络的电脑/手机可以通过IP地址:端口号的方式访问你这台变成了服务器的主机。当然还有一个前提是,本机关掉防火墙,允许别的机器进行访问(存在一定的风险,不过很好玩)。大二小学期时老师曾让我们编写一个简易的web server,最终就变成了应付作业,找了一些现成的例子,现在终于看懂了。。

Django是什么

官网上的介绍这样的:

Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.

大致意思就是:Django是一个Python Web框架,能够进行快速开发,使用便捷,解决了许多Web开发的麻烦,因此您可以专注于编写应用程序,而无需重新造*。且是免费和开放源码的。

那么问题来了,Web framework和Web server是什么关系?也就是apache和Django有什么联系?

apache和Django的联系

apache是什么?他和Django有什么关系?
服务器上运行的是一个个web 程序,简单概括,Django这样的frame就是为这一个个app提供了和web server之间沟通的方式。并且将这些沟通进行了隐藏,在编写自己的网站程序时就只需要考虑程序的运行逻辑,而不需要考虑和web server的沟通。
上文提到了webserver是从服务器上取出文件,组织成一个个html提供给用户,这里详细解释取文件这个过程。比如说,用户发来getxxx的请求到web server上,server通过检查是哪个app提供的功能,进而向该app索取该功能,web app接到了这个getxxx后,组织信息,提交给web server ,server再转交给用户。
这个app的编写可以有多种语言,比如java python php等等。Django是python的web app编写框架,它把这些沟通过程都写好了而不用开发者自己考虑怎么和web server进行沟通。所以开发者可以更专注于自己app功能的开发而不是怎么和web server进行沟通,当然一个能力强的开发者可以自己造*进行沟通。。

对于Django而言,在运行一个Django程序时,似乎它自带了一个web server,而这个主要是进行本机调试用的,如果要大规模部署上线还是需要apache setup的。