转发端口

时间:2018-02-08 14:13:57

标签: python django http debian webserver

我正在尝试从另一个网络上的另一个节点连接到我的网站。如果节点在同一网络中,我可以毫无问题地连接到网站。

我已经为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本身造成的?也许它是外防火墙?

1 个答案:

答案 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打开了本地防火墙,但可能有外部防火墙。

  1. python manage.py runserver 0.0.0.0:8000正确启动了吗?如果是这样,请留意日志。
  2. 在服务器内部,请执行请求wget http://localhost:8000。请记录该请求
  3. 如果您可以从服务器外部到达9080端口的Apache,您可以:
    • 使用nmap查找服务器中已打开/关闭/已过滤的端口,以查找其中是否存在其他防火墙。
    • 配置Apache以将请求转发到Django,虽然这不能解决问题
  4. 在你的问题中,你说你已经为ssh和Django转发了端口。究竟是什么?您确定没有错误配置您的ssh服务器以侦听端口8000吗?