如何在局域网内启用HTTP地理定位,实现多设备访问Django项目
完全可行,下面是两个适合新手的简易方案,既能让局域网内所有设备访问你的Django项目,又能满足地理定位所需的HTTPS安全环境要求:
方案一:Django自带服务器+自签名证书(局域网专属)
这是最直接的本地部署方式,无需额外安装复杂的Web服务器:
生成自签名HTTPS证书
在Linux终端执行以下命令,生成密钥文件key.pem和证书文件cert.pem(有效期1年,无需密码):openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes执行时按提示填写信息即可,内容不影响局域网使用。
启动带HTTPS的Django服务器
替换原来的启动命令,让服务器监听所有网卡(允许局域网设备访问)并加载证书:python manage.py runserver 0.0.0.0:8000 --cert cert.pem --key key.pem获取Linux主机的局域网IP
终端执行ip a,找到WiFi/以太网对应的局域网IP(格式类似192.168.1.100)。其他设备访问
在Win10的浏览器、Android手机的浏览器中输入https://你的Linux局域网IP:8000,比如https://192.168.1.100:8000。第一次访问浏览器会提示证书不安全,手动选择「继续访问」即可(不同浏览器操作略有差异,比如Chrome点「高级」->「继续前往xxx」)。此时HTTPS环境已满足,地理定位权限可以正常申请。
方案二:ngrok临时穿透(跨设备/临时测试)
如果不想折腾局域网配置,ngrok可以快速生成一个公网HTTPS地址,所有设备(包括局域网外)都能访问,适合临时测试:
- 下载ngrok到Linux主机(直接解压即可,无需安装)。
- 先启动普通的Django服务器:
python manage.py runserver。 - 新开一个终端执行:
终端会输出一个类似./ngrok http 8000https://xxxx-xx-xx-xx-xx.ngrok.io的HTTPS地址,所有设备直接访问这个地址即可,自带合法HTTPS证书,地理定位功能直接可用。
关键配置注意事项
修改Django的ALLOWED_HOSTS
打开项目的settings.py,把Linux局域网IP、ngrok地址(如果用方案二)添加进去,比如:ALLOWED_HOSTS = ['192.168.1.100', 'localhost', '*.ngrok.io']否则Django会拒绝外部设备的请求。
开放Ubuntu防火墙端口
如果Ubuntu开启了ufw防火墙,需要开放8000端口:sudo ufw allow 8000/tcp
内容的提问来源于stack exchange,提问作者rbaleksandar

