我是所有這些 http 和 tcp/ip 方面的初學者。所以這些問題中可能有很多東西可能沒有意義或完全不正確。
首先,我將添加我想到的所有問題,因為我無法將它們放在標題上。
我從事 django(python 框架)的 Web 開發作業。
我對服務器的作業方式感到困惑。目標埠是如何通過 url 決定的?
主要問題:到目前為止,我了解到的是,通過 DNS 我們可以獲取網站的 IP 地址。和埠(目標和源)由 TCP 決定。并通過 TCP 標頭發送。但是它如何決定它應該轉到服務器中的哪個埠(即目標埠)。
我對上述問題的回答:在花了很多時間之后,我才知道,http 請求默認為 80,https 默認為 443,類似的其他型別的請求也默認為某個埠。所以我們可以根據這個找出ip地址。
但這在我的腦海中引起了另一個問題。
另一個問題:我還建立了一個簡單的 django 網站并將其部署在 pythonanywhere 上。但我將它部署為一個完整的應用程式。假設我的 django 應用程式接受不同型別的請求,如 HTTP、HTTPS、SMTP 等。那么將如何決定這些特定任務的埠?因為所有這些請求都在單個應用程式下,所以它們應該在同一個埠上運行。我認為服務器不會改變應用程式本身的任何內容。那么現在將如何決定目的埠呢?
注意:我不確定是否可以在 django 中創建一個接受不同型別請求的應用程式。但這應該是可能的,因為我們可以創建不同的應用程式 - 使用 startapp 并在不同的 url 上運行。
我在哪里讀過,它說http的默認埠是80,那么這意味著也應該可以更改它?
最重要的問題和所有疑問的總結 假設我有一個接受不同請求的專案。我想將它部署在服務器上,那么 http 請求和 smtp 請求將如何分離?我是否必須手動制作不同的應用程式,然后在不同的埠上部署?如果不是并且所有內容都在同一埠上運行,那么在瀏覽器中如何確定該埠?假設我的域名是 xyz.com 那么如何在服務器上訪問特定埠?
基本上如何決定目的埠?
uj5u.com熱心網友回復:
正如您已經看到的,協議通常有一個默認分配的埠(http 為 80,https 為 443,smtp 為 25,...)。Internet 上使用的主要協議的埠由 IANA 分配。
某些應用程式還默認使用埠(例如,資料庫服務 PostreSQL 默認配置為使用埠 5432)。 https://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-en-4/ch-ports.html
大多數情況下您可以省略埠,因為您使用的應用程式知道默認值并為您使用它。當您要求您的 Web 瀏覽器向http://example.com發送請求時,該請求會在后臺發送到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 并基于重定向請求所使用的網址(可以重定向app1.example.com:80到localhost:8080和app2.example.com:80到localhost:8081)。只有埠 80 必須可以從外部訪問。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/351081.html
上一篇:fetchdont帶來任何資料
