質問: 追記 -- 二つ疑問に思ったのですが、 ・`TCP`でつなぐ際に傍受の危険性はないのでしょうか?(普通に`TCP`でつないだ場合暗号化が無いと怖い気がする) ・調べていると`websoket`という技術があるようですが、`nginx`と`unicorn`を`websoket`で繋ぐ事はできないのでしょうか? `websoket`はコネクションを繋ぎっぱなしである場合`TCP`の上位互換の様に見受けられました。`unicorn`と`nginx`のやり取りは高速な双方向通信が望ましい気がするので`websoket`が適しているのかなと思った次第です。 知識が足りず大変恐縮ですが、お知りの方がいらっしゃいましたらご教示頂けると幸いです。 疑問 -- ・`nginx`(WEBサーバ)と`unicorn`(APサーバ)を現在同一のサーバーの中で連携させrailsで使用していますが、違うサーバーに分けて(物理的に分かれている二台のサーバー)運用しようと思った際はどのようにすればよいのでしょうか? ・またその通信のプロトコルはどのようになっているのでしょうか? (TCPコネクションがずっと繋がっている?) 詳細 -- 一つのサーバーにどちらも入れている現在、nginxとunicornを連携させるときnginx設定ファイルに `nginx/conf.d/local.conf` ``` upstream unicorn { server unix:/var/www/app/deploy_app/shared/sockets/unicorn.sock; } ``` のような記述をしました。 これはUNIXドメインソケットを用いたつなぎ方かと思います。 ただUNIXドメインソケットは同一オペレーションシステム上のプロセス間通信であり、サーバーが分かれた場合(違うOS上で動いている者同士)使用できないと考えます。 とすると `nginx/conf.d/local.conf` ``` upstream unicorn { server 192.168.39.11:5555 } ``` `config/unicorn.rb` ``` listen 5555 ``` のように書いてTCP通信をするのかな?と思ったのですがこれではunicornがおかれたサーバーに対し5555ポートで接続しようとするとみんなつないでしまう気がします。 そもそもTCPを繋ぎっぱなしにするなんてあんまりあり得ない気がします。(速度もとっても遅くなってしまいそう) そして途方にくれています・・・。
回答: 普通に tcp でつなぐことが多いと思います。 リバース Proxy も普通に tcp が使われますし、大きな問題はないと思います。 気にされている点は、「APサーバ に クライアントが直接繋げるのではないか」という点でしょうか。 たとえば、サーバーの構成が、「 [Clinents] --- Internet (TCP) ---> [nginx] -- ローカルネットワーク (TCP) --> [APサーバ(インターネット未接続)] 」なら ありでしょうか? 文字で書くとわかりにくいので... 専用サーバ上で複数のマシンをネットワーク接続する――はじめての「さくらの専用サーバ」(3) の図1、図2をお借りして書くと... 質問者さんの「複数台構成のイメージ」は、「図1 すべてのサーバーが直接インターネットに接続される構成」なんだと思います。 3台並んでいるサーバーの右側がAPサーバーと仮定した場合、この図では、firewall 等で、アクセス制限しないと インターネット側から自由にアクセスできます。 複数台のサーバー構成を「図2 一部のサーバーのみがインターネットに接続される構成」のようにして、通常のインターネット接続とは別のローカルネットワークを用意して、 * すべてのサーバーは、ローカルネットでつながっていて、サーバー間の通信は、ローカルネットを使う。 * クライアントが接続するサーバーのみグローバルなインターネット接続を行う 構成の場合、右側のサーバーがAPサーバーと仮定すると APサーバーは、グローバルなインターネットに接続していないので、クライアントから直接アクセスされることはありません。