我有一个通过端口 5000 运行的 Flask 服务器,这很好。我可以在 http://example.com:5000 访问它
但是可以在 http://example.com 上简单地访问它吗?我假设这意味着我必须将端口从 5000 更改为 80。但是当我在 Flask 上尝试时,我在运行它时收到此错误消息。
Traceback (most recent call last):
File "xxxxxx.py", line 31, in <module>
app.run(host="0.0.0.0", port=int("80"), debug=True)
File "/usr/local/lib/python2.6/dist-packages/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
File "/usr/local/lib/python2.6/dist-packages/werkzeug/serving.py", line 706, in run_simple
test_socket.bind((hostname, port))
File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use
运行 lsof -i :80
返回
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 467 root 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 4413 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14346 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14570 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14571 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14573 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
我需要先杀死这些进程吗?那安全吗?还是有另一种方法可以让 Flask 在端口 5000 上运行,但主网站域以某种方式重定向?
原文由 quantumtremor 发布,翻译遵循 CC BY-SA 4.0 许可协议
所以它抛出了那个错误消息,因为你有
apache2
在端口 80 上运行。如果这是为了开发,我会把它留在端口 5000 上。
如果它用于生产:
不建议
apache2
;不推荐,因为它在文档中说明:
推荐的
HTTP
流量通过apache2
到 Flask。这样,
apache2
可以处理所有静态文件(它非常擅长 - 比 Flask 内置的调试服务器要好得多)并充当动态内容的反向代理,将这些请求传递给 Flask。这是有关使用 Apache + mod_wsgi 设置 Flask 的官方文档的链接。
编辑 1 - 澄清@Djack
当请求通过端口 80 (
HTTP
) 或端口 443 (HTTPS
) 到达服务器时,像 Apache 或 Nginx 这样的 Web 服务器会处理请求的连接并确定要做什么用它。在我们的例子中,接收到的请求应该被配置为通过 WSGI 协议传递给 Flask 并由 Python 代码处理。这是“动态”部分。像上面这样配置 Web 服务器有几个优点;