CentOS 7.8
nginx 版本:nginx/1.18.0
yum install nginx-module-geoip
yum install GeoIP GeoIP-data
然后,GeoIO 可以很好地与 HTTP(S) 一起运行。
我需要 nginx 转发一个 TCP 端口,该端口仅对 CN 开放,添加到 nginx.conf
stream {
geoip_country /usr/share/GeoIP/GeoIP.dat;
log_format proxy '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
access_log /var/log/nginx/tcp-access.log proxy ;
open_log_file_cache off;
include tcpconf.d/*.conf;
}
xxxx.com.conf
server {
listen 11111;
proxy_pass 127.0.0.1:31688;
}
将 11111 转发到 31688 可以正常工作。
添加到服务器{
答案1
您的问题在于“if”,您应该尽可能避免使用。请看以下示例。nginx 配置示例 另一种方法。
在那里,使用地图来测试国家代码。一个非常简单的版本是:
map $geoip_country_code $allow_visit {
default no;
CN yes;
BE yes;
}
server{
if ($allow_visit = no) {
return 403;
}
}
但是它不能被流使用,因为“if”是 http_rewrite 模块的一部分。参见示例。如果在流中。我成功尝试了以下构造:
http {
server {
listen 9998;
return 403;
}
}
stream {
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $be_server {
BE 127.0.0.1:9997;
default 127.0.0.1:9998;
}
server {
listen 9999;
proxy_pass $be_server;
}
server {
listen 9997;
proxy_pass 127.0.0.1:8889;
}
}
只接受来自比利时的请求。