如何从外部访问本地Django web服务器
我按照这里的说明,使用内置的网络服务器运行Django,成功地用python manage.py runserver
命令启动了它。当我从网络服务器本地访问127.0.0.1:port时,能看到Django页面,说明它运行正常。
我知道Django的网络服务器并不适合用在生产环境,但对我来说,能从外部访问它很重要——也就是说,不是从服务器上的浏览器访问,而是从另一台电脑访问。
我尝试了:
http://mywebserver:port_django_runs_on
但没有成功。我还尝试用IP地址(根据ifconfig命令)来访问:
http://myipaddress:port_django_runs_on
但也没有成功。
网络服务器是运行着的,所以应该能从外部访问,只是我不太确定该怎么做。我在使用Linux和Apache,不过我还没有把Django和Apache配置在一起。
有没有什么办法可以做到这一点?
11 个回答
选择一个或多个可能的原因:
- 你的应用程序没有成功监听指定的IP和端口:
- 可能是因为你没有正确配置它。
- 可能是因为用户没有权限。
- 你的应用程序在指定的IP和端口上成功监听,但客户端无法访问,因为:
- 服务器的本地iptables设置阻止了访问。
- 防火墙阻止了访问。
所以,你可以通过在机器上以root身份运行 lsof -i
来检查你的应用程序是否成功监听,并查找与指定端口对应的 python
记录。
一般来说,非root用户无法绑定到小于1024的端口。
你需要查看 iptables -nvL
来确认是否有规则阻止你想要绑定的IP和端口的访问。
如果有一个上游防火墙,而你对它不太了解,你需要和你的网络管理员沟通。
为了让它正常工作,我需要在settings.py文件里加这一行(否则从其他电脑访问时会出现错误)
ALLOWED_HOSTS = ['*']
然后用下面的命令启动服务器:
python manage.py runserver 0.0.0.0:9595
还要确保防火墙允许连接到那个端口
你需要启动开发服务器,让它能够在你的网络接口上接收请求。
比如说:
python manage.py runserver 0.0.0.0:8000
这样就能在所有接口的8000端口上接收请求。
无论你是用IP地址还是主机名访问这个网页服务器都没关系。我猜你还是在自己的局域网里。
如果你真的想从外部访问这个服务器,你还需要配置你的路由器,把比如说8000
端口转发到你的服务器上。
检查一下你服务器上的防火墙,确保允许对正在使用的端口的外部连接!
假设你能成功从外部访问你的Apache服务器,你还可以尝试以下操作:
- 先停止Apache服务器,这样
80
端口就可以使用了。 - 然后用
sudo python manage.py runserver 0.0.0.0:80
启动开发服务器。