Nginx 阻止某些国家/地区的 POST
Posted
技术标签:
【中文标题】Nginx 阻止某些国家/地区的 POST【英文标题】:Nginx block POST for certain countries 【发布时间】:2013-05-13 00:04:13 【问题描述】:我有一个反向代理 nginx 到 tomcat。
我的目标是禁止对某些国家/地区的完全访问,并禁止除一个国家/地区以外的所有国家/地区的 POST。
可以通过内核级别的 iptables 实现对某些国家/地区的全面访问禁令。这是一项简单的任务。
我的困境是我如何只禁止来自除一个国家之外的所有国家/地区的 POST。其他人可以看到网站 (GET),但我不希望他们创建帐户或发布数据。
我可以通过列出所有使用 post 的表单来过滤,但是太多了。
有没有办法只用 nginx 过滤帖子?
谢谢
【问题讨论】:
【参考方案1】:geo $ip_country
ranges;
default zz;
include /usr/local/nginx/conf/ip_country.conf;
set $method_country $request_method$ip_country;
if ($method_country ~ "POST(?!au)")
return 405;
ip_country.conf 格式如:
0.0.0.0-0.255.255.255 eu;
1.0.0.0-1.0.0.255 au;
1.0.1.0-1.0.3.255 cn;
1.0.4.0-1.0.7.255 au;
1.0.8.0-1.0.15.255 cn;
1.0.16.0-1.0.31.255 jp;
1.0.32.0-1.0.63.255 cn;
1.0.64.0-1.0.127.255 jp;
1.0.128.0-1.0.255.255 th;
1.1.0.0-1.1.0.255 cn;
...
您可以在脚本中使用$ip_country
值:
fastcgi_param IP_COUNTRY $ip_country;
【讨论】:
Tnx!今晚我会执行!为此干杯 出于某种原因,nginx 不喜欢你的 if 子句。我用一些非常难看的东西代替:#GEO if ($request_method = POST) set $test P; if ($ip_country != au) 设置 $test "$testC"; if ($test = PC) 返回 405; 对不起,我已经用set $method_country $request_method$ip_country;
纠正了这个问题
如果国家/地区名称有多个可能的有效值和/或有效值中有空格,if
行将如何显示?
回答我自己的问题:if ($method_country ~ "POST(?!(ca|us|value with spaces))")
以上是关于Nginx 阻止某些国家/地区的 POST的主要内容,如果未能解决你的问题,请参考以下文章