質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.11%

物理的に分かれている二台のサーバーを使ったunicorn,nginx連携のやり方及び仕組み

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 739

domidomi

score 29

追記

二つ疑問に思ったのですが、

TCPでつなぐ際に傍受の危険性はないのでしょうか?(普通にTCPでつないだ場合暗号化が無いと怖い気がする)
・調べているとwebsoketという技術があるようですが、nginxunicornwebsoketで繋ぐ事はできないのでしょうか?
websoketはコネクションを繋ぎっぱなしである場合TCPの上位互換の様に見受けられました。unicornnginxのやり取りは高速な双方向通信が望ましい気がするので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を繋ぎっぱなしにするなんてあんまりあり得ない気がします。(速度もとっても遅くなってしまいそう)

そして途方にくれています・・・。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

別サーバの場合、もちろん一般的にはTCPで接続するかと思いますが、「あんまりあり得ない」と思われている(UNIXドメインソケットだったらあり得るのに?)のがちょっとよくわかりませんでした。別に普通にあり得ますし、「とっても遅く」なることはないですよね。

試しに同一サーバでも127.0.0.1で接続するようにしてみるといいんではないでしょうか。(そういう問題でもないんでしょうか。)

 追記について

TCPは普段のインターネットウェブブラウジングで使用しているプロトコル

というかTCPを使わないのはUDPベースの限られたもので、ほとんどのプロトコルはTCPの上で動くものなのでした。

TCPでつなぐ際に傍受の危険性はないのでしょうか?

あります。そのため、場合によってはTLS(SSL)等を使ったりすることもあります(TLSもTCPの上で動きます)。
が、傍受の危険性は普通のUNIXドメインソケットでもあるので、どこまで気にするか(どこで守るか)の問題になるかと思います。

ちなみにWebSocketは双方向通信を行うもので、HTTPとの比較で考えるもので、TCPとの比較で考えるものではないです。むしろ、WebSocketはHTTPベースで通信をしている経路の上にTCP(ソケット)的な通信を行うためのもので、TCPそのものが使えるのであればわざわざWebSocketにするのはなぜ…?という気がします。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/12 11:33

    ご回答ありがとうございます。

    知識が浅く、また、乱筆乱文申し訳ございません。
    ・webサーバーとアプリケーションサーバーは高速で双方向な通信が必要
    ・TCPは普段のインターネットウェブブラウジングで使用しているプロトコルという事で、上記が満たされない
    という固定観念があり、先の様な記述となってしまいました。
    TCPもwebサーバーとアプリケーションサーバー間で高速で双方向な通信を満たせるようなプロトコルなのですね。

    また、二つ疑問に思ったのですが、こちらに記載する可読性が低い気がしたので質問に追記という項目で追加させて頂きました。お時間御座いましたらご覧頂けると幸いです。

    キャンセル

0

普通に tcp でつなぐことが多いと思います。
リバース Proxy も普通に tcp が使われますし、大きな問題はないと思います。


気にされている点は、「APサーバ に クライアントが直接繋げるのではないか」という点でしょうか。

たとえば、サーバーの構成が、「 [Clinents]  --- Internet (TCP) ---> [nginx] -- ローカルネットワーク (TCP) --> [APサーバ(インターネット未接続)] 」なら ありでしょうか?

文字で書くとわかりにくいので... 専用サーバ上で複数のマシンをネットワーク接続する――はじめての「さくらの専用サーバ」(3) の図1、図2をお借りして書くと...

質問者さんの「複数台構成のイメージ」は、「図1 すべてのサーバーが直接インターネットに接続される構成」なんだと思います。

3台並んでいるサーバーの右側がAPサーバーと仮定した場合、この図では、firewall 等で、アクセス制限しないと インターネット側から自由にアクセスできます。

複数台のサーバー構成を「図2 一部のサーバーのみがインターネットに接続される構成」のようにして、通常のインターネット接続とは別のローカルネットワークを用意して、

  • すべてのサーバーは、ローカルネットでつながっていて、サーバー間の通信は、ローカルネットを使う。
  • クライアントが接続するサーバーのみグローバルなインターネット接続を行う

構成の場合、右側のサーバーがAPサーバーと仮定すると APサーバーは、グローバルなインターネットに接続していないので、クライアントから直接アクセスされることはありません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/12 11:24

    丁寧なご回答ありがとうございます。
    TCPでも大丈夫な旨、ネットワークセキュリティ的な構成などがわかりました。

    二つ疑問に思ったのですが、こちらに記載する可読性が低い気がしたので質問に追記という項目で追加させて頂きました。お時間御座いましたらご覧頂けると幸いです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.11%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる