当前位置: 首页 > 知识库问答 >
问题:

我如何让烧瓶运行在端口80上?

邓业
2023-03-14

我有一个通过5000端口运行的烧瓶服务器,它很好。我可以访问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上运行,但可以用某种方式重定向主网站域?

共有1个答案

燕飞文
2023-03-14

因为apache2在端口80上运行,所以它会抛出错误消息。

如果这是为了开发,我会把它留在5000端口上。

如果是用于生产:

不推荐

  • 首先停止Apache2

不推荐,如文档中所述:

您可以在开发期间使用内置服务器,但对于生产应用程序,您应该使用完全部署选项。(不要在生产中使用内置的开发服务器。)

推荐

  • 代理HTTP通过Apache2flask的流量。

这样,Apache2就可以处理所有静态文件(它非常擅长这一点--比Flask内置的调试服务器好得多),并充当动态内容的反向代理,将请求传递给Flask。

下面是关于使用Apache+mod_wsgi设置Flask的官方文档的链接。

编辑1-@djack的澄清

通过apache2到Flask的代理HTTP流量

当请求到达端口80(HTTP)或端口443(HTTPS)上的服务器时,web服务器(如Apache或Nginx)将处理请求的连接,并确定如何处理请求。在我们的示例中,应该将接收到的请求配置为通过WSGI协议传递到Flask,并由Python代码处理。这就是“动态”部分。

动态内容的反向代理

像上面这样配置您的web服务器有几个优点;

  • SSL终止-将对web服务器进行优化,以仅需少量配置即可处理HTTPS请求。不要在Python中“自己滚”,因为相比较而言,这可能是非常不安全的。
  • 安全性-将端口打开到internet需要仔细考虑安全性。Flask的开发服务器并不是为这一目的而设计的,与为这一目的而设计的web服务器相比,它可能存在开放的bug或安全问题。请注意,配置错误的web服务器也可能是不安全的!
  • 静态文件处理-内置Flask web服务器可以处理静态文件,但不建议这样做;Nginx/Apache在处理静态文件(如图像、CSS、Javascript文件)时要高效得多,并且只会传递“动态”请求(内容经常从数据库读取或内容更改的请求),由Python代码处理。
  • +更多。这已经接近这个问题的范围了。如果你想要更多的信息,做一些这方面的研究。
 类似资料:
  • 问题内容: 我的目标是在端口80上运行Node.js。这是因为我发现node.js被某些网络阻止,这些网络不允许来自任何其他端口的流量。 看来最好的方法是通过Node.js代理Apache。我已经尝试使用node-http- proxy 来做到这一点,但是我没有任何运气。 我正在使用的代码在这里: 但是我一直收到端口80的错误“地址正在使用”。我一定做错了。 如何使用node-http-proxy

  • 问题内容: 我有一个通过端口5000运行的Flask服务器,很好。我可以在http://example.com:5000上访问它 但是是否可以在http://example.com上简单地访问它?我假设这意味着我必须将端口从5000更改为80。但是当我在Flask上尝试使用该端口时,运行该错误消息。 连续lsof -i :80收益 我需要先杀死这些进程吗?这样安全吗?还是有另一种方法可以让Flas

  • 问题内容: 我正在运行Ubuntu 11.10,并已在该系统上安装Jenkins。 我看过一些有关如何设置反向代理(Apache,Nginx等)的教程,但是,这是专门用于jenkins的VM,我想让jenkins在端口80上运行时尽可能保持精简。 我发现了新贵的配置,并将端口修改为80 当我通过启动jenkins时,显示它运行了几秒钟然后终止。 这是因为jenkins 在特权端口上以用户身份运行吗

  • 我正在尝试在Centos tomcat7上托管一个网站,如果我在端口80上运行tomcat7,一切正常,即74.208.164.45,但如果我想使用https://74.208.164.45/,它不起作用,但如果我这样尝试https://74.208.164.45:8443/添加密钥库之后,它就可以正常工作了。 所以,我需要一种在80和https上运行tomcat的方法,即https://74.2

  • 我将按照本教程学习如何用Python构建应用程序。 教程(接近尾声)讲述了如何在python中获得一个发布的AJAX json,如下所示: 超文本标记语言代码: Python代码: 当我运行脚本并在浏览器中点击按钮“点击我”时,当我检查浏览器中的响应时,我会得到“500内部服务器错误”。如果我打印数据变量,它会在单击事件的终端中打印出无。我尝试了评论中给出的建议,在python脚本中使用get_j

  • 问题内容: 我无法在端口80上启动应用程序。 我已经在本地计算机(使用我的IDE和本地服务器)上尝试过,没有运气。 我检查了其他类似的帖子,并确保我在具有root用户的服务器上运行jar。 这是错误: 问题答案: 在Linux上,只能由root用户打开低于1024的端口,因此默认情况下限制端口80 如果要在80端口上发布应用,则需要将请求从80端口重定向到要运行springapp(例如8080)端