在共享主机上访问Django Runserver
我正在一个共享主机服务(hostmonster)上开发一个Django应用程序,当然,我无法通过Firefox访问默认的本地地址127.0.0.1:8000上的runserver。Django项目网站的文档详细说明了如何设置远程访问run-server,但我一直没有成功。把runserver设置为0.0.0.0:8000后,依然无法访问。虽然我觉得这样可能不行,但我还是尝试把runserver配置为我家里的IP地址。结果出现了“该IP地址无法分配”的错误,正如我预料的那样。
于是,我尝试把它配置为我主机的IP地址,也就是我最开始通过SSH连接的那个地址。这个设置是成功的,但我还是无法通过Firefox访问这个地址。当我单独输入这个IP地址时,只会看到hostmonster的错误页面。当我加上端口号时,连接超时。当我输入IP、端口号和/admin来访问我创建的Django管理页面时,也同样超时。
4 个回答
首先,一个网络服务器通常有至少两个“接口”,每个接口可能有一个或多个IP地址。其中一个叫“回环”接口,它的IP地址是127.0.0.1,这个接口只能在运行服务器的那台机器上访问。
所以,当你在127.0.0.1:8000上运行时,你是在告诉服务器只允许自己访问这个地址,使用的是8000这个端口。这种方式比较安全,但在测试时有点麻烦。要在网页浏览器中查看结果,你需要用SSH隧道和端口转发来实现。(我可以解释怎么做,但老实说,这并不能解决你真正的问题。不过我会再提到这一点。)
如果你在:8000上运行,意味着你是在告诉服务器可以从互联网访问,这可能是你想要的。如果这样不行,那可能是因为防火墙阻止了这个端口。你可以联系支持人员请他们打开这个端口,或者使用SSH隧道,但在这之前我得问一下:你到底想要实现什么?
你不应该在生产环境中使用runserver。可以在本地机器上用runserver进行测试,然后再部署到Hostmonster。(根据他们的网站,他们支持通过FastCGI使用Django。)不要在Hostmonster上使用runserver,它无法满足你的需求。
运行命令:python manage.py runserver 0.0.0.0:8000
这个命令会把网站放在8000端口上,可以通过 http://site.com:8000/ 来访问。
运行命令:python manage.py runserver 0.0.0.0:80
(你需要有管理员权限)
这个命令会把网站放在80端口上,可以通过 http://site.com/ 来访问(这里的80端口是默认的,不需要特别说明)。
不过,你说你是在共享主机上,所以你没有管理员权限,不能像这样在80端口上运行网站。如果想在共享主机的80端口上运行网站,你需要在那个共享服务器上创建虚拟主机,而这只有在你拥有域名的情况下才能做到。
所以,出于测试的目的,我建议你使用8000端口,并通过 http://site.com:8000/ 从家里访问。
这里的0.0.0.0表示这个网站可以被所有的IP地址访问。(如果你没有域名,可以把site.com换成你的IP地址)
如果你还是无法访问,可能是因为这个服务器禁止用户使用端口,因为在有很多用户共享的服务器上,这样做并不容易。
关于在生产环境中(不)使用runserver的其他评论也适用。
如果你真的必须这样运行,我建议使用SSH隧道,方法是通过-L选项。
比如说,ssh -L 8888:127.0.0.1:8000 <user>@<remotehost>
这样你就可以通过 http://localhost:8888 在你的本地机器上查看网站了。
这是假设你只是想在开发过程中让自己能访问这个应用。