【问题标题】:Can't run gunicorn on port 80 while deploying django app on AWS EC2在 AWS EC2 上部署 django 应用程序时无法在端口 80 上运行 gunicorn
【发布时间】:2015-11-24 17:37:41
【问题描述】:

我在我的 EC2 AWS 中运行 Ubuntu 14.04 实例。

我可以跑gunicorn -b 0.0.0.0:8000 myapp.wsgi

但在 80 端口运行失败

gunicorn -b 0.0.0.0:80 myapp.wsgi --> 失败

我试图遵循这个答案(虽然我不明白,什么是部署脚本?)Getting Gunicorn to run on port 80

但是没有用。

我还尝试以提升权限sudo 运行它,但徒劳无功。 在 80 端口运行时出错:

ubuntu@ip-172-31-39-159:~/jeequery$ gunicorn -b 0.0.0.0:80 rubiks.wsgi
[2015-08-30 15:58:10 +0000] [6772] [INFO] Starting gunicorn 19.3.0
[2015-08-30 15:58:10 +0000] [6772] [ERROR] Retrying in 1 second.
[2015-08-30 15:58:11 +0000] [6772] [ERROR] Retrying in 1 second.
[2015-08-30 15:58:12 +0000] [6772] [ERROR] Retrying in 1 second.
[2015-08-30 15:58:13 +0000] [6772] [ERROR] Retrying in 1 second.
[2015-08-30 15:58:14 +0000] [6772] [ERROR] Retrying in 1 second.
[2015-08-30 15:58:15 +0000] [6772] [ERROR] Can't connect to ('0.0.0.0', 80)

在使用sudo 运行时出现此错误:

ubuntu@ip-172-31-39-159:~$ gunicorn -b 0.0.0.0:80 rubiks.wsgi
[2015-08-30 16:48:09 +0000] [6943] [INFO] Starting gunicorn 19.3.0
[2015-08-30 16:48:09 +0000] [6943] [ERROR] Retrying in 1 second.
[2015-08-30 16:48:10 +0000] [6943] [ERROR] Retrying in 1 second.
[2015-08-30 16:48:11 +0000] [6943] [ERROR] Retrying in 1 second.
^C[2015-08-30 16:48:12 +0000] [6943] [ERROR] Retrying in 1 second.
[2015-08-30 16:48:13 +0000] [6943] [ERROR] Retrying in 1 second.
[2015-08-30 16:48:14 +0000] [6943] [ERROR] Can't connect to ('0.0.0.0', 80)
ubuntu@ip-172-31-39-159:~$ ^C
ubuntu@ip-172-31-39-159:~$ sudo gunicorn -b 0.0.0.0:80 rubiks.wsgi
[2015-08-30 16:48:21 +0000] [6947] [INFO] Starting gunicorn 19.3.0
[2015-08-30 16:48:21 +0000] [6947] [INFO] Listening at: http://0.0.0.0:80 (6947)
[2015-08-30 16:48:21 +0000] [6947] [INFO] Using worker: sync
[2015-08-30 16:48:21 +0000] [6950] [INFO] Booting worker with pid: 6950
[2015-08-30 16:48:21 +0000] [6950] [ERROR] Exception in worker process:
Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/gunicorn/arbiter.py", line 507, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python3.4/dist-packages/gunicorn/workers/base.py", line 118, in init_process
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python3.4/dist-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python3.4/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/usr/local/lib/python3.4/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/local/lib/python3.4/dist-packages/gunicorn/util.py", line 355, in import_app
    __import__(module)
ImportError: No module named 'rubiks'
Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/gunicorn/arbiter.py", line 507, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python3.4/dist-packages/gunicorn/workers/base.py", line 118, in init_process
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python3.4/dist-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python3.4/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/usr/local/lib/python3.4/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/local/lib/python3.4/dist-packages/gunicorn/util.py", line 355, in import_app
    __import__(module)
ImportError: No module named 'rubiks'
[2015-08-30 16:48:21 +0000] [6950] [INFO] Worker exiting (pid: 6950)
[2015-08-30 16:48:21 +0000] [6947] [INFO] Shutting down: Master
[2015-08-30 16:48:21 +0000] [6947] [INFO] Reason: Worker failed to boot.

【问题讨论】:

  • 失败是什么意思?请详细说明错误。
  • @beezz 用错误日志更新了答案
  • 您确定要执行此操作吗? gunicorn 并不适合直接暴露在互联网上;通常你会在反向代理后面运行它。由于您已经运行了 nginx,因此您应该重新启用它并按原样使用它。
  • 正如我所说,您在端口 80 上运行 nginx,并将其用作 gunicorn 前面的反向代理。不要尝试在端口 80 上运行 gunicorn 本身。gunicorn 文档有一个完整的配置示例。

标签: python django amazon-web-services amazon-ec2 gunicorn


【解决方案1】:

按照 cmets 的建议,不建议在端口 80 上运行 gunicorn

我们改为在大于 1024(非特权端口)的端口上运行它,并通过反向 poxy 请求到在 gunicorn 上运行的大于 1014 的端口。

这可以通过编辑nginx 配置文件来完成。

【讨论】:

  • 这不能回答问题。提问者特别提到他希望gunicorn在80端口上运行。您建议使用nginx作为反向代理,然后在8000端口上运行gunicorn。如果我们不想使用nginx或任何其他反向代理服务器怎么办?
【解决方案2】:

**您的安全组好像没有添加80端口..

您还必须在命令访问端口 80 之前使用sudo

希望这会有所帮助**

【讨论】:

    猜你喜欢
    • 2019-03-01
    • 2021-12-12
    • 1970-01-01
    • 2021-06-05
    • 2015-01-07
    • 1970-01-01
    • 2021-08-22
    • 2014-05-21
    • 2017-06-12
    相关资源
    最近更新 更多