Gunicorn 无法绑定端口 80

Gunicorn 无法绑定端口 80

我(想要)拥有一个运行 Gunicorn 服务器的 Google Cloud 服务器,但是尽管它是免费的,它却拒绝绑定到端口 80。

这是我用来启动它的命令:

gunicorn -w 4 -b 0.0.0.0:80 app:app

但我收到以下错误:

[2023-08-05 22:52:35 +0000] [8093] [INFO] Starting gunicorn 21.2.0
[2023-08-05 22:52:35 +0000] [8093] [ERROR] Retrying in 1 second.
[2023-08-05 22:52:36 +0000] [8093] [ERROR] Retrying in 1 second.
[2023-08-05 22:52:37 +0000] [8093] [ERROR] Retrying in 1 second.
[2023-08-05 22:52:38 +0000] [8093] [ERROR] Retrying in 1 second.
[2023-08-05 22:52:39 +0000] [8093] [ERROR] Retrying in 1 second.
[2023-08-05 22:52:40 +0000] [8093] [ERROR] Can't connect to ('0.0.0.0', 80)

但是当我运行 netstat 时,似乎没有其他任何东西使用该端口:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      867/sshd: /usr/sbin 
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      466/systemd-resolve 
tcp6       0      0 :::22                   :::*                    LISTEN      867/sshd: /usr/sbin 
udp        0      0 127.0.0.53:53           0.0.0.0:*                           466/systemd-resolve 
udp        0      0 10.152.0.5:68           0.0.0.0:*                           462/systemd-network 
udp        0      0 127.0.0.1:323           0.0.0.0:*                           1331/chronyd        
udp6       0      0 ::1:323                 :::*                                1331/chronyd

如果我使用任何其他端口,它都可以正常工作,但是我似乎无法从 TCP 扫描仪或 Web 浏览器访问它。我在 Google Cloud 上启用了 HTTP/S,并且我有另一个运行 Apache 的 VM。

答案1

当您运行 时sudo,它会$PATH用已知的“安全”路径替换您的(以避免当有人ls在您的用户中某处放置名为 的恶意命令$PATH并且突然您以 的身份运行时出现安全问题root)。

您可能只需运行:

sudo $(which gunicorn) -w 4 ...

这会将完全限定路径放在gunicorn命令行上,所以这$PATH并不重要。


还可以进行配置,以便非特权进程可以绑定低编号的端口。本文建议一些细粒度的每个程序或每个端口选项;您还可以将 sysctl 设置net.ipv4.ip_unprivileged_port_start为 0 以完全摆脱“特权端口”。

相关内容