我正在尝试从另一个网络上的另一个节点连接到我的网站。如果节点在同一网络中,我可以毫无问题地连接到网站。
我已经为ssh和Django(8000)转发了端口,我也在端口9080上准备好了apache。
从外部ip地址连接到它们时,ssh和apache端口工作正常,Django没有出于某种原因。首先,我尝试在端口8000上运行服务器:
python manage.py runserver 0.0.0.0:8000
从与服务器位于同一网络的节点连接时,此功能完全正常,但出于某种原因,每当我尝试从外部IP地址访问它时,连接都会被拒绝。
为了确保它是Django,我也尝试在与Apache(9080
)相同的端口上运行服务器,但是,我没想到“没有错误”的响应,因为我知道端口被占用了。但是根本没有变化,我仍然得到了之前我会得到的相同的Apache页面。
我还尝试在防火墙上允许端口8000
:
sudo ufw allow 8000/tcp
但很确定这不是问题,因为这个Debian没有任何防火墙。
我还尝试在设置中清空ALLOWED_HOSTS
,但没有进展。
似乎Django对外部连接没有影响,原因可能是什么?
在这种情况下,我也很难理解其他http网络服务器平台的用途(例如Apache,Nginx),Django是不是自己创建了一个网络服务器及其自定义的wsgi?
防火墙不是问题,也不是Web服务器,那么问题可能是由Django本身造成的?也许它是外防火墙?
答案 0 :(得分:1)
目前尚不清楚如何配置Apache以将请求转发给Django,您似乎将它们视为两个独立的组件。如果你想在Django前面使用一个Web服务器(推荐用于生产环境),你需要配置Apache和Django。
然后,当您在开发模式(python manage.py runserver 0.0.0.0:8000
)中运行django时,无论Apache是什么,都应该在http://server_ip:8000中访问Django,也许还有另一个防火墙阻止连接。使用 tracert / traceroute 查找连接被阻止的位置。
最后,对于生产环境,建议在Django前使用Web服务器以提高安全性和性能。有关详细信息,请参阅docs。
我的猜测是你有另一个阻止该端口的防火墙。您使用ufw
打开了本地防火墙,但可能有外部防火墙。
python manage.py runserver 0.0.0.0:8000
正确启动了吗?如果是这样,请留意日志。wget http://localhost:8000
。请记录该请求nmap
查找服务器中已打开/关闭/已过滤的端口,以查找其中是否存在其他防火墙。在你的问题中,你说你已经为ssh和Django转发了端口。究竟是什么?您确定没有错误配置您的ssh服务器以侦听端口8000吗?