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. expressjsのコードでルートを実行してください
- 4. linuxで実行されているMATLABスクリプトを確認してください
- 5. djangoのビュースクリプトからlinuxコマンドを実行してください
- 6. FTPアクセスのみを使用してLinuxサーバに「インストール」してください
- 7. Windowsサーバ上のLinuxコンテナAzure仮想マシンとして実行
- 8. CNIを使用してホスト上のポート80にサービスをバインドする方法
- 9. 個々のルートにhelmet-cspを実装してください
- 10. ポート80を使用してPyCharmを実行するには
- 11. サーバ上のブラウザタブを確認してください
- 12. すでにwampserver上で実行されているWebサイトでsocket.ioチャットアプリを実行してください
- 13. PHP - rootとしてコマンドを実行してください。
- 14. rootとしてアンドロイドプログラムを実行してください
- 15. EMRとしてHDFSコマンドを実行してください。
- 16. スクリプトとしてPySparkを実行してください
- 17. Sinatraをポート80で実行
- 18. コードラインではなく、コードセクションを実行してください。Rstudioで入力してください。
- 19. Net.tcpは、我々はポート80を使用して結合net.tcpでWCFサービスを実行しようとしているポート80
- 20. Artifactory Jenkins Pluginを実行しているときに 'artifactoryPublish'を実行しないでください
- 21. DBリンクが実際に正しいサーバを指していることを確認してください
- 22. JavaScriptがポート80に対応していないGoogleカレンダーAPI
- 23. sudoアクセスなしでポート80でエクスプレスアプリを実行する方法
- 24. ユーザーごとにelfinderのルートを変更してください
- 25. ANTでポートが開いていることを確認してください
- 26. 現在linuxを実行しているすべてのcronジョブを入手してください
- 27. Rails 3 gmaps4rails(地図上をクリックしてください)
- 28. ボタンを使用してPHPを実行してください。
- 29. シェルスクリプトを使用してJarを実行してください
- 30. 残りの前にjavascript行を実行してください
従来の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