《Nginx核心知識100講》geo模組、geoip模組、keepalive
極客專欄《Nginx核心知識100講》79~81小節,筆記
注意:這個是看專欄視訊,敲的哈。這個專欄讓我收貨蠻大的。
79 | 根據IP地址範圍的匹配生成新變數:geo模組
介紹一個與map,split_client非常相似的模組—— geo模組。基於已有的變數值生成新的變數值。不同的是,基於的已有變數必須是ip地址。可以基於IP地址,子網掩碼這樣的匹配方式來生成新的變數值。根據IP地址確定它的範圍確定它的低於所屬。
配置介紹

image.png

image.png
示例

image.png

image.png

image.png
當我們需要根據ip地址、地址範圍、子網掩碼做匹配來生成新變數,這個時候我們使用geo是一個非常好的選擇。
留言問題
1.又翻了相關幾節課視訊,proxy的意義是指定信任的伺服器ip麼?可以指定多臺伺服器麼,比如ip段、正則匹配?
作者回復
對的。可以指定多臺伺服器,可以使用子網掩碼的方式指定一段IP地址,不能使用正則匹配。
2.請問proxy是可以隨便寫麼?只要有值就能達到remote_addr取最後一個ip的效果麼
作者回復
在生產環境下,proxy不能隨便寫,通常必須是nginx的直接下游伺服器的地址(如果有的話)。
3.可以通過GEO模組 匹配到 IP的 歸屬範圍
作者回復
是的
80 | 使用變數獲得使用者的地理位置:geoip模組
如果我們需要根據ip地址找到地理位置的資訊, 那麼我們完全可以使用geoip模組。這個模組可以根據預先編譯好的maxmind 這個ip地址庫自動計算出ip地址所屬的地域與相關資訊。

image.png

image.png

image.png

image.png
首先開啟maxmind的網站 ofollow,noindex">https://www.maxmind.com/zh/home 下載程式碼跟地址庫。然後安裝。

image.png

image.png
配置好之後我們怎麼檢測資料的正確性,我們可以找些代理網站,拿幾個ip試試。

image.png

image.png

image.png

image.png
geo模組提供了很多關於地域資訊的變數,我們可以在後續的其他模組或者在日誌分析中使用這些變數的值。
留言問題
- geoip模組的底層原理是什麼 會影響NGINX效能嗎
作者回復
原理是生成幾個變數如geoip_area_code,當一些模組使用到該變數(例如log模組),則呼叫取變數值的函式(見第72課),在函式中,會呼叫GeoIP庫裡的相關函式(例如GeoIP_country_code_by_ipnum),而這些函式的效能還不錯,所以對Nginx效能影響不大。
81 | 對客戶端使用keepalive提升連線效率
keepalive可以有效的提升我們的連線的使用效率。

image.png
功能
減少了記憶體的消耗。
擁塞控制,所以它的視窗是逐漸增大的。如果我們的連結沒有斷開過,一直保持在它的最佳狀態的。
協議
nginx向客戶端返回的時候也可以加connection的頭部。
keep-alive比較少用。
行為控制

image.png
keepalive_requests 表示在一個tcp連線上,最多執行多少個http請求。
keepalive_timeout 後面跟了兩個timeout。第一個timeout表示使用者一個http請求完成以後最多經過timeout時間,如果還沒有新請求進來就會關連線。預設75秒。後一個timeout就是nginx通過keepalive頭部向瀏覽器表示這個連結保留多少秒。
留言問題
1.我這邊經常用loadrunner測試nginx反向代理時效能,發現開啟keepalive(keepalive_timeout不等於0)時,nginx伺服器的新建效能指標(hit/sec或每秒支援多少個新建tcp連線)的指標會比關閉keepalive(keepalive_timeout=0)時低好多,這是測試場景問題,還是nginx處理機制問題。
我反向代理的測試頁面是大小為6k和10k的靜態html頁面。
這個真實生產下keepalive是否開啟是否和反向代理的web型別有關係呢。
是否開啟nginx的keepalive需要主要參考什麼來做決定呢。
作者回復
- 1、我猜測是測試場景問題,nginx處理機制對此沒有問題。
- 2、沒有關係。
- 3、主要參考性能要求,使用keepalive能提升網路效率,包括TCP握手消耗、TCP擁塞控制等。
2.用NGINX做負載均衡伺服器 建議對 後端機器 開啟 keepalive 嗎
作者回復
如果對效能有要求,建議開啟。
3.專欄裡面的每一個視訊的知識點都講的很深入。但是不知道怎麼串起來,可否提供一些應用場景?
作者回復
可以嘗試用wordpress搭個部落格站點:-)
4.ab -c 2000 -n 2000 http://192.168.0.191/index.php
老師請問 壓測nginx伺服器端時 為什麼在伺服器開啟watch檢視狀態連線狀態 都是timewait 或是syn-recv 沒有establish狀態 需要怎樣配置 才能模擬出現多個establish狀態
TIME-WAIT 0 0 xxxxxxx:45838 xxxxxxxx:80
作者回復
把index.php換成一個很大的檔案...