외부 세계에서 로컬 Django 웹 서버에 액세스하는 방법


176

내장 웹 서버를 사용하여 Django를 실행하기 위해 여기 의 지침을 따르고 성공적으로 사용할 수있었습니다.python manage.py runserver . 웹 서버에서 로컬로 127.0.0.1:port에 액세스하면 장고 페이지가 표시됩니다.

Django 웹 서버는 프로덕션 서버가 아니라는 것을 알고 있지만 테스트 목적으로 외부 세계에서 액세스 할 수 있어야합니다. 즉 서버의 웹 브라우저가 아니라 다른 컴퓨터에서 액세스 할 수 있어야합니다.

나는 시도했다 :

http://mywebserver:port_django_runs_on

그러나 작동하지 않았습니다. 또한 대신 ifconfig를 기반으로 IP를 사용하여 액세스했습니다.

http://myipaddress:port_django_runs_on 

어느 것도 작동하지 않았습니다.

웹 서버가 실행 중이므로 외부에서 액세스 할 수 있어야합니다. 어떻게할지 모르겠습니다. 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 또는 호스트 이름으로 웹 서버에 액세스하는지 여부는 중요하지 않습니다. 당신은 여전히 ​​당신 자신의 LAN에 있다고 생각합니다.
외부에서 서버에 실제로 액세스하려면 서버와 같은 포트를 전달하도록 라우터를 구성 8000해야합니다.


사용중인 포트로 들어오는 연결이 허용되는지 서버의 방화벽을 확인하십시오!

외부에서 Apache 서버에 성공적으로 액세스 할 수 있다고 가정하면 다음을 시도 할 수도 있습니다.

  • 포트 80가 사용 가능 하도록 Apache 서버를 중지하십시오 .
  • 로 개발 서버를 시작하십시오. sudo python manage.py runserver 0.0.0.0:80

1
"python manage.py runserver 0.0.0.0:8000"을 사용하면 여전히 같은 결과가 나타납니다. 이 포트를 처리하도록 Apache를 구성하는 방법에 대해 더 말씀해 주시겠습니까?

1
@ user248237 : 개발 서버를 실행합니다. 이것은 Apache 웹 서버와 전혀 관련이 없습니다. 개발 서버는 독립형 웹 서버입니다.
Felix Kling

포트 80을 사용하려면 특별한 권한이 필요합니다 sudo python manage.py runserver 80.
S.Lott

@ S.Lott : 오 감사합니다. 키보드로하지 않았다 어떻게 든 쓴하지만 나는 알고, 내 마음에 있었다)
펠릭스 클링

1
모든 사람이 ALLOWED_HOSTS = ['*']내 Android 휴대 전화에서 Mac의 Django 앱에 액세스 하도록 허용
Anupam

28

작동하도록하려면이 줄을 settings.py에 추가해야했습니다 (그렇지 않으면 다른 컴퓨터에서 액세스 할 때 오류가 표시되었습니다)

ALLOWED_HOSTS = ['*']

그런 다음 서버를 다음과 같이 실행했습니다.

python manage.py runserver 0.0.0.0:9595

또한 방화벽이 해당 포트에 대한 연결을 허용하는지 확인하십시오


14

다음에서 하나 이상을 선택하십시오.

  • 응용 프로그램이 의도 한 IP : PORT에서 수신 대기하지 않습니다
    • 성공적으로 구성하지 않았기 때문에
    • 사용자에게 권한이 없기 때문에
  • 응용 프로그램이 의도 한 IP : PORT에서 수신 대기 중이지만 클라이언트가 연결할 수 없습니다.
    • 서버 로컬 iptables가이를 방지합니다.
    • 방화벽이이를 방지합니다.

따라서 lsof -i컴퓨터에서 루트 로 실행하여 응용 프로그램이 성공적으로 수신되는지 확인할 수 있습니다 .python 지정한 해당 포트가 항목을 수 있습니다.

루트가 아닌 사용자는 일반적으로 <1024 포트에 바인딩 할 수 없습니다.

당신은 볼 필요가 iptables -nvL 는 IP에 대한 액세스를 방지 할 규칙이 있는지 확인합니다 : 포트를 당신이 당신의 응용 프로그램을 결합하려고하는 것이다.

업스트림 방화벽이 있고 방화벽에 대해 잘 모르는 경우 네트워크 관리자에게 문의해야합니다.


설명 할 수 you haven't configured it successfully있습니까?
ChillarAnand

@ChillarAnand : 단순히 django runserver예를 들어를 사용하여 원하는 위치에서 실제로 듣고 있는지 확인하십시오 lsof.
MattH

@ChillarAnand 나는 당신이 지시 한 단계를 겪었습니다. 사용하면 lsof포트에 대한 파이썬 항목이 표시됩니다. 그러나 내 링크 즉 myip : 8000이 응답하지 않습니다. 나는 늦었지만 알고있는 제안이 도움이 될 것입니다.
WaterRocket8236

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 설치 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] 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.