请帮忙。无法显示 geoip 限制的自定义错误 403 页面。它始终显示默认错误页面 403 Forbidden。
这是我的配置。
/etc/nginx/nginx.conf
geoip2 /usr/local/GeoLite2-Country_DB_Nginx/GeoLite2-Country.mmdb {
auto_reload 60m;
$geoip2_metadata_country_build metadata build_epoch;
$geoip2_data_country_code country iso_code;
$geoip2_data_country_name country names en;
}
map $geoip2_data_country_code $allowed_country {
default no;
PK yes;
#DE yes;
#US no;
}
geo $exclusions {
default 0;
}
/etc/nginx/conf.d/www.test.com
error_page 403 /403.html;
location = /403.html {
root /var/www/html;
allow all;
internal;
}
if ($allowed_country = yes) {
set $exclusions 1;
}
if ($exclusions = "0") {
return 403;
}
我已将403.html放在/var/www/html中,权限为0644。
谢谢。
答案1
您的区块似乎location = /403.html
无法访问。如何if
在主位置区块中添加条件,就像这样?
location ~ \.php$ {
if ($exclusions = "0") {
return 403;
}
root /var/www/app/;
...
}
确保在更改配置文件后重新启动 Nginx 服务器。
答案2
你是指 /etc/nginx/conf.d/www.test.com 吗?我做了这些更改。
如果 ($allowed_country = yes) { 设置 $exclusions 1; }
位置 ~ .php$ {
if ($exclusions = "0") {
return 403;
}
根 /var/www/html/; }
但现在甚至没有封锁受限制的国家。期待快速支持。提前谢谢。
答案3
该问题可能是由自定义错误页面的位置块内的允许所有指令引起的。
您可能想要删除允许所有指令,而使用内部指令来确保该页面只能从 Nginx 内部访问。
location = /403.html {
root /var/www/html;
internal;
}