這篇文章以前是寫完了,不過因爲我妻子看過以後,對這篇文章的評價是:寫的不錯,語句是通順的,排版是能夠的,但代理是什麼仍是不清楚?因此我感受以前寫的是失敗的,因此纔有瞭如今這一篇。html
接下來我會嘗試面向大衆,來解釋「代理」的概念。前端
在講代理的概念以前我先講個類比。也是我向大人解釋的過程。 web
在沒有思緒的時候,她忽然問我晚上吃了沒有?這不就是很好的例子嗎?編程
接下來咱們正經的說說「正向代理」和「反向代理」api
首先附上正兒八經的說明圖,先有一個總體的理解。 跨域
而後很官方的解釋它們的概念:緩存
正向代理( Forward Proxy ):是指是一個位於客戶端和原始服務器之間的服務器,爲了從原始服務器取得內容, 客戶端向代理髮送一個請求並指定目標(原始服務器),而後代理向原始服務器轉交請求並將得到的內容返回給客戶端。客戶端才能使用正向代理。安全
反向代理( Reverse Proxy ):是指以代理服務器來接受 Internet 上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回給 Internet 上請求鏈接的客戶端,此時代理服務器對外就表現爲一個反向代理服務器。bash
接下來我提煉一下各自的特色。服務器
說了這麼多,如今說說代理在工做中的時機應用場景吧。
Nginx 服務器的功能有不少,諸如反向代理、負載均衡、靜態資源服務器等。
客戶端原本能夠直接經過 HTTP 協議訪問服務器,不過咱們能夠在中間加上一個 Nginx 服務器,客戶端請求 Nginx 服務器,Nginx 服務器請求應用服務器,而後將結果返回給客戶端,此時 Nginx 服務器就是反向代理服務器。
# 虛擬主機的配置
server {
listen 8080; # 監聽的端口
server_name 192.168.1.1; # 配置訪問域名
root /data/toor; # 站點根目錄
error_page 502 404 /page/404.html; # 錯誤頁面
location ^~ /api/ { # 使用 /api/ 代理 proxy_pass 的值
proxy_pass http://192.168.20.1:8080; # 被代理的應用服務器 HTTP 地址
}
}
複製代碼
以上簡單的配置就能夠實現反向代理的功能。
固然反向代理也能夠處理跨域問題,在 Vue 中就可使用 proxyTable
這個屬性進行相關的配置來解決跨域問題帶來的煩惱。配置以下:
...
proxyTable: {
'/weixin': {
target: 'http://192.168.48.11:8100/', // 接口的域名
secure: false, // 若是是 https 接口,須要配置這個參數
changeOrigin: true, // 若是接口跨域,須要進行這個參數配置
pathRewrite: {
'^/weixin': ''
}
},
},
...
複製代碼
# upstream 表示負載服務器池,定義名字爲 my
upstream my {
server 192.168.2.1:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.2.2:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.2.3:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.2.4:8080 weight=1 max_fails=2 fail_timeout=30s;
# 即在 30s 內嘗試 2 次失敗即認爲主機不可用
}
複製代碼
負載均衡即將 請求/數據 輪詢分攤到多個服務器上執行,負載均衡的關鍵在於 均勻。
也能夠經過 ip-hash
的方式,根據客戶端 ip 地址的 hash 值將請求分配給固定的某一個服務器處理。
另外,服務器的硬件配置可能不一樣,配置好的服務器能夠處理更多的請求,這時能夠經過 weight
參數來控制。
以上。
《前端詞典》這個系列會持續更新,每一期我都會講一個出現頻率較高的知識點。但願你們在閱讀的過程中能夠斧正文中出現不嚴謹或是錯誤的地方,本人將不勝感激;若經過本系列而有所得,本人亦將不勝欣喜。
若是你以爲個人文章寫的還不錯,能夠關注個人微信公衆號,公衆號裏會提早劇透呦。
你也能夠添加個人微信 wqhhsd, 歡迎交流。