在共享主机上访问Django Runserver

时间:2011-11-24 00:27:43

标签: python django django-admin timeout shared-hosting

我正在共享托管服务(hostmonster)上开发一个Django应用程序,当然,我无法通过Firefox访问127.0.0.1:8000的默认localhost ip上的runserver。 Django Project网站的文档详细说明了如何设置对运行服务器的远程访问,但我没有取得任何成功。将runserver设置为0.0.0.0:8000会使其无法访问。虽然我认为它不起作用,但我尝试将runserver配置为我的家庭IP地址。这给了我一个“无法分配IP地址”的错误,正如我所料。

所以,我尝试将它配置到我的托管IP,这是我首先通过SSH进行的。设置正确,但仍无法通过Firefox访问该地址。当我自己插入IP地址时,我只得到一个hostmonster错误页面。当我粘贴端口号时,连接超时。当我插入IP,端口号和/ admin来访问我创建的Django管理页面时,我也会超时。

4 个答案:

答案 0 :(得分:6)

有关(不)在生产环境中使用runserver的其他评论适用。

如果你真的必须这样运行,我建议使用SSH隧道,通过-L开关。

e.g。 ssh -L 8888:127.0.0.1:8000 <user>@<remotehost>

然后,您应该可以通过http://localhost:8888

在本地计算机上查看该网站

这假设您只是在开发过程中尝试将应用程序提供给自己。

答案 1 :(得分:2)

正在运行:python manage.py runserver 0.0.0.0:8000

在端口8000上托管网站,可以通过http://site.com:8000/

访问

正在运行:python manage.py runserver 0.0.0.0:80(您需要root访问权限)

它在端口80上托管网站,可以通过http://site.com/访问(此处隐含端口80)。

但是,既然你说你在共享主机上 - 所以你不会获得root访问权限,所以你不能像这样在端口80上托管。要在共享主机上移植端口80上的托管,您必须在该共享服务器上运行的Web服务器上创建虚拟主机,并且只有拥有域名才能完成。

因此,出于测试目的 - 我建议您使用端口8000并通过家中的http://site.com:8000/使用它。

此处,0.0.0.0表示托管所有IP范围。 (如果您没有域名,请使用您的IP地址更改site.com)

如果您仍然无法访问 - 这可能意味着该服务器上的用户端禁止端口托管,因为在拥有许多共享用户的共享服务器上这并不容易。

答案 2 :(得分:0)

我打赌端口8000被阻止了。这解释了你在最后几句中提到的超时:防火墙被设置为简单地丢弃数据包而不返回任何连接拒绝响应。

您是否需要询问您的托管公司是否有解决方法,但可能没有。至少,他们必须打开一个非root端口(8000或其他超过1023的端口),但操作系统无法告诉你何时打开端口或其他东西,所以它会是一个潜在的安全漏洞(例如,入侵者可以设置一些东西来监听该端口上的命令,就像你一样)。

runserver并非真正设计为在生产框上运行。它设计为在您的开发机器上运行,具有小型测试数据库或其他东西。这可以让你获得大部分的错误。然后将代码推送到测试版服务器,配置真实服务器应用程序(例如端口80上的apache)和数据库等,以进行大量测试(确保有一个过滤器,用于连接哪些IP,至少)。然后你从那里推向生产。或不;有很多方法可以做到这一点。

答案 3 :(得分:0)

首先,网络服务器通常至少有两个“接口”,每个接口都有一个或多个IP。 “loopback”接口将具有IP 127.0.0.1,并且只能从运行服务器的计算机访问。

因此,在127.0.0.1:8000上运行意味着你要告诉runserver只能从端口8000上的服务器本身访问。这是安全的,但有点粗略的测试。要在Web浏览器中查看结果,您需要使用带端口转发的SSH隧道。 (我会解释如何做到这一点,但老实说,它不会解决你的真正问题。但我会回过头来看。)

运行于:8000意味着您要告知可以从互联网访问runserver - 这可能就是您想要的。如果那不起作用,那么可能意味着他们正在防火墙端口。您可以联系支持人员并要求他们打开一个洞,或使用SSH隧道,但此时我不得不问:您想要实现什么目标?

您不应该使用runserver进行生产。使用本地计算机上的runserver进行测试,然后部署到Hostmonster。 (显然他们通过FastCGI支持Django,根据他们的网站。)不要在Hostmonster上使用runserver,它不会做你想要的。