NGinxとDockerによる1つのタップ展開:ロードバランシングのための設定⚖
ようこそ戻るには、私たちは簡単に逆プロキシを導入し、どのように我々はいくつかのNGNX、我々のアプリのバランスをロードするには、簡単にスケールアウトし、提供するために使用することができます.最終的なアーキテクチャとして、最終的な結果として説明します.
今日、我々はNGinxの基礎に右にジャンプします、それで、最初に、あなたがそれをあなたのマシンにインストールしたことを確認してください.
インストールが完了したら、すべての魔法が本当に起こる設定フォルダに移動できます.このパスに移動して起動します
ファイルは空ではなく、既に設定されているデフォルトの設定があり、すべてを削除して最初から起動します.
今日は3つの基本的なセットアップを学びます. ローカルファイルの提供 ホストURLを提供する 負荷分散による複数インスタンスへのアクセス
Aの基本骨格
HTTPサーバを追加しましょう
NGinxは、まだ設定していないので、デフォルトのパスからこの静的なHTMLファイルを引っ張っている.私たちは今1つを設定するでしょう、私は
ここで、ポート番号を打ったときにNGNXを設定してこのウェブページをポイントしましょう
さあ、レベルを高くしましょう.複数のディレクトリを持っていれば、ただ一つのルートだけではないでしょうか?
イージー
マシン上のディレクトリを作成するのを忘れないでください.
重要な注意:ディレクトリ
パスマッピングの別の方法は
の場合 実際のディレクトリは
我々は逆プロキシを構築しているとしましょうwww.example.com , 我々は、ユーザーが我々自身のドメインからサイトを見ることを望みます、これは以下の構成を通して簡単にされることができました:
これは、ポートを通してアクセス可能なローカルホストアプリケーション(私たちの場合、バックエンドアプリケーション)を提供するときと同様に使用することができます
このユースケースでは、簡単なHello World Appを展開します.ミニマムセットアップでは、必要なのはマシン上の作業用のドッキングセットアップです.
あなたのお気に入りのターミナルのアプリに頭を下げ、同じアプリの3つのインスタンスを、それぞれ独自のコンテナ上でスピン、我々は“HelloWorld”のDocker画像を使用しているでしょう
さあ、一緒に遊びましょう
基本的に、これはNginxRound-Robin 各々のサーバがリクエストの等しい数に役立つように、各々の着信要求.あなたがリフレッシュボタンを押すたびに、別のサーバーで迎えられる予定です.
あなたは場所ディレクティブで、クリエイティブを得る可能性があります
あなたのアプリケーションがメモリ内のユーザーデータを保存しているかどうか?次に、ユーザのIPアドレスが変更されない限り、指定されたユーザが同じサーバをヒットすることが保証されるよう、ユーザーのIPアドレスをハッシュ化することでユーザのセッション「sticky」を作成する必要があります.
私は今、あなたを得ることができる基本を持っていると思う.我々は、全体のセットアップをコンテナ(NGinxを含む)にパッケージングされ、単一の
オスカーワイルドによる小さいが、強力な引用で、このものを終えたいです
良い仕事を続ける🚀.
今日、我々はNGinxの基礎に右にジャンプします、それで、最初に、あなたがそれをあなたのマシンにインストールしたことを確認してください.
インストールが完了したら、すべての魔法が本当に起こる設定フォルダに移動できます.このパスに移動して起動します
/etc/nginx/
( Linux上にあるならば、あなたはnginx.conf
ファイルは、お気に入りのテキストエディタを使用して起動し、そこに見てみましょう.ファイルは空ではなく、既に設定されているデフォルトの設定があり、すべてを削除して最初から起動します.
今日は3つの基本的なセットアップを学びます.
ローカルファイルの提供
Aの基本骨格
nginx.conf
fileは(ほとんどのシナリオで)これらの2つのディレクティブを含んでいなければなりません.http {
}
events {
}
出発しますevents
今のところ空になって、他の指令に集中してください.http
NGNXをHTTPサーバとして設定します.Before we continue, note that we'll be stopping and starting Nginx multiple times whenever we apply changes to the
conf
file, so if Nginx is not already running, run it usingnginx
command.
If it is already running and we need to restart it, we'll have to stop it usingnginx -s stop
command, and then start it once again usingnginx
.
If you're on Linux make sure that you are running these commands in an elevated grant usingsudo
.
HTTPサーバを追加しましょう
8080
:http {
server {
listen 8080;
}
}
events { }
ファイルを保存し、nginxを再起動してlocalhost:8080
, 次の歓迎画面を見ることができます.NGinxは、まだ設定していないので、デフォルトのパスからこの静的なHTMLファイルを引っ張っている.私たちは今1つを設定するでしょう、私は
index.html
フォルダ内にNginx_Article
デスクトップで<html>
<body>
CUSTOM NGINX PAGE, YAY!
</body>
</html>
そのフルパスは/home/{myusername}/Desktop/Nginx_Article/
, 私がLinuxを使っていることを覚えておいてください.そうすれば、このパスはあなたのケースにおいて少し異なるかもしれません{myusername}
あなたのアカウントのユーザー名(コースのかすかな括弧なしで)で.ここで、ポート番号を打ったときにNGNXを設定してこのウェブページをポイントしましょう
8080
:http {
server {
listen 8080;
root /home/{myusername}/Desktop/Nginx_Article/;
}
}
events { }
nginxの再起動と再ロードlocalhost:8080
, そして、あなたは我々を見ることができるべきですindex.html
うまくいった.さあ、レベルを高くしましょう.複数のディレクトリを持っていれば、ただ一つのルートだけではないでしょうか?
イージー
http {
server {
listen 8080;
location /images {
root /home/{myusername}/Desktop/Nginx_Article_Another_Directory/;
}
location /videos {
root /path/to/another/root/;
}
}
}
events { }
ここで我々はroot
内部の指令location
ディレクティブ、この設定はnginxにこのディレクトリを提供するよう依頼します./home/{myusername}/Desktop/Nginx_Article_Another_Directory/images
場合にlocalhost:8080/images
が要求された.マシン上のディレクトリを作成するのを忘れないでください.
重要な注意:ディレクトリ
/images
はindex.html
デフォルトで提供されるファイル、または特定のファイルを要求する必要がありますlocalhost:8080/images/cat.jpg
, ファイルが保存されていなければ/images
, 前の要求は禁断の状態を返します.パスマッピングの別の方法は
alias
以下のディレクティブhttp {
server {
listen 8080;
location /documents {
alias /home/{myusername}/Desktop/Nginx_Article_Another_Directory/top_secret;
}
}
}
events { }
aliasディレクティブはnginxにこのディレクトリを提供するよう依頼します.home/{myusername}/Desktop/Nginx_Article_Another_Directory/top_secret
場合にlocalhost:8080/documents
が要求された.🧾 要約しましょう
alias
ディレクトリは、NGinxが移動することになっていたフルパスを提供する必要がありますroot
ディレクトリはディレクトリのルートパスを持っていて、そのパスに場所の値を追加するだけです./documents
内部Nginx_Article_Another_Directory
, 私たちはディレクトリのために/top_secret
. ホストURLを提供する
我々は逆プロキシを構築しているとしましょうwww.example.com , 我々は、ユーザーが我々自身のドメインからサイトを見ることを望みます、これは以下の構成を通して簡単にされることができました:
http {
server {
listen 8080;
location / {
proxy_pass http://www.example.com/;
}
}
}
events { }
移動するlocalhost:8080
nginxを再起動した後、例と同じページを見ることができます.COM .これは、ポートを通してアクセス可能なローカルホストアプリケーション(私たちの場合、バックエンドアプリケーション)を提供するときと同様に使用することができます
5000
,http {
server {
listen 8080;
location / {
proxy_pass http://127.0.0.1:5000/;
}
}
}
events { }
負荷分散による複数インスタンスへのアクセス
このユースケースでは、簡単なHello World Appを展開します.ミニマムセットアップでは、必要なのはマシン上の作業用のドッキングセットアップです.
あなたのお気に入りのターミナルのアプリに頭を下げ、同じアプリの3つのインスタンスを、それぞれ独自のコンテナ上でスピン、我々は“HelloWorld”のDocker画像を使用しているでしょう
80
, 要求されると、応答のコンテナのIDを出力します.foo@bar:~$ docker run -p 1111:80 -d strm/helloworld-http
478405720f2106d718edb1602812528ae53011cb196dc3731447c64d0bd8f2ff
foo@bar:~$ docker run -p 1112:80 -d strm/helloworld-http
a374ce45bf07b9747573e7feb1ae9742e72d2a31d74c2da3caa43abd5586a108
foo@bar:~$ docker run -p 1113:80 -d strm/helloworld-http
422efc18f418772cb96ea6088f2f801854ad4da21436da2c485f3ef80cca20ec
Dockerが各実行コマンドの後に各コンテナのIDを出力することに注意してください.また、ポートを通して、そのコンテナコンテナの外側からアクセス可能なアプリケーションの3つのインスタンスを展開することにも気付きます:1111
, :1112
, :1113
. たとえば、アプリケーションの最初のインスタンスに移動するには、頭にする必要がありますlocalhost:1111
, など.さあ、一緒に遊びましょう
conf
ファイルは、我々の3つのインスタンスの上に入って来る荷をバランスさせるためにそれをセットアップします.http {
upstream allinstances{
server 127.0.0.1:1111;
server 127.0.0.1:1112;
server 127.0.0.1:1113;
}
server {
listen 8080;
location / {
proxy_pass http://allinstances/;
}
}
}
events { }
我々のデッキに新しい指令を加えたように見えます.upstream
, どこproxy_pass
今すぐポイント.
upstream
defines a cluster that you can proxy requests to. It's commonly used for defining a web server cluster for load balancing.
基本的に、これはNginxRound-Robin 各々のサーバがリクエストの等しい数に役立つように、各々の着信要求.あなたがリフレッシュボタンを押すたびに、別のサーバーで迎えられる予定です.
あなたは場所ディレクティブで、クリエイティブを得る可能性があります
proxy_passes
, so /odd
が1111
or 1113
, and /even
ポートに移動する1112
.あなたのアプリケーションがメモリ内のユーザーデータを保存しているかどうか?次に、ユーザのIPアドレスが変更されない限り、指定されたユーザが同じサーバをヒットすることが保証されるよう、ユーザーのIPアドレスをハッシュ化することでユーザのセッション「sticky」を作成する必要があります.
upstream allinstances{
ip_hash; # << Will hash the user's IP address and resolve to a single server
server 127.0.0.1:1111;
server 127.0.0.1:1112;
server 127.0.0.1:1113;
}
追加後ip_hash
コマンドは、どんなにあなたがページをリフレッシュしても、常に同じサーバーでサーブされます.私は今、あなたを得ることができる基本を持っていると思う.我々は、全体のセットアップをコンテナ(NGinxを含む)にパッケージングされ、単一の
docker-compose
コマンド.オスカーワイルドによる小さいが、強力な引用で、このものを終えたいです
良い仕事を続ける🚀.
Reference
この問題について(NGinxとDockerによる1つのタップ展開:ロードバランシングのための設定⚖), 我々は、より多くの情報をここで見つけました https://dev.to/paulafahmy/one-tap-deployments-with-nginx-and-docker-configuring-for-load-balancing-56bテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol