应用程序(接受不同类型的请求,如 http 和 smtp)如何部署在服务器的不同端口上?
How are applications (which accepts different types of requests like http and smtp) deployed on different ports on servers?
我是所有这些 http 和 tcp/ip 方面的初学者。所以这些问题中可能有很多东西可能没有意义或完全不正确。
首先我会添加我想到的所有问题,因为我无法将它们放在标题上。
我从事用于 Web 开发的 django(python 框架)。
我对服务器的工作方式感到困惑。以及目标端口是如何通过 url?
决定的
MAIN Q : 目前我了解到的是,通过 DNS 我们可以获取网站的 IP 地址。和端口(目标和源)由 TCP 决定。并通过 TCP headers 发送。但是它如何决定它应该去服务器中的哪个端口(即目标端口)。
我对上述问题的回答: 在花了很多时间之后,我开始知道,http 请求默认为 80,https 默认为 443,其他类型的请求也类似请求也默认为某个端口。所以我们可以根据这个算出ip地址。
但这又在我脑海中提出了另一个问题。
另一个问题: 我还构建了一个简单的 django 网站并将其部署在 python 任何地方。但我将它部署为一个完整的应用程序。假设我的 Django 应用程序接受不同类型的请求,如 HTTP、HTTPS、SMTP 等。那么如何确定这些特定任务的端口?因为所有这些请求都将在单个应用程序下进行,所以它们应该 运行 在同一个端口上。我认为服务器不会更改应用程序本身的任何内容。那么现在目的港将如何决定呢?
注意: 我不确定是否可以在 django 中制作一个接受不同类型请求的应用程序。但这应该是可能的,因为我们可以创建不同的应用程序 - 在不同的 url.
上使用 startapp 和 运行
我在哪里看过,说http的默认端口是80,那也就是说应该也可以改吧?
最重要的问题并总结所有疑问
假设我有一个接受不同请求的项目。我想将它部署在服务器上,那么 http 请求和 smtp 请求将如何分离?我是否必须手动制作不同的应用程序,然后部署在不同的端口或其他东西上?如果不是,并且所有 运行s 都在同一个端口上,那么这个端口是如何在浏览器中决定的?假设我的域名是xyz.com那么服务器上具体的端口怎么访问呢?
目的港基本上是如何决定的?
如您所见,协议通常有一个默认分配的端口(http 为 80,https 为 443,smtp 为 25,...)。
互联网上使用的主要协议都有它们的端口 assigned by the IANA.
一些应用程序也默认使用端口(例如,数据库服务PostreSQL 默认配置为使用端口5432)。
https://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-en-4/ch-ports.html
大多数时候您可以省略端口,因为您使用的应用程序知道默认值并为您使用。当您要求网络浏览器向 http://example.com, behind the scene the request is sent to http://example.com:80.
发送请求时
您可以将您的应用程序配置为侦听与默认端口不同的端口。人们可能出于不同目的(非详尽列表)这样做:
- 出于安全考虑(更改服务使用的端口以使攻击者更难知道此服务的存在 - 不使用端口 22 进行 ssh)
- 因为某些端口范围需要某些权限。您的操作系统需要一个 root/admin 帐户才能使用低于 1024 的端口(这就是为什么开发工具默认使用一些特殊端口的原因 - 对于 Web 服务器使用 8080 或 8000 -,预计使用非管理员帐户)。大多数 ISP 会阻止其 Internet 盒子上的端口 25 以防止垃圾邮件。等等
- 因为冲突(端口已被占用)
以这种方式更改端口可能需要大量配置(您必须配置服务及其所有客户端)。
现在,问题的另一部分:同一个端口如何被不同的服务使用?
如果你想在同一个端口上公开不同的服务,你可以使用类似反向代理的东西。它是一个侦听端口并根据规则重定向流量的应用程序,有时它们提供修改内容的可能性(仅举几例:Traefik,Caddy。一般 Web 服务器也具有反向代理功能:Nginx,Apache 和mod_proxy, ...).
例如,假设您有 2 个 Web 应用程序并且您希望它们可以在端口 80 上访问。您可以将这些应用程序配置为使用不同的端口(比如 8080 和 8081),让反向代理监听端口80 并根据使用的 url 重定向请求(它可以将 app1.example.com:80
重定向到 localhost:8080
并将 app2.example.com:80
重定向到 localhost:8081
)。只有端口 80 必须可以从外部访问。
我是所有这些 http 和 tcp/ip 方面的初学者。所以这些问题中可能有很多东西可能没有意义或完全不正确。
首先我会添加我想到的所有问题,因为我无法将它们放在标题上。
我从事用于 Web 开发的 django(python 框架)。
我对服务器的工作方式感到困惑。以及目标端口是如何通过 url?
决定的MAIN Q : 目前我了解到的是,通过 DNS 我们可以获取网站的 IP 地址。和端口(目标和源)由 TCP 决定。并通过 TCP headers 发送。但是它如何决定它应该去服务器中的哪个端口(即目标端口)。
我对上述问题的回答: 在花了很多时间之后,我开始知道,http 请求默认为 80,https 默认为 443,其他类型的请求也类似请求也默认为某个端口。所以我们可以根据这个算出ip地址。
但这又在我脑海中提出了另一个问题。
另一个问题: 我还构建了一个简单的 django 网站并将其部署在 python 任何地方。但我将它部署为一个完整的应用程序。假设我的 Django 应用程序接受不同类型的请求,如 HTTP、HTTPS、SMTP 等。那么如何确定这些特定任务的端口?因为所有这些请求都将在单个应用程序下进行,所以它们应该 运行 在同一个端口上。我认为服务器不会更改应用程序本身的任何内容。那么现在目的港将如何决定呢?
注意: 我不确定是否可以在 django 中制作一个接受不同类型请求的应用程序。但这应该是可能的,因为我们可以创建不同的应用程序 - 在不同的 url.
上使用 startapp 和 运行我在哪里看过,说http的默认端口是80,那也就是说应该也可以改吧?
最重要的问题并总结所有疑问 假设我有一个接受不同请求的项目。我想将它部署在服务器上,那么 http 请求和 smtp 请求将如何分离?我是否必须手动制作不同的应用程序,然后部署在不同的端口或其他东西上?如果不是,并且所有 运行s 都在同一个端口上,那么这个端口是如何在浏览器中决定的?假设我的域名是xyz.com那么服务器上具体的端口怎么访问呢?
目的港基本上是如何决定的?
如您所见,协议通常有一个默认分配的端口(http 为 80,https 为 443,smtp 为 25,...)。 互联网上使用的主要协议都有它们的端口 assigned by the IANA.
一些应用程序也默认使用端口(例如,数据库服务PostreSQL 默认配置为使用端口5432)。 https://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-en-4/ch-ports.html
大多数时候您可以省略端口,因为您使用的应用程序知道默认值并为您使用。当您要求网络浏览器向 http://example.com, behind the scene the request is sent to http://example.com:80.
发送请求时您可以将您的应用程序配置为侦听与默认端口不同的端口。人们可能出于不同目的(非详尽列表)这样做:
- 出于安全考虑(更改服务使用的端口以使攻击者更难知道此服务的存在 - 不使用端口 22 进行 ssh)
- 因为某些端口范围需要某些权限。您的操作系统需要一个 root/admin 帐户才能使用低于 1024 的端口(这就是为什么开发工具默认使用一些特殊端口的原因 - 对于 Web 服务器使用 8080 或 8000 -,预计使用非管理员帐户)。大多数 ISP 会阻止其 Internet 盒子上的端口 25 以防止垃圾邮件。等等
- 因为冲突(端口已被占用)
以这种方式更改端口可能需要大量配置(您必须配置服务及其所有客户端)。
现在,问题的另一部分:同一个端口如何被不同的服务使用?
如果你想在同一个端口上公开不同的服务,你可以使用类似反向代理的东西。它是一个侦听端口并根据规则重定向流量的应用程序,有时它们提供修改内容的可能性(仅举几例:Traefik,Caddy。一般 Web 服务器也具有反向代理功能:Nginx,Apache 和mod_proxy, ...).
例如,假设您有 2 个 Web 应用程序并且您希望它们可以在端口 80 上访问。您可以将这些应用程序配置为使用不同的端口(比如 8080 和 8081),让反向代理监听端口80 并根据使用的 url 重定向请求(它可以将 app1.example.com:80
重定向到 localhost:8080
并将 app2.example.com:80
重定向到 localhost:8081
)。只有端口 80 必须可以从外部访问。