有没有人能帮我理一理以下名词的关系: nginx, apache, webservice, servlet

2016-01-13 12:53:13 +08:00
 ma125125t
我是做移动端开发的,对后台开发不太熟悉,但是基础的知识还是了解一些,后台开发也是分模块和组件,每一块负责一些功能。 windows,os,centos 这种算是操作系统,是硬件与软件的衔接者。 java,php,nodejs 是语言,是依附于编译器上并且运行业务逻辑的。 solr 这种是搜索引擎,是后台程序和数据库之间的中间件。但是 nginx , apache , webservice , servlet 这几个我不知道是属于什么功能,负责那一块职责,跟我前段直接相关的是 http 服务器,但我不知道确定是哪个。有人能讲讲吗,最好能具象一些,因为百科我也看了,不是很理解。我知道这对于后端人员非常非常基础,仍旧非常感谢回答者。
3427 次点击
所在节点    程序员
10 条回复
br00k
2016-01-13 13:05:01 +08:00
知道名字搜一下不就好了。。。
pheyer
2016-01-13 13:08:12 +08:00
nginx 的核心就是反向代理吧,研究下这个
zjxubinbin
2016-01-13 13:18:57 +08:00
Nginx 和 Apache 是静态 Web 服务器,同时也是"请求转发服务器",负责把收到的请求转发给后台的应用服务器来处理,WebService 是用于不同平台不同程序之间进行数据通信的,最常见的就是各种 API 服务,Servlet 是一个 JavaWeb 里边的标准,泛指 JavaWeb 的一种程序,需要有特定的容器来运行,常见的 Servlet 容器有 Apache Tomcat,Redhat Wildfly,GlassFish,Weblogic...

Google 是一种搜索引擎,能够为你搜索到想要的信息,WikiPedia 是最大的维基百科,上面的知识的优质度可以耍百毒百科几条街了.
bobuick
2016-01-13 13:22:03 +08:00
nginx 核心是代理, 当然也有很多做静态资源的 http 服务
apache 和 nginx 类似, 是以前的事了,网络模型不一样
webservice 是协议, 跟他们没什么关系, 可以看做是一个长连接的 http 吧。 毕竟协议握手是用 http 协议来完成的
servlet 是 java 的术语,说到底应该是指一个 java 对象, 比如 http 服务对服务器发起某个资源请求,在 java 里来处理这个事情的对象,

ps 我不是做 java 的, servlet 可能有更高端大气的解释
Strikeactor
2016-01-13 13:25:38 +08:00
你要的 http 服务器应该是 Nginx 和 Apache ,他俩通常是二选一
主要作用是处理 http 请求并转给相应的后端程序

比如你访问 www.a.com/b.php 的时候,这个 GET 请求是传给了 Nginx (或者 Apache )的, Nginx 根据 Host 头( www.a.com )将这个请求匹配给相应域名的配置文件,从配置文件中的文件格式(.php )匹配出这个请求应该发往后端程序( php-fpm )监听的 9000 端口,同时配置文件中也有网站所在路径一类的信息,这样在后端的 php-fpm 就能对相应的文件进行处理了。 php-fpm 处理完的返回( HTML )会交回 Nginx ,又 Nginx 返回给请求的用户,这就是这个 GET 请求返回的数据。
crazycen
2016-01-13 13:49:29 +08:00
楼主可以百度啦!
zooooom
2016-01-13 16:41:42 +08:00
自己去搜一下会死吗?
huadi
2016-01-13 23:40:56 +08:00
nginx 和 apache 是并列的关系, 二选一, 用 nginx 就行了. 客户端会直接连到 nginx 进程上, 或者说由 nginx 处理客户端的连接, 并做转发. 比如 http://abc.com/list.js 是购物车列表页使用的 JS 文件, 它是一个静态内容, nginx 可以直接读对应的文件返回给客户端. http://abc.com/cart.html 需要依据不同的登录用户, 展示不同的购物车中的产品, 这个需要转发到后端进程进行动态处理(需要你写 Java 程序处理的)

在 nginx 和 servlet 中间, 还有一个叫 servlet container, 例如 tomcat, jetty. 它们负责解析 http 请求, 将 http 请求变成 Java 中的 Request 对象(这样你才能在 Java 代码中直接拿到这个请求对象).

而你写的处理请求的代码, 叫 servlet, 其实就是你自己的业务逻辑代码.
servlet 会强制你实现一些接口, 这样你可以把你的代码包直接扔到 tomcat 中. 因为你实现了这些接口, tomcat 直接以接口规范调用你的代码, 完成动态内容的生成.

在生产环境中, nginx 主要作用是扛连接. 因为后端的 tomcat 的强项是解析 http 请求变成 Java 中的 Request 对象, 并调用你的业务代码(就是你写的 servlet), 所以它对于连接的处理, 静态内容的优化并不是很好(虽然能做). nginx 可以自己扛上万连接不费劲, 所以 nginx 挡在前面, 处理一些原生 http 请求相关的工作(TCP 连接, 静态内容, 还有一些过滤, 比如 request body 大于多少的就抛弃掉这种前期处理).
sjzjams
2016-01-14 14:26:07 +08:00
没做过移动端,但是这些东西难道移动端都不用了解吗?
ma125125t
2016-01-14 15:25:45 +08:00
为什么将 nginx 和 Apache 称为服务器,而不是应用( Application )?难道不是“阿里云服务器”那种硬件才能称为服务器吗?或者你们是指缩写(服务器应用)?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/250408

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX