Nginx("engine x")是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。

Nginx代码完全用C语言写成,其特点是占有内存少,并发能力强。官方测试号称最多能够支撑5万并发连接,在实际生产环境中跑到2~3万的并发连接数没什么压力。

说到Web服务器,Apache服务器和IIS服务器是两大巨头;但是运行速度更快、更灵活的Nginx 正在迎头赶上。Nginx到底有多火呢?据统计,全球活跃的网站中使用了Nginx的占比高达12.18%,中国大陆但凡你能说得上名字的网站几乎都在使用Nginx,比如百度、京东、新浪、网易、腾讯、淘宝等。

先来扫一下盲,看看“代理”到底是个什么玩意儿。

1.1 正向代理

有公就有母,有正就有反,阴阳共济,相辅相成。了解反向代理之前,先来看看什么是正向代理

我们平常所说的代理服务器(Proxy Server)提供的就是正向代理服务,其功能是代理网络用户去取得网络信息。代理位于Web客户端和Web服务器之间,扮演“中间人”的角色。

HTTP的代理服务器既是Web服务器又是Web客户端。一个完整的代理请求过程为:客户端首先与代理服务器创建连接,接着根据代理服务器所使用的代理协议,请求对目标服务器创建连接、或者获得目标服务器的指定资源,然后代理服务器再将拿到的资源返回给客户端。

可是,我们的请求为什么不直来直往,而要多此一举的通过代理服务器来转达呢?代理服务器的作用大大的,通过它可以实现多种功能:

(1)共享IP地址

比如,某个局域网内有十台电脑需要上网,但是只分配了一个IP地址。这时候就可以将唯一的IP地址赋予代理服务器,通过NAT(Network Address Translation)协议,让十台电脑都能与外网连通。发送至外网的请求一律通过代理服务器转发,代理服务器收到回应时,再转发给内网的请求者。

(2)高速缓存

大部分代理服务器都具有缓存的功能,就好像一个大的Cache,它有很大的存储空间,它不断将新取得数据存储到它本地的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传给用户的浏览器,这样就能显著提高浏览速度。

(3)过滤器

外面的世界很精彩,外面的世界也很危险。有了代理服务器,妈妈再也不用担心我的安全。

如果把天朝的整个网络看做一个超大的局域网,我们只要访问境外的网站,都会经过一个代理服务器,就是备受“欢迎”的“长城防火墙”,也称“中国国家防火墙”,用于自动审查和过滤监控。这么看来,最担心我们安全的还得说是祖国母亲。

(4)突破自身IP的访问限制

道高一尺,魔高一丈。代理服务器是矛是盾,看你怎么用。

所谓的中国多媒体公众信息网和教育网都是独立的大型国家级局域网,是与国际互联网隔绝的。出于各种需要,某些集团或个人在两网之间开设了代理服务器,借助这些代理服务器的地址,就可以利访问国外网站,俗称FQ。

注意,正向代理与Nginx一毛钱关系都没有,以上内容只是为了引出反向代理的概念。

1.2 反向代理

正向代理是代理客户端来向Internet发送请求,而反向代理是代理服务端来接受Internet上的请求。

正向代理中,proxy和client同属一个LAN,对server透明;反向代理中,proxy和server同属一个LAN,对client透明。 实际上proxy在两种代理中做的事都是代为收发请求和响应,不过从结构上来看正好左右互换了下。

再用两个例子来比较一下正向代理与反向代理的区别。

(1)正向代理

A同学在大众创业、万众创新的大时代背景下开启他的创业之路,目前他遇到的最大的一个问题就是启动资金,于是他决定去找马云爸爸借钱,可想而知,最后碰一鼻子灰回来了,情急之下,他想到一个办法,找关系开后门,经过一番消息打探,原来A同学的大学老师王老师是马云的同学,于是A同学找到王老师,托王老师帮忙去马云那借500万过来,当然最后事成了。不过马云并不知道这钱是A同学借的,马云是借给王老师的,最后由王老师转交给A同学。这里的王老师在这个过程中扮演了一个非常关键的角色,就是代理,也可以说是正向代理,王老师代替A同学办这件事,这个过程中,真正借钱的人是谁,马云是不知道的,这点非常关键。

我们常说的代理也就是只正向代理,正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,某些上网工具扮演的就是典型的正向代理角色。用浏览器访问 http://www.google.com 时,被残忍的block,于是你可以在国外搭建一台代理服务器,让代理帮我去请求google.com,代理把请求返回的相应结构再返回给我。

(2)反向代理

大家都有过这样的经历,拨打10086客服电话,可能一个地区的10086客服有几个或者几十个,你永远都不需要关心在电话那头的是哪一个,叫什么,男的,还是女的,漂亮的还是帅气的,你都不关心,你关心的是你的问题能不能得到专业的解答,你只需要拨通了10086的总机号码,电话那头总会有人会回答你,只是有时慢有时快而已。那么这里的10086总机号码就是我们说的反向代理。客户不知道真正提供服务人的是谁。

反向代理隐藏了真实的服务端,当我们请求 www.baidu.com 的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。

使用反向代理的优势有很多,比如,隐藏和保护服务器资源、负载均衡,缓存静态内容,加密和SSL加速等。

1.3 Nginx的功能

Nginx的启动特别简单,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。还能够不间断服务的情况下进行软件版本的升级。

Nginx在做反向代理时,能够提供性能稳定并且灵活配置的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器。Nginx还对可以对返回结果进行异常判断,如果被分发的服务器存在异常,会将请求重新转发给另外一台服务器,然后自动去除异常服务器。

1.3.1 保护服务器

当客户机向站点提出请求时,请求将转到代理服务器。然后,代理服务器通过防火墙中的特定通路,将客户机的请求发送到内容服务器。内容服务器再通过该通道将结果回传给代理服务器。代理服务器将检索到的信息发送给客户机,好像代理服务器就是实际的内容服务器。如果内容服务器返回错误消息,代理服务器会先行截取该消息并更改标头中列出的任何 URL,然后再将消息发送给客户机。如此可防止外部客户机获取内部内容服务器的重定向URL。

这样,代理服务器就在安全数据库和可能的恶意攻击之间提供了又一道屏障。与有权访问整个数据库的情况相对比,就算是侥幸攻击成功,作恶者充其量也仅限于访问单个事务中所涉及的信息。未经授权的用户无法访问到真正的内容服务器,因为防火墙通路只允许代理服务器有权进行访问。

1.3.2负载均衡

负载均衡服务器的作用是平衡集群中各个服务器的负载压力。

Nginx内置的负载均衡策略有3种:轮询加权轮询IP hash。同时支持扩展策略,完全可以自己写一套规则交给Nginx去执行。

(1)轮询

这种策略简单易行,将请求平均的分配给每个服务器去处理。

(2)加权轮询

升级版的轮询策略,权重越大的服务器会被分配越多的请求数量。

(3)IP hash

对客户端请求的IP进行hash操作,然后根据hash结果将同一个客户端IP的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

1.3.3 web缓存

Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。

Nginx之(一)Nginx是什么的更多相关文章

  1. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  2. Nginx 服务器 之Nginx与tomcat实现负载均衡

      本文讲解我们如何使用Nginx做反向带服务器,实现nginx与tomcat服务器集群做负载均衡. 一.nginx与tomcat实现负载均衡 1.在/usr/local/ngnix/conf  创建 ...

  3. Nginx配置文件(nginx.conf)配置详解(2)

    Nginx的配置文件nginx.conf配置详解如下: user nginx nginx ; Nginx用户及组:用户 组.window下不指定 worker_processes 8; 工作进程:数目 ...

  4. Cenos(6.6/7.1)下从源码安装Python+Django+uwsgi+nginx到写nginx的环境部署(一)

    梳理下这几个的关系: centos是redhat的社区版操作系统. Python2.7.5是开发语言(centos6.5下自带的python是2.6.6版本,所以需要源码更新,而centos7.1下面 ...

  5. Nginx配置文件(nginx.conf)配置详解

    Nginx的配置文件nginx.conf配置详解如下: user nginx nginx ; Nginx用户及组:用户 组.window下不指定 worker_processes 8; 工作进程:数目 ...

  6. Nginx配置配置文件nginx.conf的设置

    引用自:http://www.ha97.com/5194.html #定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数.worker_pro ...

  7. Nginx - Windows下Nginx基本安装和配置

    Nginx 是一个轻量级的高性能 Http WebServer,以事件驱动方式编写,因此相比 Apache 而言,Nginx 更加稳定.性能更好,而且配置简单,资源占用较低. 1. 安装 Nginx ...

  8. Master Nginx(1) - Installing Nginx and Third-Party Modules

    Installing NGINX and Third-Party Modules Installing Nginx using a package manager Linux(deb-based) s ...

  9. nginx -- 安装配置Nginx

    安装说明 系统环境:CentOS-6.3 软件:nginx-1.2.6.tar.gz 安装方式:源码编译安装  安装位置:/usr/local/nginx  下载地址:http://nginx.org ...

  10. nginx+keepalived实现nginx双主高可用的负载均衡

    http://kling.blog.51cto.com/3320545/1253474 一.前言: 在互联网上面,网站为用户提供原始的内容访问,同时为用户提供交互操作.提供稳定可靠的服务,可以给用户带 ...

随机推荐

  1. Oracle12c:支持通过创建identity columen来实现创建自增列

    oracle12c之前如果需要创建自增列必须要通过sequence+trigger来实现.但是oracle12c已经可以像mysql,sqlserver一样通过identity column来设置自增 ...

  2. hdu-2639 Bone Collector II---第k大背包

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2639 题目大意: 求第k大背包. 思路: 由01背包递推式dp[i][j] = max(dp[i][ ...

  3. POJ-2240 Arbitrage---判断正环+枚举

    题目链接: https://vjudge.net/problem/POJ-2240 题目大意: 已知n种货币,以及m种货币汇率及方式,问能否通过货币转换,使得财富增加. 思路: 由于这里问的是财富有没 ...

  4. flask开发表单

    from flask import Flask from flask import render_template from flask import request from flask impor ...

  5. 使用supervisor管理进程

    Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动.重启.关闭进程(不仅仅是 Python 进程).除了对单个进程的 ...

  6. 洛谷 P3258 [JLOI2014]松鼠的新家(树链剖分)

    题目描述松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在”树“上. 松鼠想邀请小熊维尼前来 ...

  7. laravel 5.5 接入蚂蚁金服官方SDK(支付宝APP支付为例)开发步骤

    一.创建应用及配置 首先需要到蚂蚁金服开放平台(open.alipay.com)注册应用,获取应用id(APP_ID),并且配置应用,主要是签约应用,这个需要审核,一般2-5个工作日,审核通过后,去生 ...

  8. [LeetCode] Flood Fill 洪水填充

    An image is represented by a 2-D array of integers, each integer representing the pixel value of the ...

  9. [LeetCode] The Maze 迷宫

    There is a ball in a maze with empty spaces and walls. The ball can go through empty spaces by rolli ...

  10. Java多线程之生产者消费者

    生产者和消费者的实例: 商品类:/** * 商品类 * */public class Goods {    final int MAX_NUMBER = 30; // 最大数量    final in ...