NGINX设置只允许国内访问
搞了个github的代理。国外能访问的话,老被VPS告我侵权。直接改成仅国内可访问就得了。
反正国外本来也不用代理。
1,安装geoip库
yum -y install geoip-devel
2,重新编译nginx,添加http_geoip_module模块
先查看原来的参数。
/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.20.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44.0.3) (GCC)
built with OpenSSL 1.1.1k 25 Mar 2021
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-openssl=../openssl-1.1.1k --with-pcre=../pcre-8.44 --with-pcre-jit --with-ld-opt=-ljemalloc
重新编译:
cd /usr/local/src/nginx-1.20.1
#注意,同一级的PCRE和openssl的目录也要存在。
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-openssl=../openssl-1.1.1k --with-pcre=../pcre-8.44 --with-pcre-jit --with-ld-opt=-ljemalloc --with-http_geoip_module=dynamic
之后,只make,不要make install,因为会覆盖当前nginx的目录
make
3,拷贝新编译的nginx和ngx_http_geoip_module.so到nginx安装目录下
#备份,防止出错
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
cp /home/opc/oneinstack/src/nginx-1.20.1/objs/nginx /usr/local/nginx/sbin/
mkdir /usr/local/nginx/modules
cp /home/opc/oneinstack/src/nginx-1.20.1/objs/ngx_http_geoip_module.so /usr/local/nginx/modules/
4,配置规则
nginx.conf配置文件添加lngx_http_geoip_module.so模块
注意,这里要添加到nginx配置文件的顶级目录,
我这里的两个位置都是可以的,但是放在events和http中间就报错。
#load_module modules/ngx_http_geoip_module.so;
user www www;
worker_processes auto;
error_log /data/wwwlogs/error_nginx.log crit;
pid /var/run/nginx.pid;
worker_rlimit_nofile 51200;
load_module modules/ngx_http_geoip_module.so;
events {
use epoll;
worker_connections 51200;
multi_accept on;
}
http {
......
}
5,nginx.conf中添加配置,这个要添加到HTTP段。
# 访问地理位置限制规则
geoip_country /usr/share/GeoIP/GeoIP.dat;
# geoip_city /usr/share/GeoIP/GeoLiteCity.dat;
# 下面一行根据实际情况编写
map $geoip_country_code $allowed_country {
default no;
CN yes;
}
6,在站点的配置规则中,添加相关配置:
server {
listen 80;
server_name xx.xx.xx;
#添加判断
if ($allowed_country = no) {
return 403;
}
}