我(想要)拥有一个运行 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 以完全摆脱“特权端口”。