https://www.cnblogs.com/wcwnina/p/8728391.htmlを回し
nginxの生成
nginxのを聞いたことがありませんか?だから、今、「ピア」のApacheの聞いたことがある必要があります!nginxのは、Apacheウェブサーバと同じのようなものです。RESTアーキテクチャ・スタイルに基づいて、HTTPプロトコルを介してネットワークのさまざまなサービスを提供する通信基盤としてユニフォーム・リソース記述子(ユニフォームリソース識別子)URI、又はユニフォームリソースロケータ(ユニフォームリソースロケータ)URL、。
ユーザーの規模、ネットワーク帯域幅、および他の製品特性とそのポジショニングと開発の制限が異なる場合ただし、これらのサーバが限定されている環境は、例えば、最初から設計されました。また、さまざまなWebサーバは、独自の特色を持っています。
Apacheの開発期間が非常に長いですし、誰もが認める世界最大のサーバーです。その上で安定した、オープンソース、クロスプラットフォーム、および:それは多くの利点があります。時間は、インターネット業界の台頭、今よりもはるかに少ないですが、あまりにも長く表示されます。ヘビー級になるように設計されています。これは、同時実行性の高いサーバーをサポートしていません。同時アクセス数万で実行されているApacheは、サーバはメモリを大量に消費するようになります。プロセスまたはスレッドを切り替えるには、そのオペレーティング・システムは、HTTPリクエストの低い平均回答率が得られ、大量のCPUリソースを消費します。
Apacheウェブサーバのすべての決定は、高性能になることができない、軽量高同時実行サーバnginxのはされて入ってきました。
nginxの開発C言語を使用して、ロシアのエンジニアイガー・シソエブ、ランブラーメディアの期間中、彼の仕事、。WEBサーバとしてnginxのはランブラーメディアのための優れた、安定したサービスを提供してきました。
そして、イガー・シソエブnginxのは、ソースコードを開いて、フリーソフトウェアライセンスを提供します。
理由は次のとおりです。
- それは何百万人レベルのTCP接続をサポートできるように、nginxの、イベント駆動型アーキテクチャをベース
- 高度にモジュールとフリーソフトウェアライセンスは、(オープンソース時代のああです〜)別の後、サードパーティのモジュールを有効にします
- nginxのは、クロスプラットフォームのサーバーである、などのLinux、Windowsの、FreeBSDの、Solaris版、AIX、Mac OSの上で実行できるオペレーティングシステム
- これらのもたらす良いデザインは素晴らしい安定性であります
だから、nginxの火災!
nginxの分野
nginxのは無料、オープンソースの高性能のHTTPサーバーで、プロキシサーバーを逆;また、IMAP、POP3、SMTPプロキシ・サーバ、nginxのは、逆として加えnginxのでは、HTTPサーバとしての処理サイトを公開することができます負荷分散のためのプロキシ。
演技について
薬といえば、私たちは、いわゆるプロキシの明確な概念は、チャネルの代表である必要があります。
二つの役割、1つの行動している役割を含むこのプロセスでは、役割が目標である、代理操作と呼ばれるプロセスのターゲットの役割にこのプロキシのアクセスを通じて、いくつかのタスクを完了するために、エージェントの役割であり、人生のように - ゲストはアディダスを格納します靴のペアを購入する店、この店は薬である、エージェントの役割は、アディダスのメーカーで、目標は、ユーザーの役割です。
フォワードプロキシ
リバースプロキシの前に言った、我々はフォワードプロキシは、プロキシモデルへのフォワードプロキシは、最も一般的に接触させ、私たちはソフトウェアとの生活から、それぞれ、上の2つの方法でフォワードプロキシモードに対処します見て側面フォワードプロキシが何を意味するかを説明します。
我々は技術が海外でいくつかのサイトにアクセスすることので行く必要がある場合には、今日のネットワーク環境では、あなたは、私たちはウェブサイトを通じて、海外にあるでしょう、ブラウザにアクセスする方法はありません、我々はFQですべての操作を可能性がある場合、アクセスは、FQは外国のサイトにアクセスするためのプロキシサーバを見つけるための主な方法で、私たちは、プロキシサーバ、外国のWebサイトにアクセスするためのプロキシサーバに要求を送信した後、私たちに渡されたデータにアクセスします!
プロキシフォワードと呼ばれるようにプロキシモード、上記のフォワードプロキシサーバアドレス最大の特徴は、クライアントのアクセスに非常に明確であり、唯一の要求プロキシサーバからの明確な、しかしから特定したクライアントを知っていないサーバー、フォワードプロキシモードは、真の顧客情報を保護または非表示にします。模式図を見てください(私はボックスとフォワードプロキシにクライアントを入れて、同じ環境に属し、私は後で紹介しています):
クライアントは、フォワードプロキシサーバを設定する必要がありますもちろん、前提はフォワードプロキシサーバのIPアドレスと、ポートエージェントを知ることです。図に示すように。
要約:フォワードプロキシ、「クライアントのエージェントで、クライアントに代わって要求を行う」、クライアントにオリジンサーバからコンテンツを取得するためには、クライアントとオリジンサーバ(オリジンサーバ)の間に位置しているサーバー要求とターゲット(オリジンサーバ)を送信した後、プロキシサーバに要求を送信し、クライアントが利用可能なオリジナルのコンテンツを返します。クライアントは、フォワードプロキシを使用するためにいくつかの特別な設定を行う必要があります。
フォワードプロキシは使用しています:
Googleのような、(1)元のリソースへのアクセスはアクセスできない
(2)リソースへのアクセスを加速するために、キャッシングを行うことができ
、インターネット認証が、クライアントに(3)アクセス認証
(4)プロキシが(ユーザーアクセスレコードを記録することができますインターネットの動作の管理)、情報を隠すために外部ユーザー
リバースプロキシ
フォワードプロキシが何であるかを理解し、我々は、サイトへの訪問数がテーブルをバーストしていながら、大天宝サイトの私の例として、リバースプロキシに対処するための方法で一日あたりのアクセスを探し続け、単一のサーバは、人々の成長を満たすことができません購入する意欲、そして今回おなじみの用語がありました:分散配置、つまり、アクセス制限の数は、複数のサーバーを展開することによって、問題を解決するために、宝サイトの機能のほとんどは、直接nginxのリバースプロキシの実装ですそして、nginxの背の高い上の名前の他のコンポーネントにより、パッケージ後:のhttp://tengine.taobao.org/ Tengine、特定の情報を表示するためにTengine公式サイトにアクセスすることができます子供用の靴に興味を持っています。その後、リバースプロキシは、具体的にそれを達成するために何を意味するのかによって、クラスタ操作を分散し、我々は(私は、サーバーを入れて箱にリバースプロキシ、私は後で紹介したのと同じ環境に属している)の図を見てください:
以上により、我々は、処理のためにサービス処理サーバの後端に分散一定の規則に従って、イラスト、nginxのサーバーを受信した後、送信するサーバーに対するクライアント要求を複数見ることができます。この時点で、 - それは、要求元のクライアントがクリアされているが、要求は特定の治療法は、nginxのプレーはリバースプロキシ役割であるサーバー明確ではありませんでした。
クライアントは、訪問者がアクセスできるが、彼らはプロキシされているかわからない、外部リバースプロキシは透明であり、薬剤の存在を認識していません。クライアントが必要としないのでどのような構成にアクセスすることができます。
リバースプロキシ、「サーバのエージェントであり、サーバが代わって要求を受信」、主に、分散サーバクラスタ配置の場合に使用される情報を隠すためにプロキシサーバーを逆に。
リバースプロキシの役割:
(1)、通常パブリックネットワークアドレスにアクセスするためのリバースプロキシとして、ネットワーク内のWebサーバーをネットワークの安全性を確保
(2)負荷がリバースプロキシサーバーを介して負荷のサイトを最適化するために、バランスをとります
プロジェクトシーン
通常の状況下では、プロジェクト、フォワードプロキシとリバースプロキシの実際の動作では、我々はアプリケーションシナリオに存在する可能性がある、フォワードプロキシプロキシクライアント要求は、ターゲットサーバにアクセスするには、ターゲット・サーバーでは、サーバーは、単純な興味をリバースされます複数の実際の業務処理サーバのリバースプロキシ。次のように具体的なトポロジは次のとおりです。
両者の差
フォワード両者の違いを説明し、図に示すように、プロキシエージェントを反転するための図を切ります。
グラフィック:
フォワードプロキシ、プロキシクライアントでは、同じLAN(図中国のボックス)に所属し、クライアント情報を隠します。
リバースプロキシ、プロキシサーバーでは、同じLAN(図中国のボックス)に属し、サーバ情報を隠します。
実際には、プロキシは、トランシーバの代わりにすべての要求と応答の両方のプロキシサーバで物事を行うが、構造上の観点から、少し周りを入れ替えるだけで、その剤の種類の出現後にリバースプロキシと呼ばれています。
ロードバランシング
我々は次の、nginxのは、ルールの種類の配信のための要求の根拠に基づいているリバースプロキシサーバの役割を果たし、その後、いわゆるプロキシサーバの概念を定義していますか?ルールは、それの分布を制御することができるかどうか、シナリオを投影しないのですか?
、nginxのリバースプロキシサーバが受信した要求の数は、私たちがここで言うクライアントから送信された負荷を述べました。
要求の数が一定の規則に従ってバランスルールで処理するために、異なるルール・サーバに分配されます。
〜だから、サーバが配信プロセスのルールに従ってリクエストを受信し、負荷分散と呼ばれます。
プロジェクトの実際の動作では、ロードバランシング、ハードウェアロードバランサと負荷分散ソフトウェアは、ハードウェアロードバランサはまた、などの負荷分散F5、高コストのコストが比較的高いが、安定性のデータセキュリティ、として、ハード負荷と呼ばれ、2つです非常に良い保護は、中国の携帯電話として、中国聯通は、このような企業は、ハードロード操作を選ぶだろう、があります。アカウントの費用の理由に取るために多くの企業は、ソフトウェアの負荷分散を使用することを選択し、負荷分散ソフトウェアは、ホストのハードウェアと組み合わせて既存の技術を使用することですメッセージングは、キュー分配機構を実現します。
nginxのは、負荷分散スケジューリングアルゴリズムをサポートし、次のとおりです。
- ウェイト・ポーリング(デフォルト、共通の):受信を要求し、でも使用中に、バックエンドサーバがダウンしている、Nginxは自動的にサーバーのキューから取り出し、別のバックエンドサーバーに割り当てられた重みに基づいて要求を受けケースには影響しません。このように、重み値にバックエンドサーバ(重量)の異なるセット、異なる調整要求サーバの分配比、重量データ大きく、大きなチャンスが要求に割り当てられ、重み値、主に異なるバックエンドサーバーのハードウェアの調整の実際の作業環境のために設定。
- (共通)ip_hash:ある程度持っている同じバックエンドサーバにIPクライアントを発信するハッシュ結果に応じてマッチングするための各要求、このアルゴリズムは、クライアントが常に固定されているIPアドレスへのアクセスは、クラスタの展開を解きます質問セッションは、環境を共有しました。
- △:インテリジェントスケジューリングアルゴリズム、処理の動的応答時間が要求に割り当てられた高効率サーバの短時間高い確率に応じて、要求平衡バックエンドサーバーに応じて割り当てられるために、応答時間に割り当てられたサーバーの長い低処理効率はより少ない要求は、最初の二つのスケジューリング・アルゴリズムの利点を組み合わせます。しかし、それはあなたがこのスケジューリングアルゴリズムを使用したい場合は、upstream_fairモジュールをインストールし、デフォルトは公正nginxのアルゴリズムをサポートしていないことを指摘しています。
- url_hash:割り当て要求の結果にアクセスするためのハッシュURLによれば、各リクエストURLは、固定サーバーのバックエンドを指します静的nginxのサーバの場合のように、キャッシュ効率を向上させることができます。また、nginxのデフォルトのスケジューリングアルゴリズムがこれをサポートしていない、あなたが使用することに注意してください、そして、あなたは、ハッシュパッケージのnginxのをインストールする必要があります。
いくつかの一般的なWebサーバの比較
コントラスト項目\サーバー | アパッチ | nginxの | Lighttpdの |
プロキシエージェント | 非常に良いです | 非常に良いです | 一般的な |
リライタ | 良いです | 非常に良いです | 一般的な |
FCGI | 悪いです | 良いです | 非常に良いです |
ホット・デプロイ | サポートしていません。 | サポート | サポートしていません。 |
システム圧力 | すばらしいです | 小さな | 比較的小 |
稳定性 | 好 | 非常好 | 不好 |
安全性 | 好 | 一般 | 一般 |
静态文件处理 | 一般 | 非常好 | 好 |
反向代理 | 一般 | 非常好 | 一般 |
转 https://www.cnblogs.com/wcwnina/p/8728391.html
Nginx的产生
没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。
然而,这些服务器在设计之初受到当时环境的局限,例如当时的用户规模,网络带宽,产品特点等局限并且各自的定位和发展都不尽相同。这也使得各个WEB服务器有着各自鲜明的特点。
Apache的发展时期很长,而且是毫无争议的世界第一大服务器。它有着很多优点:稳定、开源、跨平台等等。它出现的时间太长了,它兴起的年代,互联网产业远远比不上现在。所以它被设计为一个重量级的。它不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。
这些都决定了Apache不可能成为高性能WEB服务器,轻量级高并发服务器Nginx就应运而生了。
俄罗斯的工程师Igor Sysoev,他在为Rambler Media工作期间,使用C语言开发了Nginx。Nginx作为WEB服务器一直为Rambler Media提供出色而又稳定的服务。
然后呢,Igor Sysoev将Nginx代码开源,并且赋予自由软件许可证。
由于:
- Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接
- 高度的模块化和自由软件许可证使得第三方模块层出不穷(这是个开源的时代啊~)
- Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris,AIX,Mac OS等操作系统上
- 这些优秀的设计带来的是极大的稳定性
所以,Nginx火了!
Nginx的用武之地
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。
关于代理
说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;
此时就涉及到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店~客人到adidas专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是adidas厂家,目标角色就是用户。
正向代理
说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触的到的代理模式,我们会从两个方面来说关于正向代理的处理模式,分别从软件方面和生活方面来解释一下什么叫正向代理。
在如今的网络环境下,我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!
上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。来看个示意图(我把客户端和正向代理框在一块,同属于一个环境,后面我有介绍):
客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。如图。
总结来说:正向代理,"它代理的是客户端,代客户端发出请求",是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
正向代理的用途:
(1)访问原来无法访问的资源,如Google
(2) 可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
反向代理
明白了什么是正向代理,我们继续看关于反向代理的处理方式,举例如我大天朝的某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时就出现了一个大家耳熟能详的名词:分布式部署;也就是通过部署多台服务器来解决访问人数限制的问题;某宝网站中大部分功能也是直接使用Nginx进行反向代理实现的,并且通过封装Nginx和其他的组件之后起了个高大上的名字:Tengine,有兴趣的童鞋可以访问Tengine的官网查看具体的信息:http://tengine.taobao.org/。那么反向代理具体是通过什么样的方式实现的分布式的集群操作呢,我们先看一个示意图(我把服务器和反向代理框在一块,同属于一个环境,后面我有介绍):
通过上述的图解大家就可以看清楚了,多个客户端给服务器发送的请求,Nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx扮演的就是一个反向代理角色。
客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。
反向代理,"它代理的是服务端,代服务端接收请求",主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。
反向代理的作用:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载
项目场景
通常情况下,我们在实际项目操作时,正向代理和反向代理很有可能会存在在一个应用场景中,正向代理代理客户端的请求去访问目标服务器,目标服务器是一个反向单利服务器,反向代理了多台真实的业务处理服务器。具体的拓扑图如下:
二者区别
截了一张图来说明正向代理和反向代理二者之间的区别,如图。
图解:
在正向代理中,Proxy和Client同属于一个LAN(图中方框内),隐藏了客户端信息;
在反向代理中,Proxy和Server同属于一个LAN(图中方框内),隐藏了服务端信息;
实际上,Proxy在两种代理中做的事情都是替服务器代为收发请求和响应,不过从结构上看正好左右互换了一下,所以把后出现的那种代理方式称为反向代理了。
负载均衡
我们已经明确了所谓代理服务器的概念,那么接下来,Nginx扮演了反向代理服务器的角色,它是以依据什么样的规则进行请求分发的呢?不用的项目应用场景,分发的规则是否可以控制呢?
这里提到的客户端发送的、Nginx反向代理服务器接收到的请求数量,就是我们说的负载量。
请求数量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则。
所以~将服务器接收到的请求按照规则分发的过程,称为负载均衡。
负载均衡在实际项目操作过程中,有硬件负载均衡和软件负载均衡两种,硬件负载均衡也称为硬负载,如F5负载均衡,相对造价昂贵成本较高,但是数据的稳定性安全性等等有非常好的保障,如中国移动中国联通这样的公司才会选择硬负载进行操作;更多的公司考虑到成本原因,会选择使用软件负载均衡,软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制。
Nginx支持的负载均衡调度算法方式如下:
- weight轮询(默认,常用):接收到的请求按照权重分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。
- ip_hash(常用):每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
- fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是Nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。
- url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。同样要注意Nginx默认不支持这种调度算法,要使用的话需要安装Nginx的hash软件包。
几种常用web服务器对比
对比项\服务器 | Apache | Nginx | Lighttpd |
Proxy代理 | 非常好 | 非常好 | 一般 |
Rewriter | 好 | 非常好 | 一般 |
Fcgi | 不好 | 好 | 非常好 |
热部署 | 不支持 | 支持 | 不支持 |
系统压力 | 很大 | 很小 | 比较小 |
稳定性 | 好 | 非常好 | 不好 |
安全性 | 好 | 一般 | 一般 |
静态文件处理 | 一般 | 非常好 | 好 |
反向代理 | 一般 | 非常好 | 一般 |