在共享主机上访问Django Runserver



我正在一个共享主机服务(hostmonster)上开发一个Django应用程序,当然,我无法通过Firefox访问默认本地主机ip 127.0.0.1:8000上的runserver。Django项目网站的文档详细说明了如何设置对run-server的远程访问,但我没有任何成功。将runserver设置为0.0.0.0:8000将使其无法访问。虽然我认为它不会工作,但我尝试将runserver配置为我的家庭ip地址。这给了我一个"这个IP地址不能被分配"的错误,正如我所料。

因此,我尝试将其配置为我的托管IP,即我首先通过SSH的IP。设置正确,但仍然无法通过Firefox访问该地址。当我自己插入IP地址时,我只得到一个hostmonster错误页面。当我添加端口号时,连接超时。当我插入IP,端口号和/admin来访问我创建的Django管理页面时,我也超时了。

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

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

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

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

查看本地机器上的站点

Running: 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范围的主机。(如果您没有域名,请将site.com更改为您的IP地址)

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

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

你要问你的托管公司是否有办法解决这个问题,但可能没有办法。至少,他们必须打开一个非根端口(8000或其他超过1023的端口),但是操作系统无法判断你何时打开端口或其他端口,因此这将是一个潜在的安全漏洞(例如,入侵者可以设置一些东西来监听该端口上的命令,就像你一样)。

runserver并不是真正设计为在生产设备上运行的。它被设计为在您的开发机器上运行,带有一个小型测试数据库或其他东西。这可以让你清除大部分的bug。然后你把你的代码推送到一个beta服务器,配置了真正的服务器应用程序(例如apache在端口80上)和数据库等,做繁重的测试(确保有一个过滤器可以连接什么ip,至少)。然后从那里开始投入生产。不信;有很多方法可以做到这一点

首先,一个web服务器通常至少有两个"接口",每个接口有一个或多个ip。"环回"接口的IP地址为127.0.0.1,并且只能从运行服务器的机器访问。

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

Running on:8000意味着你正在告诉runserver可以从互联网访问——这可能是你想要的。如果这不起作用,那么可能意味着他们在端口设置了防火墙。您可以联系支持人员并要求他们打开一个洞,或者使用SSH隧道,但此时我必须问:您想要实现什么?

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

相关内容

  • 没有找到相关文章