5

サーバー全体をルート権限で実行しなくても、Rails サーバーをポート 80 にバインドする方法を見つけようとしています。私の質問は基本的に「非ルート プロセスが Linux の「特権」ポート (<1024) にバインドする方法はありますか?」と同じですが、Rails でこれを行う必要があることを除きます。現在、私が参照した質問に対する上位 2 つの回答ではCAP_NET_BIND_SERVICE、Ruby インタープリターにアクセス許可を付与する必要がある (おそらく良い考えではない) か、サーバーの起動後に root 権限を削除する必要があります ( Ruby で可能かどうかはわかりません)。何か案は?

4

1 に答える 1

7

基本的に、答えはあなたがしないということです。これを機能させるための非常にハックな方法がある可能性はありますが、実際にこれを行う可能性は非常に低いです。代わりに、非特権ポートで Rails を実行し、nginx などの実際の Web サーバーをセットアップして Rails に転送します。

非常に単純な例として、nginx では次のような構成ファイルを使用できます。

upstream rails_server {
  server localhost:3000;
}

server {
  listen 80;

  location / {
    root /home/deploy_user/rails_app/public;
    try_files $uri @missing;
  }

  location @missing {
    proxy_pass http://rails_server;
    proxy_set_header Host $http_host;
    proxy_redirect off;
  }
}

このソリューションは、インフラストラクチャの柔軟性を高めるため、長期的にも優れています。たとえば、アプリケーションを複数のマシンにスケールアップする必要がある場合、nginx をロードバランサーとして使用して、異なるマシンで実行されている多数の Rails サーバーにリクエストを転送することができます。

于 2013-12-06T21:58:58.420 に答える