簡體   English   中英

如何僅使用反向代理實現 nginx geoip 模塊

[英]How do I implement nginx geoip module with reverse proxy only

這是 nginx 1.19.5 我有反向代理服務器,我在 nginx 反向代理服務器后面托管大約 20 個站點。 此反向代理服務器僅用於反向代理目的,沒有本地 web 服務器在其上運行。

我需要實施 geoip 阻止,但我從文檔中了解到的是

map $geoip_country_code $allowed_country

變量 to 必須在 http 部分中設置,然后

if ($allowed_country = no) {
  return 444;
  }

可以在服務器部分調用。 如果我托管一個站點,這很好,如果有多個站點怎么辦? 在這種情況下假設

siteA.exampe.com 需要從 CN 阻止訪問 而 siteB.example.com 需要從 CN 允許訪問

我如何實現它?

關於為什么map僅在 http 上下文中,我有一個很好的答案:

DR;TL NGINX 中的變量始終是全局的,一旦定義,就可以從配置中的任何位置訪問。 因此,在服務器或位置塊中定義 map 沒有任何意義。

nginx map 指令:為什么只允許在 http 級別上使用?

因此,無論您的 map 位於何處,一旦您訪問變量,就會分配$allowed_country的值。 因此,在服務器級別擁有 map 並在您的服務器或位置塊中進行檢查是完全可以的。

我會使用另一個map具有server_names和被封鎖國家的列表。 然后一個小的 njs-function 可以負責檢查來自 geo-ip 的國家是否被允許。

請記住:如果是邪惡的。 小心使用它:

https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM