# Nginx (續) 正向代理:固定的人要去不固定的地方 反向代理:不固定的人要去固定的地方 ## 正向代理 (Forward Proxy) * 位於客戶端和伺服器之間 * 客戶端透過代理伺服器向**外部伺服器發送請求** * 節省流量 * (部分可以)隱藏客戶端 ## 反向代理 (Reverse Proxy) * 位於伺服器之前 * 代表後端伺服器接收客戶端的請求 * 隱藏後端伺服器 * 外部用戶無法直接知道或連到你內部的後端伺服器真實 IP,所有存取都由 Nginx 領頭、轉發,這等於加了一道安全防護牆。 > ### ➡ 負載平衡 (Load Balance) > 負載平衡是反向代理的一個重要功能,它可以將進入系統的流量或工作負載智慧地分配給多台伺服器,避免單一伺服器過載,確保系統平穩高效運作 ```mermaid flowchart TB subgraph "正向代理 (Forward Proxy)" Client1[👤 Client] --> Forward[🔄 Forward Proxy] Forward --> Internet1[🌐 Internet] --> Server1[🎯 Target Server] end subgraph "反向代理 (Reverse Proxy)" Client2[👤 Client] --> Reverse[🔄 Reverse Proxy] Reverse --> Backend1[🖥️ Backend 1] Reverse --> Backend2[🖥️ Backend 2] Backend1 --> Reverse Backend2 --> Reverse end classDef forwardClient fill:#e3f2fd classDef forwardProxy fill:#f3e5f5 classDef reverseClient fill:#e8f5e8 classDef reverseProxy fill:#fff3e0 classDef backend fill:#fce4ec class Client1 forwardClient class Forward forwardProxy class Client2 reverseClient class Reverse reverseProxy class Backend1,Backend2 backend ``` ### Nginx 反向代理 1. 建立反向代理設定檔 ::: success `sudo`:超級使用者,才有權限👍🏻 ::: 把內容寫進編輯器,但要先進入編輯器 ::: success `sudo nano`: 進入編輯器📝 ::: ``` sudo nano /etc/nginx/sites-available/reverse-proxy ``` ``` server { listen 80; server_name proxy.lsa.moli; # 代理到服務 A location /service-a/ { proxy_pass http://s[學號].lsa.moli/; # proxy_set_header Host $host; # proxy_set_header X-Real-IP $remote_addr; # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # proxy_set_header X-Forwarded-Proto $scheme; } # 代理到服務 B location /service-b/ { proxy_pass http://regchien.lsa.moli/; # proxy_set_header Host $host; # proxy_set_header X-Real-IP $remote_addr; # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # proxy_set_header X-Forwarded-Proto $scheme; } } ``` 2. 建立軟連結 ``` sudo ln -s /etc/nginx/sites-available/reverse-proxy /etc/nginx/sites-enabled/ ``` 3. 改 /etc/hosts,添加一行 ``` 127.0.0.1 proxy.lsa.moli ``` 4. 測試語法、重載 nginx ``` sudo nginx -t sudo systemctl reload nginx ``` 5. 測試,存取網站 `http://proxy.example.com/service-a/` 及 `http://proxy.example.com/service-b/` ### Nginx 負載平衡 1. 建立負載平衡設定檔 ``` sudo nano /etc/nginx/sites-available/load-balancer ``` ``` # 定義後端伺服器群組 upstream backend_servers { # 預設使用 Round Robin server example.com; server mirror.ossplanet.net; # 或使用其他演算法: # least_conn; # 最少連線 # ip_hash; # IP Hash } server { listen 80; server_name lb.example.com; location / { proxy_pass http://backend_servers; #proxy_set_header Host $host; #proxy_set_header X-Real-IP $remote_addr; #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 2. 建立軟連結 ``` sudo ln -s /etc/nginx/sites-available/load-balancer /etc/nginx/sites-enabled/ ``` 3. 改 /etc/hosts,添加一行 ``` 127.0.0.1 lb.example.com ``` 4. 測試語法、重載 nginx ``` sudo nginx -t sudo systemctl reload nginx ``` 5. 測試 ``` curl lb.example.com ``` ## Docker
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up