主機名稱、埠號
## 1. 主機名稱與埠號的概念
### 主機名稱(Host Name)
主機名稱用來指定「要連線到哪一台電腦或哪個網路介面」。
常見例子:
- `localhost`
- `127.0.0.1`
- `example.com`
- `192.168.1.10`
其中:
- `localhost` 是一個主機名稱,通常會解析到本機位址。
- `127.0.0.1` 是 IPv4 的回送位址(loopback address),代表目前這台電腦本身。
- `example.com` 這類網域名稱會透過 DNS 解析成 IP 位址。
### 埠號(Port)
埠號用來指定「要連線到這台電腦上的哪一個服務或程式」。
一台電腦可以同時執行很多網路服務,例如:
```text
127.0.0.1:8000
```
可拆解為:
- `127.0.0.1`:主機位址,表示本機
- `8000`:埠號,表示要連線到使用 8000 埠的服務
常見埠號包括:
| 埠號 | 常見用途 |
|---|---|
| 80 | HTTP |
| 443 | HTTPS |
| 22 | SSH |
| 5432 | PostgreSQL |
| 3306 | MySQL |
| 8000 | 常見的開發用 Web 服務 |
完整的網址通常會寫成:
```text
http://主機名稱:埠號/路徑
```
例如:
```text
http://localhost:8000/items
```
如果使用 HTTP 的預設埠號 80,通常可以省略埠號;但 8000 則需要明確寫出。
---
## 2. `127.0.0.1` 的測試用途
`127.0.0.1` 是本機回送位址,表示「這台電腦自己」。透過這個位址發出的網路請求不會傳到區域網路或網際網路,而是在本機內部處理。
因此,下列兩個網址通常指向同一台本機服務:
```text
http://127.0.0.1:8000
http://localhost:8000
```
### 主要用途
#### 測試本機服務
開發 Web API 或網站時,可以先讓服務只接受本機連線:
```text
http://127.0.0.1:8000
```
這適合用來:
- 測試 API 是否正常啟動
- 測試路由與回應內容
- 開發階段避免服務直接暴露到外部網路
- 測試資料庫、後端服務或本機工具
例如,若 FastAPI 服務正在執行,可以在瀏覽器開啟:
```text
http://127.0.0.1:8000/docs
```
查看自動產生的 Swagger API 文件。
### 注意事項
`127.0.0.1` 只代表「目前這台電腦」。如果另一台電腦嘗試連線到:
```text
http://127.0.0.1:8000
```
它連到的是另一台電腦自己的本機,而不是你的開發電腦。
若要讓區域網路中的其他裝置存取,通常需要讓服務綁定到:
```text
0.0.0.0
```
例如:
```bash
uvicorn main:app --host 0.0.0.0 --port 8000
```
此時其他裝置應使用開發電腦的區域網路 IP,例如:
```text
http://192.168.1.100:8000
```
而不是使用 `127.0.0.1`。
---
## 3. FastAPI 的預設埠號
FastAPI 本身是 Web API 框架,實際負責啟動服務的通常是 Uvicorn。
一般使用以下方式啟動:
```bash
uvicorn main:app
```
其中:
- `main`:代表 `main.py`
- `app`:代表程式中的 FastAPI 物件,例如:
```python
from fastapi import FastAPI
app = FastAPI()
```
Uvicorn 預設通常會使用:
```text
主機:127.0.0.1
埠號:8000
```
因此可以透過以下網址存取:
```text
http://127.0.0.1:8000
```
API 文件則位於:
```text
http://127.0.0.1:8000/docs
```
---
## 4. 改變 FastAPI 的埠號
### 方法一:使用 Uvicorn 命令列參數
例如將埠號改成 `8080`:
```bash
uvicorn main:app --port 8080
```
此時網址變成:
```text
http://127.0.0.1:8080
```
也可以同時指定主機與埠號:
```bash
uvicorn main:app --host 0.0.0.0 --port 8080
```
這表示:
- 綁定所有網路介面
- 使用 `8080` 埠號
若使用開發模式,也可以寫成:
```bash
uvicorn main:app --reload --port 8080
```
`--reload` 會在程式碼變更時自動重新啟動服務,適合開發階段使用。
某些 FastAPI CLI 版本也支援:
```bash
fastapi dev main.py --port 8080
```
---
### 方法二:在 Python 程式中啟動 Uvicorn
也可以在程式內指定埠號:
```python
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello FastAPI"}
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=8080)
```
執行:
```bash
python main.py
```
服務就會在以下網址啟動:
```text
http://127.0.0.1:8080
```
---
## 總結
- **主機名稱**:指定要連線到哪台電腦,例如 `localhost` 或 `example.com`。
- **埠號**:指定該電腦上的哪個網路服務,例如 `8000`。
- **`127.0.0.1`**:代表本機,只適合本機測試,外部電腦無法透過它連線到你的服務。
- **FastAPI 常見預設埠號**:`8000`。
- **修改埠號**:
```bash
uvicorn main:app --port 8080
```
- **允許區域網路其他裝置存取**:
```bash
uvicorn main:app --host 0.0.0.0 --port 8080
```
相關學習地圖、教學課程
Python 後端工程、資料庫