外の世界からローカルのDjangoウェブサーバーにアクセスする方法


176

ここで説明する手順に従って、組み込みのWebサーバーを使用してDjangoを実行したところ、を使用してDjangoを正常に実行できましたpython manage.py runserver。Webサーバーからローカルに127.0.0.1:portにアクセスすると、Djangoページが表示され、機能していることがわかります。

Djangoウェブサーバーは本番サーバーではないことに気づきましたが、私にとってはテスト目的で外部から、つまりサーバー上のWebブラウザーからではなく、別のコンピューターからアクセスできることが重要です。

私は試した:

http://mywebserver:port_django_runs_on

しかし、それはうまくいきませんでした。代わりに(ifconfigに基づいて)IPを使用してアクセスしてみました:

http://myipaddress:port_django_runs_on 

どちらも機能しませんでした。

Webサーバーが実行されているので、外部からアクセスできる必要があります。方法はわかりません。ApacheでDjangoを設定していませんが、ApacheでLinuxを実行しています。

これを行う方法に関するアイデアはありますか?


3
Apacheとmod_wsgiでDjangoを設定しないのはなぜですか?これを正しく行わないのはなぜですか?
S.Lott、

@ S.Lottサーバー上に異なる時間に実行したい多くの異なるプロジェクトがあり、新しいプロジェクトを追加するたびにApacheを再構成したくない場合はどうでしょうか。
robenkleene

回答:


303

ネットワークへのインターフェースリッスンするように開発サーバーを実行する必要があります。

例えば

python manage.py runserver 0.0.0.0:8000

でリッスンし、すべてのポート8000上のインターフェイス。

IPとホスト名のどちらでWebサーバーにアクセスするかは関係ありません。あなたはまだあなた自身のLANにいると思います。
外部からサーバーに本当にアクセスしたい場合は、ルーターを構成して、ポート8000をサーバーなどに転送する必要があります。


使用中のポートへの着信接続が許可されているかどうか、サーバーのファイアウォールを確認してください!

外部からApacheサーバーに正常にアクセスできると仮定して、これを試すこともできます。

  • Apacheサーバーを停止して、ポート80を解放します。
  • 開発サーバーを起動します sudo python manage.py runserver 0.0.0.0:80

1
「python manage.py runserver 0.0.0.0:8000」を使用しても、同じ結果が得られます。このポートを処理するようにApacheを構成する方法について詳しく教えてください。

1
@ user248237:開発サーバーを実行します。これは、Apache Webサーバーとはまったく関係ありません。開発サーバーはスタンドアロンのWebサーバーです。
Felix Kling

ポート80を使用するには特別な権限が必要sudo python manage.py runserver 80です。
S.Lott

@ S.Lott:ありがとうございます。私が知っていることは、書いたとおり私の心の中にありましたが、どういうわけかキーボードに到達しませんでした;)
Felix Kling

1
誰もALLOWED_HOSTS = ['*']が私のために働いて、私のAndroidフォンからMac上のDjangoアプリにアクセスできるようにする
Anupam '28

28

この行を機能させるために、settings.pyにこの行を追加する必要がありました(そうしないと、別のコンピューターからアクセスしたときにエラーが表示されました)。

ALLOWED_HOSTS = ['*']

次に、次のコマンドでサーバーを実行しました。

python manage.py runserver 0.0.0.0:9595

ファイアウォールがそのポートへの接続を許可していることも確認してください


14

以下から1つ以上選択してください:

  • アプリケーションが目的のIP:PORTを正常にリッスンしていません
    • 正しく設定していないため
    • ユーザーには権限がないため
  • アプリケーションは意図したIP:PORTで正常にリッスンしていますが、クライアントはそれに到達できません。
    • サーバーのローカルiptablesはそれを防ぎます。
    • ファイアウォールがそれを防ぎます。

したがって、lsof -iマシンでrootとして実行することにより、アプリケーションが正常にリッスンしていることを確認し、python指定した対応するポートを持つエントリを探すことができます。

非rootユーザーは通常、1024未満のポートにバインドできません。

あなたは見てする必要がありますiptables -nvLあなたがあなたのアプリケーションをバインドしようとしているポート:IPへのアクセスを妨げるルールがありますかどうかを確認します。

アップストリームファイアウォールがあり、それについてよく知らない場合は、ネットワーク管理者に相談する必要があります。


説明できますyou haven't configured it successfullyか?
ChillarAnand

@ChillarAnand:を使用して、django runserver意図した場所で実際にリスニングしていることを確認するだけですlsof
MattH 2015

@ChillarAnand私はあなたが指示した手順を実行しました。使用してlsof、私は私のポートのためのpythonのエントリを参照してください。しかし、私のリンク、つまりmyip:8000が応答していません。私は遅いことを知っていますが、どんな提案も役立ちます。
WaterRocket8236 2017

8

これを行うだけです:

python manage.py runserver 0:8000

上記のコマンドにより、実際に外部IPアドレスにバインドしています。これで、ポート番号を使用してIPアドレスにアクセスすると、ブラウザーで問題なくアクセスできるようになります。

ブラウザのアドレスバーに次のように入力するだけです。

<your ip address>:8000

例えば:

192.168.1.130:8000

settings.pyを編集する必要があるかもしれません、最後の行のsettings.pyに以下を追加してください:

ALLOWED_HOSTS = ['*']

これが役立つことを願っています...


5

AWSユーザー向け。

私はそこに着くために次のステップを使わなければなりませんでした。

1) pipとdjangoがsudoレベルでインストールされていることを確認します

  • sudo apt-get install python-pip
  • sudo pip install django

2)セキュリティグループのインバウンドルールに0.0.0.0/0のポート80のhttpが含まれていることを確認します

  • AWSコンソールから設定

3) ALLOWED_HOSTSにパブリックIPとDNSを追加します

  • ALLOWED_HOSTSは、settings.pyにあるリストオブジェクトです。
  • ALLOWED_HOSTS = ["75.254.65.19"、 "ec2-54-528-27-21.compute-1.amazonaws.com"]

4)ポート80でsudoを使用して開発サーバーを起動します。

  • sudo python manage.py runserver 0:80

サイトは次のいずれかで利用できるようになりました(httpのデフォルトなので、:80は不要です)。

  • [パブリックDNS] ie ec2-54-528-27-21.compute-1.amazonaws.com
  • [パブリックIP]つまり75.254.65.19

2

これをここに追加します。

  1. sudo python manage.py runserver 80

  2. 電話またはコンピューターに移動し、コンピューターの内部IP(例192.168.0.12:)をブラウザーに入力します。

この時点で、Djangoサーバーに接続されているはずです。

これはsudoがなくても機能するはずです。

python manage.py runserver 0.0.0.0:8000


0

2020年更新この方法を試す

python manage.py runserver yourIp:8000

ALLOWED_HOSTS = ["*"]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.