Nginx (engine x) 是一个高性能的HTTP反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。 Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。 Nginx是一款轻量级Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东新浪网易腾讯淘宝等。

  1. 高性能的 http 和 反向代理 web 服务器
  2. 也提供邮件服务(IMAP/POP3/SMTP)
  3. 俄罗斯人在 2004/10/04 编写的
  4. 开源可以二次开发(TNG)
  5. 占用内存少,并发能力强
    1. 相对于 Apache 一个连接一个进程而言强太多

高性能的 Web 服务器

  • 高性能的静态 Web 服务器(动态资源需要应用程序服务器支持, Tomcat 等)

反向代理

疑问

1. Nginx 和 Apache(Apache HTTP Server )的优劣

Nginx 比 Apache 更轻量,占用更少的内存及资源;
Nginx 比 Apache 更能抗并发,Nginx 处理请求是异步非阻塞的,而 Apache 则是阻塞型的,在高并发下 Nginx 能保持低资源低消耗高性能;
Nginx 比 Apache 的模块化设计更好,编写模块相对简单;
Nginx 比 Apache 配置更简单;

Apache 比 Nginx 的 rewrite 拥有更强大的 rewritel;
Apache 可以通过扩展脚本、模块等支持动态页面,但 Nginx 不太行;
Apache 比 Nginx 拥有更多模块;

2. 静态 Web 服务器和动态 Web 服务器的区别?

首先 Web 服务器如 Nginx、Apache、Tomcat 本质上也是一种应用程序,通过绑定 IP 并监听 TCP 端口来处理 Http 请求。当然除此之外有些应用程序自身也是能做到的,比如 node.js、HttpServer (Java HTTP Server )Python SimpleHTTPServer

  • 静态 Web 服务器(Apache、Nginx)的特征就是自身不支持生成动态页面,但它们可以通过其他模块来支持(例如通过Shell、PHP、Python脚本程序来动态生成内容)。如果想要使用Java程序来动态生成资源内容,使用这一类HTTP服务器很难做到。
  • 动态 Web 服务器(Tomcat)的特征就是能够动态的生成资源并返回到客户端,主要是通过 Servlet 来实现。但其对静态资源的分析处理其实比静态 Web 服务器差。

所以往往一个成熟的应用程序是两相结合,用静态 Web 服务器来处理静态资源,用动态 Web 服务器来处理动态资源。

Tomcat运行在JVM之上,它和HTTP服务器一样,绑定IP地址并监听TCP端口,同时还包含以下指责:

  • 管理Servlet程序的生命周期
  • 将URL映射到指定的Servlet进行处理
  • 与Servlet程序合作处理HTTP请求——根据HTTP请求生成HttpServletResponse对象并传递给Servlet进行处理,将Servlet中的HttpServletResponse对象生成的内容返回给浏览器

虽然Tomcat也可以认为是HTTP服务器,但通常它仍然会和Nginx配合在一起使用:

  • 动静态资源分离——运用Nginx的反向代理功能分发请求:所有动态资源的请求交给Tomcat,而静态资源的请求(例如图片、视频、CSS、JavaScript文件等)则直接由Nginx返回到浏览器,这样能大大减轻Tomcat的压力。
  • 负载均衡,当业务压力增大时,可能一个Tomcat的实例不足以处理,那么这时可以启动多个Tomcat实例进行水平扩展,而Nginx的负载均衡功能可以把请求通过算法分发到各个不同的实例进行处理

3. 反向代理与正向代理的区别?

首先确定什么是代理,代理实际上就是一个中介,就是在 A,C 之间在无法直连或者更好的访问的时候,则加一个 B 的中间者来负责连接两者的沟通。

  • 正向代理,主要是指在客户端做的代理,比如说 VPN,我们在无法访问一些私有网段或者外网时,则需要一个代理来连接两者的沟通。
    • 可以用来访问无法访问的资源
    • 可以做缓存,加速访问资源
    • 对客户端访问授权,上网进行认证
    • 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
  • 反向代理,主要是指在服务端做的代理,具体场景往往是由一个支持反向代理的代理服务器来接收 internet 的链接请求,然后再转发给对应的服务。
    • 保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网
    • 负载均衡,通过反向代理服务器来优化网站的负载

主要区别在于这个代理是在哪里做的来区分是正向还是反向,正向是客户端做代理反向是服务端做代理

参考