小编典典

为什么 telegram bot与 nginx 不冲突?

all

我写了一个简单的telegram bot,它工作得很好,不会与我的防火墙冲突。但是我的问题是,在防火墙中,我的站点允许使用端口 80 和 443,但是当我在 Python 中编写应该通过端口 443 或端口 80 工作的 TCP 套接字时,操作系统告诉我需要运行程序从用户的根目录开始,但是如果我启动bot,那么操作系统根本不会发誓这些权利,bot会安静地工作。如果我仍然决定在端口 443 或 80 上运行套接字,那么操作系统会回复这些端口正忙。

那么,请向我解释一下为什么telegram bot不会与进程和端口冲突?

我的服务器是 Ubuntu 22.04

PS我已经问过这个问题stackexchange,但据我了解,他们不了解telegram bot,希望你能帮助我。


阅读 84

收藏
2022-09-02

共1个答案

小编典典

哦……你的问题有太多的误解。最好先了解TCP 连接NAT 表的基础知识。

我将尝试简短地解释这种情况


当我在 Python 中编写一个应该通过端口 443 或端口 80 工作的 TCP 套接字时,操作系统告诉我需要从用户的根目录运行程序

  1. 80 和 443 是特权端口,Linux 不允许在非管理员用户下使用它。与Nginx冲突无关,可以通过适当的配置解决
  2. 如果您尝试使用非特权端口(如8080python),即使没有管理员权限也可能会执行

那么,请向我解释一下为什么电报机器人不会与进程和端口冲突?

  1. Nginx 和 Python 套接字正在监听端口80443等待传入连接。您必须访问您的服务器 IP 才能启动连接
  2. Telegram 机器人(和任何其他机器人)正在使用 Telegram 服务器进行连接。想象一下,您立即查看 Telegram 应用程序并立即回复所有消息。bot做同样的事情。它只是远程服务器的客户端(你不需要443在你的机器上听就能使用 Telegram 应用程序,对吧?)。它不监听端口,不等待传入连接,而是在远程服务器等待消息
  3. 但是你可以争辩说“嘿,停止,但是 Python bot 仍然连接到 Telegram 服务器。它使用什么端口?这不是和套接字一样吗?” → 这是相同的 TCP 连接,但 Python 使用OUTGOING动态端口连接 Telegram 服务器的INCOMING静态端口443。输出端口可以是2032327578例如。这都是关于NAT的。简而言之,任何未使用的端口都可用于在远程443和本地XXXX端口之间建立连接。
2022-09-02