1

ユーザーアカウントに(自作経由で) nginx(パッセンジャー付き )をインストールしました。単純なnginxで宣言された場所でRails3アプリケーションを応答させることができなかったため、数時間の間、私は物事が機能しないと思っていました。多くの審議 ( AKA 試行錯誤) の後、私はそれが機能するという結論に達しましたが、ポート 80 の使用を拒否しました。

自作のインストールはユーザーごとのインストールであるため、ルートのみのポート(つまり、ポート1024以下)では実行できないはずですが、自作自体およびネット上のさまざまなソース)は、単に実行することを示唆していますサーバーは、sudo nginxポート 80 を使用できるようにするだけで十分です。

これらは、機能する構成の重要なファイルです

/etc/ホスト:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       doomhub.local localhost
255.255.255.255 broadcasthost
::1             localhost 
fe80::1%lo0     localhost

/usr/local/etc/nginx/nginx.conf:

#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}


http {
    passenger_root /Users/ellmo/.rvm/gems/ruby-1.9.3-p125/gems/passenger-3.0.18/;
    passenger_ruby /Users/ellmo/.rvm/rubies/ruby-1.9.3-p125/bin/ruby;

    include       mime.types;
    default_type  application/octet-stream;

    access_log  logs/access.log;  #main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

        server {
            server_name doomhub.local;
            listen 8080;
            root /Users/ellmo/rails/doomhub/public;
            passenger_enabled on;
            passenger_use_global_queue on;
            rails_env development;
        }
}

アプリケーションのサーバー ポートを に変更すると80、当然、再起動時に次のメッセージが表示されます。

nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)

...しかしsudo、エラーは表示されず、プロセスはroot所有者として開始されます。ただし、ブラウザーで開いhttp://doomhub.localても何も返されません (技術的には、「ブラウザーはアドレスを解決できませんでした」というエラーですが、他のエラーや nginx エラーは発生しません)。ログも何も取得しません。

リスニング ポートを 8080 (またはその他のもの) に戻すと、通常のユーザーとして実行すると魅力的に機能しますがhttp://doomhub.localhttp://doomhub.local:8080.

OSX アプリがポート 80 でリッスンするのをブロックするものはありますか? ご覧のとおり、私はそれを使用できますそのため、途中で他のプロセスはありません。それは何も聞いていません。

8080ブラウザで「通常の」httpポートとして扱う方法はありますか?

編集:

Jan Schejbalが提案したようにパッセンジャー ユーザーを指定しても問題は解決しませんでした。しばらくして、このすばらしい投稿で説明されているように、 (クリア ルビー バイナリの使用を許可するのではなく)パッセンジャー用のrvmラッパーを作成することになりました。

http://everydayrails.com/2010/09/13/rvm-project-gemsets.html

パッセンジャー/バンドルのみの rvm ラッパーを作成したおかげで、 nginx をrootとして起動したときにアプリケーションを実行することができました。ルートのみとユーザーが許可するリッスン ポートの両方を指定できます (つまり、 8080 と 81 の両方をテストしました)。アプリケーションは、ラッパー バイナリに関連しないすべての gem を使用しても問題なく提供されます。まだ...

...それでも、ポート 80 ではまったく何も得られません。

4

2 に答える 2

7

適切な診断

はぁ!システムにpowをインストールしたことを完全に忘れました。nginxで遊び始める前に、完全に無効にしていたことは知っていますが、それだけでは十分ではありませんでした。ご存知かもしれませんが、 powはローカルホストドメインを自動的に作成するゼロ構成サーバーツールです。これは、次のように入力すると、ポート80が「適切」であることも意味します。

sudo ipfw list

これは次のようなものを返すはずです:

00100 fwd 127.0.0.1,20559 tcp from any to me dst-port 80 in
65535 allow ip from any to any

...これは、ポート80のIP接続が20559(powの ポート)に転送されることを明確に示しています。

解決

ここで実行したいのは、このポート80転送情報を削除し、代わりに他のポートを使用することです。これにより、複数のRailsアプリケーション(それぞれが独自のgemsetと構成を備えている)用の開発サーバーを簡単にホストし、乗客のアップストリームを介してそれらをプロキシすることができます。

このタスクの最初の部分を達成する方法についての素晴らしい記事があります私には、 ipfwエントリを手動で変更するだけで十分なように思えますが、ブログエントリを使用しました。これを行う場合は、 powのマニュアルにある適切なpowインストール/アンインストールスクリプトを使用してください。たとえば、インストールスクリプトが正常にコンパイルされる前に、 powを完全にアンインストールする必要がありました。

于 2013-01-01T20:26:59.793 に答える
0

ルートとして実行すると権限の問題が発生し、アプリが機能しなくなると思います。PassengerUserSwitchingオプションと を一緒にPassengerUser試し ましたPassengerGroupか?

編集:「アドレスを解決できませんでした」というエラーを見逃しました。それでも上記を試してください (Passenger は時々変です)、ポートが正しくバインドされているかどうかを確認するために netstat を実行してみてください。

于 2013-01-01T13:29:17.380 に答える