root権限でサーバ全体を実行することなく、プロダクションRailsサーバをポート80にバインドする方法を探しています。私の質問は基本的に "Is there a way for non-root processes to bind to "privileged" ports (<1024) on Linux?"と同じですが、Railsでこれを行う必要があります。現在のところ、私が参照した質問の上位2つの回答では、CAP_NET_BIND_SERVICE
の権限をRubyインタプリタに許可する(おそらく良い考えではない)か、サーバを起動した後にroot特権を削除する必要があります(I'm not sure is possible with Ruby)。何か案は?RailsサーバをLinux上のポート80にバインドしてルートとして実行しないでください
5
A
答えて
4
ですから、基本的に答えはあなたではありません。この作業を行うには本当に面倒な方法がいくつかあるかもしれませんが、実際にこれをやりたいと思う可能性は非常に低いです。代わりに、非特権ポートでRailsを実行し、nginxのような実際のWebサーバを設定してRailsに転送してください。
超簡単な例として、nginxのとあなたは次のようになりますconfigファイルの使用する可能性があります:それはあなたのインフラをより柔軟になるため
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サーバーに要求を転送させることができます。
関連する問題
- 1. ポート80以外のポートでnode.jsを実行しています
- 2. Jettyをポート80でroot以外のユーザーとして実行しています
- 3. FTPアクセスのみを使用してLinuxサーバに「インストール」してください
- 4. rootとしてアンドロイドプログラムを実行してください
- 5. PHP - rootとしてコマンドを実行してください。
- 6. ポート80を使用してPyCharmを実行するには
- 7. サーバ上のブラウザタブを確認してください
- 8. Sinatraをポート80で実行
- 9. Net.tcpは、我々はポート80を使用して結合net.tcpでWCFサービスを実行しようとしているポート80
- 10. DBリンクが実際に正しいサーバを指していることを確認してください
- 11. ユーザーごとにelfinderのルートを変更してください
- 12. ANTでポートが開いていることを確認してください
- 13. アンドロイドアプリをインストールして実行してください。
- 14. ThreadPoolを使用してmstest *を実行しないでください
- 15. Javaを使用してケトルジョブ/変換を実行しないでください
- 16. クリアデータボタンと同じことを実行してください
- 17. Rails 3 gmaps4rails(地図上をクリックしてください)
- 18. ポートが開いていることを確認してください
- 19. アプリケーションが実行されていないか確認してください。
- 20. 組織は80以上のポートでSharePointを使用していますか?
- 21. すべてのフォームフィールドが完成していない限り、jQueryを実行しないでください
- 22. 文が正しく実行されていないか試してみてください。
- 23. Ubuntu上でデーモンとして実行しているときにJenkinsにもっと多くのヒープスペースを与える方法を教えてください。
- 24. herokuにポート443を押してください
- 25. 別のサーバーでTomcatを実行してください
- 26. スタートアップからのカスタムコンフィギュレーションファイルでスーパーバイザを実行してください
- 27. 実行時にGCCのバージョンを確認してください
- 28. サーバ上でセレンブラウザを実行しています(Flask/Python/Heroku)
- 29. Linux上でgccの2つのバージョンを非管理者として選択してください
- 30. Wampが起動していない、ポート80はすでに使用中です
従来のWebサーバーをポート80で実行し、別のポートで実行されているRailsサーバーに要求を転送するオプションがありますか?たとえば、[nginx](http://wiki.nginx.org/Main)を実行し、[thin](http://code.macournoyer.com/thin/)または[unicorn](http:// unicorn.bogomips.org/)が非特権ポートで動作しています。 –
これを実際にやりたいと思う確率は非常に低いです。 Thin、Mongrel、Puma、Unicornなど、Ruby以外のサーバの後ろに通常の使用パターンでなければならないもの。 [この質問](http://stackoverflow.com/questions/15469598/why-thin-behind-nginx)を参照してください。 – colinm
ええ、これは私が実際に私自身のためにサーバをセットアップするために誰かの助けなしに自分でプロダクションアプリケーションを配備しようとした最初のことです。あるいはHerokuのようなPaaSです。だから、私が望むかどうかわからないという良いチャンスがあります。 ポート80のシン・バインディングの代替案(nginxのように、Jimが彼のコメントで言ったように)を示唆する詳細な回答を投稿したいのであれば、私はこれを有効な答えとして受け入れます。 – Ajedi32