让Gunicorn在80端口上运行

时间:2013-04-25 22:36:49

标签: python http gunicorn

我用烧瓶制作了一个API。我的应用程序没有任何静态资产,因此我没有理由使用nginx。

我希望在80号港口开枪。

我有一个“部署脚本”:

mkdir .log 2> /dev/null
DEBUG=0 gunicorn -b 0.0.0.0:80 backend:app --access-logfile .log/access.log --error-logfile .log/general.log

我希望用authbind在端口80上运行gunicorn。我在这里跟着这个guide

请注意,我可以运行authbind python -m SimpleHTTPServer 80

当我尝试运行authbind ./deployment.run 80时,

我看到以下错误:

2013-04-25 15:32:55 [24006] [ERROR] Can't connect to ('0.0.0.0', 80)
2013-04-25 15:33:08 [24018] [INFO] Starting gunicorn 0.17.4
2013-04-25 15:33:08 [24018] [ERROR] Retrying in 1 second.
2013-04-25 15:33:09 [24018] [ERROR] Retrying in 1 second.
2013-04-25 15:33:10 [24018] [ERROR] Retrying in 1 second.
2013-04-25 15:33:11 [24018] [ERROR] Retrying in 1 second.
2013-04-25 15:33:12 [24018] [ERROR] Retrying in 1 second.

为什么我无法将gunicorn绑定到端口80的任何想法?

有什么建议吗?

3 个答案:

答案 0 :(得分:24)

如果您处于类似unix的环境中,则端口< 1024(如80)将需要超级用户权限。

答案 1 :(得分:3)

尝试将authbind放入部署脚本中,例如:

mkdir .log 2> /dev/null
DEBUG=0 authbind gunicorn -b 0.0.0.0:80 backend:app --access-logfile .log/access.log --error-logfile .log/general.log

然后运行./deployment.run 80

(另外,您的脚本似乎没有使用任何参数;可能会将脚本中的80替换为$1?)

答案 2 :(得分:1)

您可以使用authbind来实现。 安装authbind

sudo apt-get install authbind

然后使用auth bind修改端口80,以确保非超级用户可以使用端口80(又名没有超级用户特权)。这是可以用来实现此目的的三个命令。

sudo touch /etc/authbind/byport/80
sudo chmod 500 /etc/authbind/byport/80
sudo chown USER /etc/authbind/byport/80

USER -可以是您系统上的任何用户,例如bhatman或ubuntu或ec2-user。

注意:只需将80更改为任何所需的端口,它将适用于任何端口。负责任地使用此为我的朋友。 :)

现在,您的gunicorn命令将如下所示:

authbind gunicorn -c gunicorn.conf wsgi:app

只需在您的gunicorn命令之前附加authbind

奖励:如果您在枪口之前使用了诸如newrelic等之类的命令,则需要在authbind之后添加--deep标志

authbind --deep newrelic-admin run-program gunicorn -c gunicorn.conf wsgi:app

有关authbind检出其ubuntu联机帮助页的更多信息:here

但是在盲目运行这些命令之前,我建议您阅读以下要点。

  1. Gunicorn是一个应用服务器,并不意味着直接在其中服务,最好在Nginx或AWS ALB等Web服务器之后使用它。
  2. 小于1024的端口是特权端口,不应那样打开或使用,您应该有充分的理由在此类端口上运行应用程序。

NGINX不是必不可少的,您可以使用任何Web服务器。您的架构应始终看起来像这样。

WEB SERVER (NGINX, AWS ALB etc) -> APPLICATION SERVER (Gunicorn, uWsgi etc) -> Application (Flask, Django etc)

希望这对您有所帮助。