Nginx通关攻略

1. Nginx简介1.1 Nginx 概述

  • NGINX是一个免费、开源、高性能、轻量级的HTTP和反向代理服务器,也是一个电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强 。Nginx 因为它的稳定性、丰富的模块库、灵活的配置和较低的资源消耗而闻名。目前应该是几乎所有项目建设必备 。
  • Nginx由内核和一系列模块组成,内核提供web服务的基本功能,如启用网络协议,创建运行环境,接收和分配客户端请求,处理模块之间的交互 。Nginx的各种功能和操作都由模块来实现 。Nginx的模块从结构上分为核心模块、基础模块和第三方模块 。核心模块: HTTP模块、EVENT模块和MAIL模块基础模块: HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块第三方模块: HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块及用户自己开发的模块这样的设计使Nginx方便开发和扩展,也正因此才使得Nginx功能如此强大 。Nginx的模块默认编译进nginx中,如果需要增加或删除模块,需要重新编译Nginx,这一点不如Apache的动态加载模块方便 。如果有需要动态加载模块,可以使用由淘宝网发起的web服务器Tengine,在nginx的基础上增加了很多高级特性,完全兼容Nginx,已被国内很多网站采用 。
  • Nginx有很多扩展版本
    • 开源版 nginx.org
    • 商业版 NGINX Plus
    • 淘宝网发起的Web服务器 Tengine
    • 基于Nginx和Lua的Web平台 OpenResty
1.2 Nginx 作为 web 服务器Web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务,常常以B/S(Browser/Server)方式提供服务 。
  • 应用层使用HTTP协议 。
  • html文档格式 。
  • 浏览器统一资源定位器(URL) 。
Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比如 perl、php 等,但是不支持 JAVA 。Java 程序一般都通过与 Tomcat 配合完成 。
作为一名Java猿帅,肯定要理解下Nginx和Tomcat的区别了:
【Nginx通关攻略】Nginx、Apache和Tomcat
  • Nginx—— 由俄罗斯程序员Igor Sysoev所开发的轻量级、高并发HTTP服务器;
  • Apache HTTP Server Project,一个Apache基金会下的HTTP服务项目,和Nginx功能类似;
  • Apache Tomcat,则是Apache基金会下的另外一个项目,是一个Application Server,更准确的说是一个servlet应用容器,与Apache HTTP Server和Nginx相比,Tomcat能够动态的生成资源并返回到客户端;
Apache HTTP Server和Nginx本身不支持生成动态页面,但它们可以通过其他模块来支持(例如通过Shell、PHP、Python脚本程序来动态生成内容);
一个 HTTP Server 关心的是 HTTP 协议层面的传输和访问控制,所以在 Apache/Nginx 上你可以看到代理、负载均衡等功能 。客户端通过 HTTP Server 访问服务器上存储的资源(HTML 文件、图片文件等等) 。通过 CGI 技术,也可以将处理过的内容通过 HTTP Server 分发,但是一个 HTTP Server 始终只是把服务器上的文件如实的通过 HTTP 协议传输给客户端 。
而应用服务器,则是一个应用执行的容器 。它首先需要支持开发语言的运行(对于 Tomcat 来说,就是 Java),保证应用能够在应用服务器上正常运行 。其次,需要支持应用相关的规范,例如类库、安全方面的特性 。对于 Tomcat 来说,就是需要提供 JSP/Sevlet 运行需要的标准类库、Interface 等 。为了方便,应用服务器往往也会集成 HTTP Server 的功能,但是不如专业的 HTTP Server 那么强大,所以应用服务器往往是运行在 HTTP Server 的背后,执行应用,将动态的内容转化为静态的内容之后,通过 HTTP Server 分发到客户端 。
1.3 正向代理正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理 。
正向代理“代理”的是客户端 。
比如在家办公期间,需要连公司的 VPN 办公,这个就是所谓的”正向代理“ 。还有我们访问 google也是 。
Nginx通关攻略

文章插图
 
1.4 反向代理 与 负载均衡反向代理正好与正向代理相反,反向代理是指以代理服务器来接收Internet上的连接请求,然后将请求转发到内部网络上的服务器,并将服务器上得到的结果返回给客户端,此时代理服务器对外表现就是一个服务器,客户端对代理是无感知的 。
反向代理“代理”的是服务端 。
再比如,你想本本分分的在“优酷”上看个“爱情片”,youku.com会把你的请求分发到存放片片的那台机器上,这个就是所谓的”反向代理“ 。


推荐阅读