以下是一个基于您提出的需求的Nginx配置示例,包括GeoIP2自动更新、防盗链、防爬虫、限制访问速度和限制连接数。
首先,确保你已经安装了Nginx和必要的开发工具。
# 安装Nginx
sudo apt-install nginx
# 安装开发工具
sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
接下来,安装GeoIP2和Nginx的GeoIP2模块:
# 安装GeoIP2库
sudo apt-get install geoip2 libgeoip-dev
# 安装Nginx GeoIP2模块
cd /usr/src
sudo git clone https://github.com/leev/ngx_http_geoip2_module.git
cd ngx_http_geoip2_module
sudo ./auto/configure
sudo make
sudo make install
配置Nginx:
# /etc/nginx/nginx.conf
events {}
http {
geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb {
auto_reload 5m;
$geoip2_metadata_country_build metadata start 2 end 2;
$geoip2_metadata_city_build metadata start 3 end 3;
}
server {
listen 80;
server_name your_domain.com;
# 防盗链
valid_referers none blocked server_names *.your_domain.com;
if ($invalid_referer) {
return 403;
}
# 防爬虫
if ($http_user_agent ~* (Googlebot|Bing|Yahoo|Crawl|Flickr|Twitter)) {
return 403;
}
# 限制访问速度
limit_rate_after 1m;
limit_rate 50k;
# 限制连接数
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_status 429;
limit_conn_track_key $binary_remote_addr;
limit_conn_zone $server_name zone=perserver:10m;
location / {
# 根据不同的国家设置不同的访问速度
set $limit_rate 50k;
if ($geoip2_data_country_code = "CN") {
set $limit_rate 100k;
}
limit_rate $limit_rate;
# 根据不同的国家设置不同的最大连接数
set $limit_conn "32";
if ($geoip2_data_country_code = "CN") {
set $limit_conn "64";
}
limit_conn $limit_conn perip;
limit_conn $limit_conn perserver;
root /var/www/html;
index index.html index.htm;
}
}
}
确保你已经下载了GeoLite2的数据库文件,并放置在正确的目录下。你可以从MaxMind官网获取这个数据库文件。
# 下载GeoLite2数据库
cd /usr/share/GeoIP/
sudo wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
sudo gunzip GeoLite2-City.mmdb.gz
sudo chmod 644 GeoLite2-City.mmdb
最后,重启Nginx以应用新的配置:
sudo systemctl restart nginx
这个配置示例提供了一个基本框架,你可以根据自己的需求进行调整和增强