Django网站可以在局域网内访问,局域网外的主机就不能访问网站,如何解决呢?
我的网站是在自己笔记本上做的,连接的是无线网192.168.1.111,使用IP地址是192.168.1.110的主机是可以访问的,
但是10.222.21.8这个主机无法访问,请问怎么解决呢
这很正常,运营商一般都会把80端口封了。你可以租用云服务器,好像学生可以1元使用3个月。
解决方案:
确认本机的IP地址,打开命令提示符,输入ipconfig命令查看本机的ipv4地址。例如本机ip为192.168.2.118。
在Django的settings.py文件中添加ALLOWED_HOSTS = ["*"],允许任何host进行访问。
在启动Django服务时,指定IP地址为本机IP地址,命令为python manage.py runserver 192.168.2.118:8000。
若要使其他局域网内的主机访问该站点,需要将之前指定的IP地址改为0.0.0.0,命令为python manage.py runserver 0.0.0.0:8000,同时需关闭防火墙。
若仍不能访问,则需检查网络配置是否正确,并根据错误提示进行排除。
在Django的views.py文件中添加获取访问者IP的方法,例如:
def get_request_ip(request):
try:
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0] # 所以这里是真实的ip
else:
ip = request.META.get('REMOTE_ADDR') # 这里获得代理ip
except:
ip = None
return HttpResponse("request_ip : %s" % ip)
该方法通过获取request对象中的HTTP_X_FORWARDED_FOR和REMOTE_ADDR属性来获取访问者的IP地址,并返回该IP地址。在网站访问统计和IP地址定位等方面具有重要的应用价值。
注:对于本题中的无法访问问题,根据参考资料3,还需将Django的ALLOWED_HOSTS配置为包括局域网内PC对应的外网ip,例如ALLOWED_HOSTS = ['192.168.1.110', '10.222.21.8']。