2011-11-24 69 views
2

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

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

+1

你应该确保你的主机甚至允许,也许他们阻止所有端口 – armonge

回答

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隐含在这里)。

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

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

这里,0.0.0.0表示它承载所有IP范围。 (如果您没有域名,请将您的ip地址更改为site.com)

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

0

我打赌8000端口被封锁了。这解释了您在前几句话中提到的超时:防火墙设置为只丢弃数据包,不返回任何连接拒绝响应。

如果有办法解决这个问题,你将不得不问问你的托管公司,但可能没有。至少,他们将不得不打开一个非根端口(8000或其他超过1023的端口),但操作系统无法分辨何时打开端口或其他东西,所以它将成为潜在的安全漏洞(例如,入侵者可以设置一些东西来侦听该端口上的命令,就像你一样)。

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

0

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

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

运行:8000意味着你告诉runserver可以从互联网 - 这可能是你想要的。如果这不起作用,那么它可能意味着他们正在对端口进行防火墙。你可以联系支持人员,让他们打开一个洞,或者使用SSH隧道,但是现在我必须问:你想达到什么目的?

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

6

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

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

例如ssh -L 8888:127.0.0.1:8000 <user>@<remotehost>

那么你应该能够通过http://localhost:8888

这是假设你只是试图让该应用程序提供给自己的发展过程中查看该网站在本地机器上。

+0

当然,但如果你使用gunicorn,你也面临类似的问题。如果网站在主机上运行,​​那么应该可以采用某种形式的反向代理来将网站提供给全世界。仍然四处寻找一个好的图书馆。可以写一个作为反向代理的PHP脚本,但那会很愚蠢。 – danbgray