如何在不指定端口号的情况下运行Django应用?
不指定端口运行Django应用的实现方法
我们常说的「不指定端口访问Django应用」本质是让服务绑定HTTP默认的80端口或HTTPS默认的443端口,这两个端口属于协议默认端口,访问时不需要在URL里显式标注端口号。
本地开发临时使用
Django自带的runserver工具可以直接指定绑定默认端口,注意1024以下的端口绑定需要管理员权限:
- Windows系统:用管理员权限打开命令行,执行命令:
python manage.py runserver 80 - Linux/macOS系统:在命令前加sudo获取root权限,执行命令:
sudo python manage.py runserver 80 - 如需使用HTTPS访问,绑定443端口即可:
sudo python manage.py runserver 443
完成启动后直接访问http://localhost或对应设备IP即可,无需加端口后缀。
生产环境正式部署
生产环境不推荐使用Django自带的runserver服务,性能和安全性都不符合要求,推荐用Nginx反向代理的方案实现:
- 第一步:用Gunicorn或uWSGI启动Django服务,绑定本地内部端口,示例:
gunicorn 你的项目名.wsgi:application --bind 127.0.0.1:8000 - 第二步:配置Nginx监听80端口,将外部请求转发到Django服务上,配置示例如下:
server { listen 80; server_name 你的服务器IP或绑定的域名; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
- 第三步:重启Nginx使配置生效,直接访问配置的IP或域名即可,无需加端口。如需配置HTTPS,在Nginx中监听443端口并配置SSL证书即可。
常见配置失效排查
如果按上述方法配置后不生效,可以从以下几个维度排查:
- 端口被占用:检查80/443端口是否被其他服务(如Apache、IIS、其他WEB服务)占用,Linux执行
lsof -i:80查看占用进程,Windows执行netstat -ano | findstr "80"查看 - 权限不足:Linux/macOS系统下绑定1024以下端口必须有root权限,未加sudo会启动失败
- 防火墙/安全组拦截:如果部署在云服务器上,需要确认云服务商安全组入方向放行了80/443端口,服务器内部的firewalld、ufw等防火墙也需要放行对应端口
内容的提问来源于stack exchange,提问作者Peter Nanii
相关产品推荐
相关产品推荐

