一、正向代理與反向代理的概念
正向代理:區域網內的機器藉助代理服務訪問區域網外的網站。代理的物件是客戶端,目標是去訪問外網的資源。(eg:通過代理翻牆去看看外面的世界)
反向代理:區域網向Internet提供資源,讓Internet上其他使用者通過代理伺服器訪問區域網內的資源。代理的物件是服務端,目標是讓其他客戶端可以訪問服務端的資源(eg:公司內的負載均衡、靜態資源伺服器)
總結:正向代理與反向代理涉及到的技術基本一致,主要是因為應用場景不同而進行區別。
二、正向代理配置的指令
1.resolver指令:用於指定DNS伺服器IP地址
2.resolver_timeout指令:用於設定DNS域名解析超時時間
3.proxy_pass指令:用於設定代理伺服器的協議和地址(反向代理也會用到,到時候詳細介紹)
因為正向代理服務的場合不多,所以指令較少,功能也比較簡單
(另外關於nginx正向代理是否支援HTTPS,暫時還沒嘗試,以後實踐了在補充)
三、反向代理配置的指令
1.proxy_pass指令:用於設定被代理伺服器的地址
語法結構:
proxy_pass URL;
URL包含傳輸協議、主機名稱或者IP地址加埠號等要素。傳輸協議通常是"http"或者"https"
注意upstream和proxy_pass搭配使用的兩種情況
(1)proxy_list中指明瞭傳輸協議
upstream proxy_list
{
server http://192.168.4.30/uri/;
server http://192.168.12.19/uri/;
}
server
{
location /
{
proxy_pass proxy_list;
}
}
(2)proxy_list中沒傳輸協議
upstream proxy_list
{
server 192.168.4.30/uri/;
server 192.168.12.19/uri/;
}
server
{
location /
{
proxy_pass http://proxy_list;
}
}
還有需要注意URL中是否包含URI,以訪問"http://www.test.com/test/index.html"為例
server{
server_name www.test.com;
location /test/
{
#proxy_pass http://192.168.12.19; --->轉到"http://192.168.12.19/test/index.html"
#proxy_pass http://192.168.12.19/index/; --->轉到"http://192.168.12.19/index/index.html"
#proxy_pass http://192.168.12.19/; --->轉到"http://192.168.12.19/index.html"
}
}
複製程式碼
2.proxy_hide_header指令:設定在傳送HTTP響應時,隱藏一些頭域資訊
3.proxy_pass_header指令:設定一些頭域資訊以被髮送
4.proxy_pass_request_body、proxy_pass_request_headers指令:是否將客戶端的請求體、請求頭髮送給代理伺服器
5.proxy_set_header、proxy_set_body指令:設定新的請求頭、請求體發往代理伺服器
還有14個指令,以後再慢慢補,先把自己常用的指令先整理出來。
四、nginx伺服器負載均衡相關配置
nginx伺服器是現在靜態的給予優先順序的加權輪詢演算法,主要使用配置proxy_pass和upstream指令,以下是例項
upstream backend
{
server 192.168.4.30 weight=5;
server 192.168.12.19 weight=3;
server 192.168.11.17 ; #預設weight=1
}
server
{
location /
{
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
複製程式碼
根據backend伺服器組中的不同的優先順序別,實現加權輪詢。 192.168.4.30的級別最高,優先接收和處理請求,192.168.11.17的級別最低,最少處理請求,192.168.12.19處於中等優先順序。
輪詢負載均衡就是將所有伺服器組的weight設定為一樣的即可
五、總結
在工作中經常會涉及到nginx代理相關的內容,但是總是一知半解或者隨用隨百度......希望有跟我一樣想法的小夥伴可以通過這篇文章可以對nginx代理有更明確地認識和應用能力。
另外學習時間倉促,歡迎批評指正!