Nginx 限制訪問 通過地理位置限制訪問

2021-08-15 16:39:43 字數 2454 閱讀 3555

nginx 可以通過地理位置來區分使用者。例如,對於不同國家可以顯示不同的頁面內容,也可以對指定國家或城市限制內容分發。

nginx 使用第三方 maxmind 資料庫來匹配使用者的 ip 位址及其位置。 只要地理位置已知,就可以在 map 或 split_clients 模組中使用基於 geoip 的變數。

http 和 tcp/udp 協議都支援基於地理位置的訪問限制。

為 nginx plus 安裝 geoip 動態模組:

$ apt-get install nginx-plus

-module

-geoip

通過在配置檔案主上下文中新增load_module指令在 nginx plus 中開啟 geoip 動態模組:

;確保開源版本的 nginx 編譯安裝時開啟--with-http_geoip_module--with-stream_geoip_module配置標誌:

2>&1 | grep -- 'stream_geoip_module'或者確保這幾個模組可以 動態鏈結。

.gz通過 http 的geoip_countrygeoip_city指令,或 stream 的geoip_countrygeoip_city指令新增資料庫路徑到 nginx 的配置檔案:

http
或:

stream
使用geoip_countrygeoip_city指令的變數把資料傳到mapsplit_clients模組。

例如,使用geoip_city指令的變數$geoip_city_continent_codemap模組,可以建立另乙個變數,其值將成為基於大陸位置的最接近的伺服器:

...

map $geoip_city_continent_code $nearest_server ;

eu eu;

na na;

as as;

af af;

...

然後可以根據$nearest_server變數傳入的值選擇一台 upstream 伺服器:

...

server

upstream eu

upstream na

...

如果大陸位置是歐洲,那麼$nearest_server變數的值是 eu,連線將會通過proxy_pass指令傳到 eu upstream。

這個例子可以在 http 和 stream 上下文中實現:

}在這個例子中,通過資料庫 geolitecity.dat 來檢查 ip 位址,並將結果寫入$geoip_city_continent_code變數。nginx 將會用這個變數值匹配 map 指令中的值,並將自定義變數中的結果以白色表示( white the result in the custom variable,這個示例中的變數是$nearest_server)。 根據$nearest_server的值,proxy_pass 指令將選擇相應的 upstream 伺服器。

洋山港 地理位置

洋山港區位於浙江省嵊泗縣境內。由大洋山港口區和小洋山港口區組成。可供開發的深水岸線4900公尺,是上海國際航運中心的深水港區。位於嵊泗海域西部大洋山島的北岸。東北距縣城21.41海浬,西北距上海市蘆潮港18.9海浬。大洋山島海岸線總長16697公尺 其中基岩10214公尺 可利用岸線3200公尺,聖...

geospatial地理位置

redis的geo在redis3.2版本就退出來了推算地理位置資訊,兩地之間的距離 可以查詢一些測試資料 引數 key 緯度,經度 名稱 127.0.0.1 6379 geoadd china city 116.397128 39.916527 beijin integer 1127.0.0.1 6...

Android 地理位置定位

android官方提供的定位sdk 1.先在manifest.xml中申請許可權 targetsdkversion 為23或者更高的需要動態申請許可權 android name android.permission.access fine location android name android....