Cách truy cập máy chủ web Django địa phương từ thế giới bên ngoài


176

Tôi đã làm theo các hướng dẫn ở đây để chạy Django bằng máy chủ web tích hợp và có thể chạy thành công bằng cách sử dụng python manage.py runserver. Nếu tôi truy cập 127.0.0.1:port cục bộ từ máy chủ web, tôi nhận được trang Django cho biết nó hoạt động.

Tôi nhận ra máy chủ web Django không phải là máy chủ sản xuất, nhưng điều quan trọng đối với tôi là mục đích thử nghiệm để có thể truy cập nó từ thế giới bên ngoài - tức là không phải từ trình duyệt web trên máy chủ, mà từ một máy tính khác.

Tôi đã thử:

http://mywebserver:port_django_runs_on

nhưng nó không hoạt động. Tôi cũng đã thử sử dụng IP thay thế (dựa trên ifconfig) để truy cập:

http://myipaddress:port_django_runs_on 

mà cũng không hoạt động.

Máy chủ web đang chạy nên phải truy cập được từ bên ngoài, tôi chỉ không biết làm thế nào. Tôi đang chạy Linux với Apache, mặc dù tôi chưa cấu hình Django với Apache.

Có ý tưởng nào để làm việc này không?


3
Tại sao không cấu hình Django với Apache và mod_wsgi? Tại sao không làm điều này đúng?
S.Lott

@ S.Lott Điều gì xảy ra nếu bạn có nhiều dự án khác nhau trên máy chủ mà bạn muốn chạy vào các thời điểm khác nhau và bạn và bạn không muốn định cấu hình lại Apache mỗi khi bạn thêm dự án mới?
robenkleene

Câu trả lời:


303

Bạn phải chạy máy chủ phát triển để nó lắng nghe trên giao diện với mạng của bạn.

Ví dụ

python manage.py runserver 0.0.0.0:8000

lắng nghe trên mọi giao diện trên cổng 8000.

Việc bạn truy cập máy chủ web bằng IP hay tên máy chủ không thành vấn đề. Tôi đoán bạn vẫn còn trong mạng LAN của riêng bạn.
Nếu bạn thực sự muốn truy cập máy chủ từ bên ngoài, bạn cũng phải định cấu hình bộ định tuyến của mình để chuyển tiếp cổng, ví dụ như 8000đến máy chủ của bạn.


Kiểm tra tường lửa của bạn trên máy chủ của bạn xem các kết nối đến cổng đang sử dụng có được phép không!

Giả sử bạn có thể truy cập máy chủ Apache của mình từ bên ngoài thành công, bạn cũng có thể thử điều này:

  • Dừng máy chủ Apache, để cổng đó 80miễn phí.
  • Bắt đầu máy chủ phát triển với sudo python manage.py runserver 0.0.0.0:80

1
Sử dụng "python Manage.py ranerver 0.0.0.0:8000" vẫn cho kết quả tương tự. Bạn có thể nói thêm về cách tôi có thể cấu hình Apache để xử lý cổng này không?

1
@ user248237: Bạn chạy máy chủ phát triển, điều này hoàn toàn không liên quan đến máy chủ web Apache. Máy chủ phát triển là một máy chủ web độc lập.
Felix Kling

Nó đòi hỏi các đặc quyền đặc biệt để sử dụng cổng 80. Bạn có thể thử a sudo python manage.py runserver 80.
S.Lott

@ S.Lott: Ồ cảm ơn bạn. Tôi biết, đó là trong tâm trí của tôi khi viết nó nhưng bằng cách nào đó đã không làm cho nó vào bàn phím;)
Felix Kling

1
Cho phép mọi người ALLOWED_HOSTS = ['*']làm việc để tôi truy cập ứng dụng Django trên máy Mac từ điện thoại Android của tôi
Anupam

28

Tôi đã phải thêm dòng này vào settings.py để làm cho nó hoạt động (nếu không nó đã báo lỗi khi được truy cập từ một máy tính khác)

ALLOWED_HOSTS = ['*']

sau đó chạy máy chủ với:

python manage.py runserver 0.0.0.0:9595

Cũng đảm bảo rằng tường lửa cho phép kết nối với cổng đó


14

Chọn một hoặc nhiều từ:

  • Ứng dụng của bạn không nghe thành công trên IP dự định: PORT
    • Bởi vì bạn chưa cấu hình thành công
    • Bởi vì người dùng không có quyền
  • Ứng dụng của bạn đang nghe thành công trên IP dự định: PORT, nhưng khách hàng không thể truy cập được vì
    • Các iptables máy chủ cục bộ ngăn chặn nó.
    • Một tường lửa ngăn chặn nó.

Vì vậy, bạn có thể kiểm tra xem ứng dụng của bạn có nghe thành công hay không bằng cách chạy lsof -iroot trên máy và tìm kiếmpython mục nhập với cổng tương ứng bạn đã chỉ định.

Người dùng không root thường không thể liên kết với các cổng <1024.

Bạn sẽ cần xem xét iptables -nvLxem liệu có một quy tắc nào có thể ngăn truy cập vào cổng ip: mà bạn đang cố gắng ràng buộc ứng dụng của mình không.

Nếu có tường lửa ngược dòng và bạn không biết nhiều về nó, bạn sẽ cần nói chuyện với quản trị viên mạng của mình.


bạn có thể giải thích you haven't configured it successfully?
ChillarAnand 20/07/2015

@ChillarAnand: chỉ đơn giản là bạn kiểm tra xem django runserverthực sự đang lắng nghe bạn dự định ở đâu, ví dụ như sử dụng lsof.
MattH 20/07/2015

@ChillarAnand Tôi đã trải qua các bước bạn hướng dẫn. Sử dụnglsof tôi thấy một mục python cho cổng của tôi. Nhưng liên kết của tôi tức là myip: 8000 không phản hồi. Tôi biết muộn nhưng bất kỳ đề nghị sẽ giúp.
WaterRocket8236

8

chỉ cần làm điều này:

python manage.py runserver 0:8000

bằng lệnh trên, bạn thực sự ràng buộc nó với địa chỉ IP bên ngoài. vì vậy bây giờ khi bạn truy cập địa chỉ IP của mình bằng số cổng, bạn sẽ có thể truy cập nó trong trình duyệt mà không gặp vấn đề gì.

chỉ cần gõ như sau vào thanh địa chỉ trình duyệt:

<your ip address>:8000

ví dụ:

192.168.1.130:8000

bạn có thể phải chỉnh sửa cài đặt cài đặt, thêm phần sau vào phần cài đặt ở dòng cuối cùng:

ALLOWED_HOSTS = ['*']

hy vọng điều này sẽ giúp ...


5

Dành cho người dùng AWS.

Tôi đã phải sử dụng các bước sau để đạt được điều đó.

1) Đảm bảo rằng pip và django được cài đặt ở cấp độ sudo

  • sudo apt-get cài đặt python-pip
  • sudo pip cài đặt django

2) Đảm bảo rằng nhóm bảo mật trong các quy tắc ràng buộc bao gồm http trên cổng 80 cho 0.0.0.0/0

  • được cấu hình thông qua bảng điều khiển AWS

3) Thêm IP công cộng và DNS vào ALLOWED_HOSTS

  • ALLOWED_HOSTS là một đối tượng danh sách mà bạn có thể tìm thấy trong settings.py
  • ALLOWED_HOSTS = ["75.254,65.19", "ec2-54-528-27-21.compute-1.amazonaws.com"]

4) Khởi chạy máy chủ phát triển với sudo trên cổng 80

  • sudo python Manage.txt ranerver 0:80

Trang web hiện có sẵn tại một trong các mục sau (không cần: 80 vì đó là mặc định cho http):

  • [DNS công cộng] tức là ec2-54-528-27-21.compute-1.amazonaws.com
  • [IP công cộng] tức là 75.254,65.19

2

Tôi sẽ thêm cái này vào đây:

  1. sudo python manage.py runserver 80

  2. Truy cập điện thoại hoặc máy tính của bạn và nhập IP nội bộ của máy tính (ví dụ 192.168.0.12) vào trình duyệt.

Tại thời điểm này, bạn nên kết nối với máy chủ Django.

Điều này cũng sẽ làm việc mà không có sudo:

python manage.py runserver 0.0.0.0:8000

0

Nếu bạn đang sử dụng Docker, bạn cần đảm bảo rằng các cổng cũng được hiển thị


0

CẬP NHẬT 2020 THỬ CÁCH NÀY

python manage.py runserver yourIp:8000

ALLOWED_HOSTS = ["*"]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.