【问题标题】:Getting Gunicorn to run on port 80让 Gunicorn 在 80 端口上运行
【发布时间】:2020-05-15 15:11:09
【问题描述】:

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

我希望在 80 端口上运行 gunicorn。

我有一个“部署脚本”:

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?

有什么建议吗?

【问题讨论】:

    标签: python http gunicorn


    【解决方案1】:

    如果您在类似 unix 的环境中,端口

    【讨论】:

    • authbind 的全部目的不就是覆盖它吗?
    【解决方案2】:

    尝试将 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?)

    【讨论】:

    【解决方案3】:

    您可以使用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

    BONUS:如果你在 gunicorn 之前使用了一些命令,比如 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 不是 gunicorn 的必需品,您可以使用任何 Web 服务器。您的架构应始终如下所示。

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

    希望对你有所帮助。

    【讨论】:

    • 如果有人来这里寻找如何为 apache 气流执行此操作,我运行上面的程序然后启动网络服务器:authbind --dep 气流网络服务器......这让我可以运行将 mydomain-airflow.com 指向托管气流的 EC2 实例的 IP 地址的记录,而不是每次访问 Web 服务器时都使用一个 IP 地址
    猜你喜欢
    • 2015-02-22
    • 1970-01-01
    • 2011-06-16
    • 2018-11-04
    • 1970-01-01
    • 2011-11-13
    • 2012-02-12
    • 1970-01-01
    • 2011-08-31
    相关资源
    最近更新 更多