You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Django服务器默认端口遇权限及模块导入问题求助

AWS EC2上Django网站公开访问的端口问题解决

问题描述

想把AWS EC2上的Django网站设置为公开访问,尝试将默认端口从0.0.0.0:8000改为0.0.0.0:80时遇到两类错误:

1. 普通用户运行无端口权限

执行命令python3 manage.py runserver 0.0.0.0:80后报错:

System check identified no issues (0 silenced).
October 08, 2022 - 15:55:12
Django version 3.2.12, using settings 'config.settings'
Starting development server at http://0.0.0.0:80/
Quit the server with CONTROL-C.
Error: You don't have permission to access that port.

原因是1-1024端口属于系统特权端口,普通用户没有绑定权限。

2. sudo/root运行找不到Django

用sudo或切换到root用户执行命令时,出现模块找不到错误:

(venv) [ec2-user@ip-172-31-19-84 config]$ sudo python3 manage.py runserver 0.0.0.0:80

报错信息:

Traceback (most recent call last):
  File "manage.py", line 11, in main
    from django.core.management import execute_from_command_line
ModuleNotFoundError: No module named 'django'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 14, in main
    "Couldn't import Django. Are you sure it's installed and "
ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?

原因是虚拟环境是普通用户创建的,sudo/root不会继承普通用户的环境变量,因此找不到安装在虚拟环境中的Django。

解决方案

方法一:端口转发(推荐,无需root权限)

保留Django在8000端口运行,用iptables将80端口的流量转发到8000:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8000

执行完这条命令后,普通用户正常启动Django即可:

python3 manage.py runserver 0.0.0.0:8000

外部访问EC2的80端口时,流量会自动转到8000端口。

方法二:赋予普通用户绑定特权端口的权限

给虚拟环境中的Python二进制文件添加绑定特权端口的能力:

sudo setcap 'cap_net_bind_service=+ep' /home/ec2-user/venv/bin/python3

请将路径替换为你实际的虚拟环境Python路径(可以用which python3查看当前激活的虚拟环境Python路径)。设置完成后,普通用户可直接运行:

python3 manage.py runserver 0.0.0.0:80

方法三:用sudo指定虚拟环境的Python路径

直接使用虚拟环境中Python的绝对路径执行命令,避免环境变量丢失:

sudo /home/ec2-user/venv/bin/python3 manage.py runserver 0.0.0.0:80

同样,替换路径为你实际的虚拟环境Python路径即可。

注意事项

生产环境中不建议使用Django自带的runserver,因为它性能差且不安全。正式部署应该搭配Gunicorn(或uWSGI)作为应用服务器,Nginx作为反向代理来处理请求和静态文件。

内容的提问来源于stack exchange,提问作者dv_confusedcoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:10:28