2

シェルスクリプトでgunicornサーバーを起動しようとしています。問題は、サイトにアクセスできないことです(ブラウザ経由でアクセスしようとすると接続がタイムアウトします)。ここに2つのスクリプトがあります。1つは機能し、もう1つは機能しません。最初のスクリプトが機能しない理由と問題を解決する方法を理解しようとしています。

最初のsript機能しません; domain.com:8000のサイトにアクセスしようとすると接続がタイムアウトします;ログにエラーはありません):

#!/bin/bash
  set -e
  LOGFILE=/var/log/gunicorn/hello.log
  LOGDIR=$(dirname $LOGFILE)
  NUM_WORKERS=3

  USER=lumiawor
  GROUP=lumiawor

  cd /home/lumiawor/public_html/test/hello
  source /home/lumiawor/public_html/test/bin/activate
  test -d $LOGDIR || mkdir -p $LOGDIR

  gunicorn_django -w $NUM_WORKERS \
      --user $USER --group $GROUP --log-level debug \
      --log-file $LOGFILE 2>>$LOGFILE

2番目のスクリプト動作します; domain.com:8000でサイトがロードされます):

#!/bin/bash
  set -e
  LOGFILE=/var/log/gunicorn/hello.log
  LOGDIR=$(dirname $LOGFILE)
  NUM_WORKERS=3

  USER=lumiawor
  GROUP=lumiawor

  cd /home/lumiawor/public_html/test/hello
  source /home/lumiawor/public_html/test/bin/activate
  test -d $LOGDIR || mkdir -p $LOGDIR

  gunicorn_django -w $NUM_WORKERS -b 0.0.0.0:8000
      --user $USER --group $GROUP --log-level debug \
      --log-file $LOGFILE 2>>$LOGFILE

唯一の違いは、gunicorn_djangoの行にあります。バックスラッシュの意味は実際にはわかりません。gunicornにデフォルトのアドレスで実行するように指示しますか?

4

1 に答える 1

8

ブラックスラッシュは、1 つのコマンドを次の行に継続する方法にすぎません。

ここで重要なのは-b 0.0.0.0:8000 で、gunicorn にすべてのネットワーク インターフェイスでサービスを提供するように指示します。-b パラメータを指定しないと、127.0.0.1:8000 にバインドされ、ローカル マシンからのリクエストのみが処理されます。

ほとんどの場合、-b 0.0.0.0:8000 は、gunicorn が外部からの要求を直接処理している場合にのみ必要です。nginx またはその他のリバース プロキシ サーバー (一般的なセットアップ) を使用していて、gunicorn が同じマシンからのリクエストのみを処理するようにする場合は、最初のスクリプトを使用することをお勧めします。

典型的なセットアップは次のようになります。

  • ユーザー -> 0.0.0.0:80 でリッスンする nginx またはパブリック IP -> 127.0.0.1:8000 でリッスンする gunicorn

ところで、ifconfigコマンドを使用して、マシンの使用可能なインターフェースのリストを表示できます。

于 2013-02-05T02:37:57.633 に答える