2018/06/23 このエントリーをはてなブックマークに追加 はてなブックマーク - nginxについて調べた(い) その2。リバースプロキシとロードバランシング

nginxについて調べた(い) その2。リバースプロキシとロードバランシング

カテゴリ:

前回に引き続き。


あえて、調べ直す。

リバースプロキシ(英: Reverse proxy)または逆プロキシは、
特定のサーバへの要求を必ず経由するように設置されたプロキシサーバ。
一般的なプロキシとは異なり不特定多数のサーバを対象としない。
リバースプロキシは、不特定多数のクライアントから寄せられる要求に対して、
応答を肩代わりすることにより特定のサーバの負担を軽減したり、
アクセスを制限することにより特定のサーバのセキュリティを高めたりする目的に用いられる。

wikipediaの引用。
https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%90%E3%83%BC%E3%82%B9%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7

分かるんだけどなんかしっくりこない。
何がリバース?

内部ネットワークと広域ネットワークとの接点に置かれ、
外部から内部へのアクセスを代行する。通常のプロキシ(代理サーバー)の「内部から外部へ」と反対であることが「リバース」の由来。

http://www.dnp.co.jp/artscape/reference/archive_words/detail/rvrs-proxy.html

なるほど、通常のプロキシとは逆方向だよということか。


HTTP、TCP、UDP のロードバランシングが出来るらしい。

  • Layer 7 request routing using URI, cookie, args, and more
    レイヤ7はOSI参照モデルのアプリケーション層ですね。URIやクッキーとかを使ってルーティングする機能がある。

  • Session persistence based on cookies *
    クッキーでセッションを永続化する機能がある。

  • Active health checks on status code and response body *
    ステータスとレスポンスボティのヘルスチェック機能がある。

  • Service discovery using DNS *
    DNSを使ってサービス検出する機能がある。サービスディスカバリーってよく聞く言葉だな

ロードバランシングには5種類の方式が使えるらしい。
ラウンドロビン、最小接続数、ハッシュ、IPハッシュ(NGINX Plusのみ)、Least Time(NGINX Plusのみ)。NGINX Plusというのはnginxの商用版らしい。

  • Round‑Robin (the default) – Requests are distributed in order across the list of servers.
  • Least Connections – Each request is sent to the server with the lowest number of active connections, taking into consideration the weights assigned to the servers.
  • Hash – Requests are distributed based on a user‑defined key such as the client IP address or URL. NGINX Plus can optionally apply a consistent hash to minimize redistribution of loads if the set of upstream servers changes.
  • IP Hash (HTTP only) – Requests are distributed based on the first three octets of the client IP address.
    NGINX Plus has an additional algorithm:
  • Least Time – Requests are sent to upstream servers with the fastest response times and fewest active connections.

2018/05/29 このエントリーをはてなブックマークに追加 はてなブックマーク - nginxについて調べた(い) その1。概要を見る

nginxについて調べた(い) その1。概要を見る

カテゴリ:


なんとなく、調べたいので調べます。


enのwikipedia見てみましょう。
https://en.wikipedia.org/wiki/Nginx

The software was created by Igor Sysoev and first publicly released in 2004.

2004年に公式にリリースされたらしいです。


公式サイトを見て見ましょう。
https://nginx.org/en/

以下、引用。

nginx [engine x] is an HTTP and reverse proxy server, 
a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev.
For a long time, it has been running 
on many heavily loaded Russian sites including Yandex, Mail.Ru, VK, and 
Rambler. According to Netcraft, nginx served or proxied 23.76% busiest sites in March 2018. 
Here are some of the success stories: Dropbox, Netflix, Wordpress.com, FastMail.FM.
  • nginxはHTTPサーバーであり
  • リバースプロキシのサーバーであり
  • TCP / UDPのプロキシサーバーであり
  • Yandex、Mail.Ru、VK、Ramblerとかロシアのサイトでよく使われていて
  • Dropbox、Netflix、Wordpress.com、FastMail.FMとかでも使われている

なるほど。


ざっくり、web serverでwikipediaで見てみる。
https://en.wikipedia.org/wiki/Web_server

と、この情報にたどり着いた
https://w3techs.com/technologies/overview/web_server/all

October 2017
Below are the latest statistics  of the market share of  all sites of the top web servers on 
the Internet by W3Techs Usage of
Web Servers for Websites.

Product Vendor  Percent
Apache  Apache  48.5%
nginx   NGINX, Inc. 35.4%
IIS Microsoft   10.8%
LiteSpeed Web Server    LiteSpeed Technologies  2.9%
GWS Google  1.1%
All other web servers are used byless than1% of the websites.

Apache強いな。。ざっくりApacheとnginxだけ気にしとけば良いか…(雑)
IISは出くわしたら気にするレベルで良いだろう。。。うん。。
ただ、この情報が統計的にどの程度有意なのかわからない。

ということで、Apacheも知っておきたいところ。


この記事がよくまとまっているように思う。勉強になった。
https://www.digitalocean.com/community/tutorials/apache-vs-nginx-practical-considerations

Apacheよりnginxの方が後発ということもあり優れている部分もあるが、一方でApacheの方が優れている部分もありそう。例えば、Apacheはモジュールの動的ロードが出来るが、nginxは出来ないのだそう。これは相性によってどちらを選ぶかということも考えたりとかがある気がする。
また、nginxをリバースプロキシにして、併用するパターンもよくあると。
さらっと読んだだけでは理解が足りないのでこの記事を何回か読み直したい。


先ほど書いたように、ざっくりは

  • nginxはHTTPサーバー
  • リバースプロキシのサーバー
  • TCP / UDPのプロキシサーバー

ただ、機能もっと色々あった気がする。ので、調べると
https://www.nginx.com/products/nginx/#features

これが出てくる。
なんかこっちのサイトの方が今風だ。

  • Load balancer
  • Content cache
  • Web server
  • Security controls
  • Dynamic modules
  • Monitoring
  • High availability (HA) *
  • Kubernetes Ingress controller
  • Programmability
  • Streaming media

などが書いてある。機能というかfeatureである。


ざっくり追いかけてみましたが、調べきれないので、おそらく続きます。



GA