Django:错误:您无权访问该端口

时间:2016-05-25 10:22:10

标签: django python-2.7 virtualenv

我对这整个设置都很陌生,所以请你好。 在dev上,命令通常没有错误,但由于我一直在尝试使用不同的Django命令,因此出错了。

python manage.py runserver 0.0.0.0:80

我无权再使用此端口。我可以使用端口8080但是当我将端口添加到url中常用主机名末尾时,网站不起作用。当我使用端口80时,我从来没有必要添加:80到网址。

我有一个错误,我没有对日志文件的权限,但我更改了该文件的权限。现在似乎有很多我没有权限的东西。

Django 1.8.5。 使用虚拟环境,我在项目中有2个应用程序。

4 个答案:

答案 0 :(得分:2)

如果您使用Linux,则会收到此错误。

首先, Django没有生产服务器,只是一个非常基本的开发服务器,默认使用端口8080。

执行命令时

python manage.py runserver

你告诉django启动它的开发服务器并运行它,这样你就可以在部署到生产服务器之前测试你的web应用程序。

Django Documentation -> django-admin -> Run Server

访问服务器的方法是使用浏览器并插入地址栏中的URL

localhost:8080

默认情况下,除非另有说明,否则大多数HTTP应用程序在端口80上运行。例如,您的MySQL服务器默认情况下可以在端口3306上运行。

基本上,您可以将端口视为旧学校的电话线路,将您与想要与之通信的人联系起来。

这些都没有什么特别之处。你可能应该先玩瓶子来先掌握基础知识;只是一个友好的建议。

您可以深入了解网站上的详细信息。虽然不安全,但您可以使用sudo在端口80上运行,但出于安全考虑,您应该避免使用它。

@ mtt2p提到serverfault帖子,该帖子可以很好地解决原因

我确定有一种方法可以告诉服务器只允许本地连接,但是当你想向其他人展示你的作品或者看看你的作品时,你应该只使用0.0.0.0:80网络应用程序在其他设备上看起来像。

从长远来看,sudo更容易,更快,但又懒惰且不安全。

这是一个在virtualenv的背景下解释它的链接。

Django runserver error when specifying port

答案说明

  

我猜sudo命令会在超级用户中运行该进程   上下文,超级用户上下文缺少virtualenv设置。

     

创建一个shell脚本来设置virtualenv并调用manage.py   runserver,然后sudo这个脚本。

您应该注意,解释基于virtualenv的上下文的答案也是不安全的。它应该只是作为

运行
sudo python manage.py runserver 80

sudo bash script-name

在virtualenv之外。这样做会使打破你的应用程序的目的失败。如果你忽略了这一点,你就会将自己暴露给race condition

答案 1 :(得分:1)

sudo python manage.py runserver 0.0.0.0:80

您需要端口80的管理员权限

答案 2 :(得分:1)

我设置了一个名为“aira”的virtualenv并在根环境中安装了virtualenvwrapper(我在/root/.bashrc中的virtualenvwrapper设置位于底部)。这减少了我需要级联到-c以使runserver正常运行所需的sudo命令的数量:

sudo sh -c "workon aira && python manage.py runserver --insecure 0.0.0.0:80"

如果您设置的django应用virtualenv没有virtualenvwrapper,则需要手动更改到正确的目录并在sudo命令序列中激活virtualenv。我的virtualenv被称为aira,我将我的virtualenvs保留在/root/.virtualenvs。我的django项目位于ubuntu用户的主目录中:

sudo sh -c "source $HOME/.virtualenvs/aira/bin/activate && cd /ubuntu/src/aira/ && python manage.py runserver --insecure 0.0.0.0:80"

如果您已在系统站点包中安装了django和requirements.txt,那么您可以使用sudo来运行runserver。

sudo python manage.py runserver --insecure 0.0.0.0:80"

--insecure选项允许staticfiles为您的静态资源(图片,css,javascript)提供服务。

为了完整性,这是我在Ubuntu 16.04上的/root/.bashrc中的virtualenvwrapper配置变量:

# python3 is used for virtualenv and virtualenvwrapper
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 

# *root* reuses the virtualenvs in *ubuntu*'s home directory
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=/home/ubuntu/src

source /usr/local/bin/virtualenvwrapper.sh

答案 3 :(得分:1)

我在 Xubuntu 20.04 版本,我使用这个命令(因为我有一个 python 环境):

$ sudo ~/.virtualenvs/myproject/bin/python manage.py runserver 0.0.0.0:80

为了知道你的 envs python 文件夹在哪里,我做到了:

$ which python