シンサーバーを学習しています。今ではthin start
を使用してサーバーを起動できますが、ポートは3000です。ブラウザーにlocalhost:3000と入力して、Webページを取得する必要があります。
他のサイトと同じように3000ポートを外したいです。そこで、コマンドthin -p 80 start
を使用してデフォルトのhttpポートを使用するように設定しました。しかし、私はこのエラーを受け取りました:
root@makserver:~/apps/videosite# thin --port 80 start
>> Using rack adapter
>> Thin web server (v1.2.7 codename No Hup)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:80, CTRL+C to stop
/usr/local/lib/Ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:572:in `start_tcp_server': no acceptor (RuntimeError)
from /usr/local/lib/Ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:572:in `start_server'
from /usr/local/lib/Ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/backends/tcp_server.rb:16:in `connect'
from /usr/local/lib/Ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/backends/base.rb:49:in `block in start'
from /usr/local/lib/Ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `call'
from /usr/local/lib/Ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run_machine'
from /usr/local/lib/Ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run'
from /usr/local/lib/Ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/backends/base.rb:57:in `start'
from /usr/local/lib/Ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/server.rb:156:in `start'
from /usr/local/lib/Ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/controllers/controller.rb:80:in `start'
from /usr/local/lib/Ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/runner.rb:177:in `run_command'
from /usr/local/lib/Ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/runner.rb:143:in `run!'
from /usr/local/lib/Ruby/gems/1.9.1/gems/thin-1.2.7/bin/thin:6:in `<top (required)>'
from /usr/local/bin/thin:19:in `load'
from /usr/local/bin/thin:19:in `<main>'
これは、ポートがすでに使用されている可能性があることを示しています。
また、管理者権限で実行してみてください
Sudo thin start -p 80
(Tom Crinsonのブログに感謝します 記事 。)
古いRubyプロセスがどこかにハングしているようです。
アクティビティモニターを起動し、すべてのRubyプロセスを強制終了します。
または、ターミナルを使用します。
ps -e | grep "Ruby"
その後:
kill {process id}
rvmsudo Rails server thin -p 80
Sudoを実行してWebサーバーを起動したくない場合(ユーザーがsudoerでない場合)、いつでもスーパーユーザーとしてアクセスし、ポート80トラフィックのポートxへのリダイレクトを設定できます。
Sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
Sudo iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 3000
Iptablesを検索するには
Sudo iptables --list -n -t nat
Sudo iptables --list -n
このようにして、特権を持たない別のユーザーとしてWebサーバーを実行できます。
従来、ポート80は特権ポートであるため(実際には、1024未満のポートはすべて特権ポートです)、それにバインドするにはスーパーユーザー特権が必要です。
ドキュメントを見ると、 彼らは提案していますnginx
の後ろで実行します。これは、一般的には良い考えです。パッケージマネージャーを使用してnginx
をインストールしたとすると、起動時にnginx
を起動する方法についての説明が表示され、デフォルトでポート80にバインドされます。
RVMを使用してRuby)をインストールし、rootユーザーがアクセスできなかったため、Sudo
を使用してポート80でThinを実行できませんでした。 Thinを実行する前に環境変数を設定してmongodbアクセスURLを設定します。次の行でそれを実行しました。
rvmsudo MONGODB_URI=MY_MONGO_URI thin start -p 80 -d
このスレッドをチェックしてください Ruby on Railsサーバーオプション
'thin'をポート80を介してインターネットに直接公開することはお勧めしません。ApacheをWebサーバーとして使用し、httpリクエストをシンアプリケーションサーバーにリダイレクトする必要があります。これをhttpd.confに追加して、トラフィックをRailsにリダイレクトできます
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<VirtualHost *:80>
ServerName YOUR SERVER NAME
DocumentRoot YOUR ROOT
ProxyPass / http://YOURSITE.com:3000/
ProxyPassReverse / http://YOURSITE.com:3000/
ProxyPreserveHost On
</VirtualHost>