编译安装Nginx+GeoIP2自动更新+防盗链+防爬虫+限制访问速度+限制连接数

此文章是Nginx的GeoIP2模块和MaxMind国家IP库相互结合,达到客户端IP访问的一个数据记录以及分析,同时还针对一些业务需求做出对Nginx中间件的控制,如:防盗链、防爬虫、限制访问速度、限制连接数等

该篇文章是从一个热爱搞技术的博主StephenJose_Dai文章中学习并实验后编写的,在此非常感谢这位博主!

环境

名称+版本官方下载链接本地下载链接
CentOS7.9http://isoredirect.centos.org/centos/7/isos/x86_64/
Nginx1.22https://nginx.org/download/nginx-1.22.1.tar.gzhttps://resource.if010.com/geoip/nginx-1.22.1.tar.gz
GeoIP2模块v3.3https://github.com/leev/ngx_http_geoip2_module/releaseshttps://resource.if010.com/geoip/ngx_http_geoip2_module-3.3.tar.gz
MaxMind国家IP库https://www.maxmind.com/en/home
libmaxminddb 1.7.1https://github.com/maxmind/libmaxminddb/releaseshttps://resource.if010.com/geoip/libmaxminddb-1.7.1.tar.gz
geoipupdate 6.0.0https://github.com/maxmind/geoipupdate/releases/download/v6.0.0/geoipupdate_6.0.0_linux_386.tar.gzhttps://resource.if010.com/geoip/geoipupdate_6.0.0_linux_386.tar.gz

注:libmaxminddb工具是用于解析MaxMind国家IP库文件的。

开搞

约定:所有安装包和准备材料都放在了/data目录下。

编译安装libmaxminddb

tar -zxvf libmaxminddb-1.7.1.tar.gz
cd libmaxminddb-1.7.1
./configure
make && make check && make install
ldconfig

如果安装后,您收到一个libmaxminddb.so.0丢失的错误,您可能需要将前缀中的 lib 目录添加到您的库路径中。在使用默认前缀 ( /usr/local) 的大多数 Linux 发行版上,您可以通过运行以下命令来执行此操作:

sudo sh -c "echo /usr/local/lib  >> /etc/ld.so.conf.d/local.conf"
ldconfig

解压GeoIP2

tar -zxvf ngx_http_geoip2_module-3.3.tar.gz
mv ngx_http_geoip2_module-3.3 /usr/local/

注意:因为这里使用的是Nginx1.22的版本,所以GeoIP2只能用3.3版本的,不然会报错!

编译安装Nginx前的一些依赖准备

我们这里编译安装Nginx需要用的有openssl、pcre、zlib、gcc,在此之前我们先解压编译包并放到指定目录,然后使用rpm安装gcc

这里的用到的依赖分享到了CSDN上,有需要的小伙伴可以自取

tar zxf pcre-8.42.tar.gz
mv pcre-8.42 /usr/local/
tar zxf openssl-1.1.0h.tar.gz
mv openssl-1.1.0h /usr/local/
tar zxf zlib-1.2.11.tar.gz 
mv zlib-1.2.11 /usr/local/# rpm安装gcc
rpm -ivh libstdc++-devel-4.8.5-44.el7.x86_64.rpm 
rpm -ivh gcc-c++-4.8.5-44.el7.x86_64.rpm

编译安装Nginx

tar -zxvf nginx-1.22.1.tar.gz
cd /data/nginx-1.22.1#配置编译
./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_sub_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module  --with-http_v2_module --with-stream --with-openssl=/usr/local/openssl-1.1.0h/ --with-pcre=/usr/local/pcre-8.42/ --with-zlib=/usr/local/zlib-1.2.11/ --add-module=/usr/local/ngx_http_geoip2_module-3.3# 编译并安装
make && make install

注册MaxMind帐号并下载国家IP数据库

注册页面

下载地址库入口

下载链接位置

将下载的数据库解压并放到指定位置

这个位置并不一定说是要在哪里,只要到时候你Nginx调用的时候路径是对的就行

mkdir -p /usr/local/nginx/IPData/
tar -zxvf GeoLite2-Country_20231020.tar.gz
cd GeoLite2-Country_20231020
mv GeoLite2-Country.mmdb /usr/local/nginx/IPData/

配置Nginx实现禁止境外IP访问、防盗链、防爬虫、限制访问速度、限制连接数

创建虚拟主机配置文件目录和缓存目录

mkdir -p /usr/local/nginx/conf/v_host/
mkdir -p /usr/local/nginx/cache

编辑Nginx主配置文件vim /usr/local/nginx/conf/nginx.conf

user nobody;# 配置Nginx线程数,这里设置为自动
worker_processes auto;error_log logs/error.log;
pid logs/nginx.pid;events {# 定义每个线程可以处理1024个连接请求worker_connections  1024;
}http {log_format  main  '$remote_addr - [location: $geoip2_data_country_code $geoip2_country_name $geoip2_data_city_name $geoip2_data_province_name $geoip2_data_province_isocode $geoip2_continent_code] - $remote_user [$time_local] requesthost:"$http_host"; "$request" requesttime:"$request_time"; ''$status $body_bytes_sent "$http_referer" - $request_body ' '"$http_user_agent" "$http_x_forwarded_for"';access_log  logs/access.log  main;sendfile            on;tcp_nopush          on;tcp_nodelay         on;# 关闭Nginx版本号显示server_tokens       off;proxy_buffering off;keepalive_timeout   300;keepalive_requests  200;client_max_body_size 20M;types_hash_max_size 2048;fastcgi_connect_timeout 300s;fastcgi_send_timeout 300s;fastcgi_read_timeout 300s;fastcgi_buffer_size 512k;fastcgi_buffers 10 512k;fastcgi_busy_buffers_size 1024k;fastcgi_temp_file_write_size 1024k;open_file_cache max=65535 inactive=60s;open_file_cache_valid 80s;server_names_hash_bucket_size 2048;client_header_buffer_size 128k;client_body_buffer_size 512k;large_client_header_buffers 4 128k;proxy_hide_header X-Powered-By;proxy_hide_header Server;proxy_connect_timeout 300;proxy_send_timeout 300;proxy_read_timeout 300;proxy_buffer_size 4k;proxy_buffers 4 64k;proxy_busy_buffers_size 128k;proxy_temp_file_write_size 128k;proxy_temp_path cache/mytemp_cache;proxy_cache_path cache/mytest_cache levels=1:2 keys_zone=mytest:20m inactive=24h max_size=1000m;proxy_intercept_errors on;gzip_min_length  1k;gzip_buffers     4 16k;gzip_comp_level  4;gzip_types      text/plain application/javascript image/png text/css text/xml text/vnd.wap.wml text/x-component application/x-javascript image/gif image/jpeg application/atom+xml application/rss+xml application/octet-stream application/x-rar-compressed application/json;gzip_http_version 1.1;gzip_vary on;gzip_disable "msie6";gzip  on;include             mime.types;default_type        application/octet-stream;# 配置国家IP库geoip2 /usr/local/nginx/IPData/GeoLite2-Country.mmdb{auto_reload 5m;$geoip2_metadate_country_build metadata build_epoch;$geoip2_data_country_code country iso_code;$geoip2_country_name country names en;}# 配置城市IP库geoip2 /usr/local/nginx/IPData/GeoLite2-City.mmdb {auto_reload 5m;$geoip2_data_city_name city names en;$geoip2_data_province_name subdivisions 0 names en;$geoip2_data_province_isocode subdivisions 0 iso_code;$geoip2_continent_code continent code;}#配置规则,默认不允许所有IP访问,只允许中国IP访问map $geoip2_data_country_code $allowed_country {default no;CN yes;}#设置白名单,在下列白名单中不限速geo $is_whitelist {default 0;172.17.0.0/16 1;}map $is_whitelist $limit_key {1 "";0 $binary_remote_addr;  } # 设置连接数limit_conn_zone $binary_remote_addr zone=perip:10m;# 设置限制连接数,每秒150个连接数limit_req_zone $binary_remote_addr zone=myRateLimit:10m rate=150r/s;# 设置限制连接数,每秒2000个连接数  limit_req_zone $binary_remote_addr zone=mywebRateLimit:10m rate=2000r/s;# 设置限制连接数,每秒200个连接数limit_req_zone $binary_remote_addr zone=my26051RateLimit:10m rate=200r/s;# 引用v_host中的指定conf配置文件include /usr/local/nginx/conf/v_host/*.conf;
}

创建编辑虚拟主机配置文件vim /usr/local/nginx/conf/v_host/test.if010.com.conf

# HTTP配置
server {listen 80;charset utf-8;server_name test.if010.com;client_max_body_size 300m;access_log /usr/local/nginx/logs/test.if010.com_access.log main;error_log /usr/local/nginx/logs/test.if010.com_error.log debug;# 当访问http时,强制跳转到httpserror_page 497 https://test.if010.com$uri?$args;# 添加客户端的IP头add_header client-country $geoip2_data_country_code;# 启用压缩,压缩等级为9级,压缩text/css text/plan text/xml application/javascript# application/x-javascript application/html application/xml image/png image/jpg# image/jpeg image/gif image/webp image/svg+xml 这些格式的文件gzip on;gzip_comp_level 9;gzip_types text/css text/plan text/xml application/javascript application/x-javascript application/html application/xml image/png image/jpg image/jpeg image/gif image/webp image/svg+xml;# 做判断,如果国家不是中国,就返回451状态码给客户端;if ($geoip2_data_country_code != CN ) {return 451;}# 做判断,如果匹配到默认不允许的规则,就返回452状态码给客户端;   if ($geoip2_data_country_code = no ) {return 452;}location /{root /usr/local/nginx/html;index index.html;try_files $uri $uri/ /index.html?s=$uri&$args;# 限制连接数为nginx.conf配置的zone=myRateLimit的值(每秒150个请求数),允许突然爆发的连接数10个并且是马上执行没有延迟limit_req zone=myRateLimit burst=10 nodelay;# 限制每个IP每秒连接数为nginx.conf配置的zone=perip的值(单个IP允许150个请求数)limit_conn perip 150;# 如果超过设定的每秒150个连接数这个阈值,则返回448状态码给客户端limit_req_status 448;# 如果超过设定的每个IP每秒150个连接数这个阈值,则返回449状态码给客户端limit_conn_status 449;# 限制客户端速度只能到150klimit_rate        150k;# 防盗链,如果请求的头不是test.if010.com就是无效的,则返回449状态码给客户端   valid_referers none blocked test.if010.comm;if ($invalid_referer) {return 449;}# 做判断,如果国家不是中国,就返回451状态码给客户端;  if ($geoip2_data_country_code != CN ) {return 451;}# 做判断,如果匹配到默认不允许的规则,就返回452状态码给客户端  if ($geoip2_data_country_code = no ) {return 452;}# 防爬虫,如果UA是底下任意一个值,就判定为蜘蛛爬虫,则返回453给客户端if ($http_user_agent ~* "python|curl|java|wget|httpclient|okhttp|qihoobot|Scrubby|YodaoBot|yahoo-blogs/v3.9|Gigabot|yahoo-mmcrawler|Teoma|Robozilla|Bingbot|Slurp|Baiduspider|Googlebot|googlebot-mobile|googlebot-image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo!Slurp|Yahoo!Slurp China|YoudaoBot|Sosospider|MSNBot|ia_archiver|twiceler|psbot") {return 453;}}# 错误页配置,如果状态码是下列的值,就显示我配置的页面error_page  400 401 402 403 404 500 502 503 504 /error.html;location = /error.html {root   /usr/local/html;# 限制连接数为nginx.conf配置的zone=myRateLimit的值(每秒150个请求数),允许突然爆发的连接数10个并且是马上执行没有延迟limit_req zone=myRateLimit burst=10 nodelay;# 限制每个IP每秒连接数为nginx.conf配置的zone=perip的值(单个IP允许150个请求数)limit_conn perip 150;# 如果超过设定的每秒150个连接数这个阈值,则返回448状态码给客户端limit_req_status 448;# 如果超过设定的每个IP每秒150个连接数这个阈值,则返回449状态码给客户端limit_conn_status 449;# 限制客户端速度只能到150klimit_rate        150k;# 防盗链,如果请求的头不是test.if010.com就是无效的,则返回449状态码给客户端  valid_referers none blocked test.if010.com;if ($invalid_referer) {return 449;}# 做判断,如果国家不是中国,就返回451状态码给客户端;   if ($geoip2_data_country_code != CN ) {return 451;}# 做判断,如果匹配到默认不允许的规则,就返回452状态码给客户端  if ($geoip2_data_country_code = no ) {return 452;}# 防爬虫,如果UA是底下任意一个值,就判定为蜘蛛爬虫,则返回453给客户端   if ($http_user_agent ~* "python|curl|java|wget|httpclient|okhttp|qihoobot|Scrubby|YodaoBot|yahoo-blogs/v3.9|Gigabot|yahoo-mmcrawler|Teoma|Robozilla|Bingbot|Slurp|Baiduspider|Googlebot|googlebot-mobile|googlebot-image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo!Slurp|Yahoo!Slurp China|YoudaoBot|Sosospider|MSNBot|ia_archiver|twiceler|psbot") {return 453;}}
}# HTTPS配置server {listen 443 ssl;charset utf-8;server_name test.if010.com;client_max_body_size 300m;ssl_certificate  /usr/local/nginx/cert/test.if010.com.pem;ssl_certificate_key /usr/local/nginx/cert/test.if010.com.key;ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;access_log /usr/local/nginx/logs/test.if010.com_access.log main;error_log /usr/local/nginx/logs/test.if010.com_error.log debug;# 添加客户端的IP头add_header client-country $geoip2_data_country_code;# 启用压缩,压缩等级为9级,压缩text/css text/plan text/xml application/javascript# application/x-javascript application/html application/xml image/png image/jpg# image/jpeg image/gif image/webp image/svg+xml 这些格式的文件gzip on;gzip_comp_level 9;gzip_types text/css text/plan text/xml application/javascript application/x-javascript application/html application/xml image/png image/jpg image/jpeg image/gif image/webp image/svg+xml;# 做判断,如果国家不是中国,就返回451状态码给客户端;if ($geoip2_data_country_code != CN ) {return 451;}# 做判断,如果匹配到默认不允许的规则,就返回452状态码给客户端;   if ($geoip2_data_country_code = no ) {return 452;}location /{root /usr/local/nginx/html;index index.html;try_files $uri $uri/ /index.html?s=$uri&$args;# 限制连接数为nginx.conf配置的zone=myRateLimit的值(每秒150个请求数),允许突然爆发的连接数10个并且是马上执行没有延迟limit_req zone=myRateLimit burst=10 nodelay;# 限制每个IP每秒连接数为nginx.conf配置的zone=perip的值(单个IP允许150个请求数)limit_conn perip 150;# 如果超过设定的每秒150个连接数这个阈值,则返回448状态码给客户端limit_req_status 448;# 如果超过设定的每个IP每秒150个连接数这个阈值,则返回449状态码给客户端limit_conn_status 449;# 限制客户端速度只能到150klimit_rate  150k;# 防盗链,如果请求的头不是test.if010.com就是无效的,则返回449状态码给客户端valid_referers none blocked test.if010.com;if ($invalid_referer) {return 449;}# 做判断,如果国家不是中国,就返回451状态码给客户端;  if ($geoip2_data_country_code != CN ) {return 451;}# 做判断,如果匹配到默认不允许的规则,就返回451状态码给客户端  if ($geoip2_data_country_code = no ) {return 452;}# 防爬虫,如果UA是底下任意一个值,就判定为蜘蛛爬虫,则返回453给客户端if ($http_user_agent ~* "python|curl|java|wget|httpclient|okhttp|qihoobot|Scrubby|YodaoBot|yahoo-blogs/v3.9|Gigabot|yahoo-mmcrawler|Teoma|Robozilla|Bingbot|Slurp|Baiduspider|Googlebot|googlebot-mobile|googlebot-image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo!Slurp|Yahoo!Slurp China|YoudaoBot|Sosospider|MSNBot|ia_archiver|twiceler|psbot") {return 453;}}# 错误页配置,如果状态码是下列的值,就显示我配置的页面error_page  400 401 402 403 404 500 502 503 504 /error.html;location = /error.html {root   /usr/local/html;# 限制连接数为nginx.conf配置的zone=myRateLimit的值(每秒150个请求数),允许突然爆发的连接数10个并且是马上执行没有延迟limit_req zone=myRateLimit burst=10 nodelay;# 限制每个IP每秒连接数为nginx.conf配置的zone=perip的值(单个IP允许150个请求数)limit_conn perip 150;# 如果超过设定的每秒150个连接数这个阈值,则返回448状态码给客户端limit_req_status 448;# 如果超过设定的每个IP每秒150个连接数这个阈值,则返回449状态码给客户端limit_conn_status 449;# 限制客户端速度只能到150klimit_rate  150k;# 防盗链,如果请求的头不是test.if010.com就是无效的,则返回449状态码给客户端  valid_referers none blocked test.if010.com;if ($invalid_referer) {return 449;}# 做判断,如果国家不是中国,就返回451状态码给客户端;   if ($geoip2_data_country_code != CN ) {return 451;}# 做判断,如果匹配到默认不允许的规则,就返回452状态码给客户端  if ($geoip2_data_country_code = no ) {return 452;}# 防爬虫,如果UA是底下任意一个值,就判定为蜘蛛爬虫,则返回453给客户端   if ($http_user_agent ~* "python|curl|java|wget|httpclient|okhttp|qihoobot|Scrubby|YodaoBot|yahoo-blogs/v3.9|Gigabot|yahoo-mmcrawler|Teoma|Robozilla|Bingbot|Slurp|Baiduspider|Googlebot|googlebot-mobile|googlebot-image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo!Slurp|Yahoo!Slurp China|YoudaoBot|Sosospider|MSNBot|ia_archiver|twiceler|psbot") {return 453;}}
}

验证测试

Nginx访问日志结果

实现自动更新国家IP库

获取geoipupdate官方工具

tar -zxvf geoipupdate_6.0.0_linux_386.tar.gz
cd geoipupdate_6.0.0_linux_386/
mv geoipupdate /usr/local/nginx/IPData/
mv GeoIP.conf /usr/local/nginx/IPData/

创建LicenseKey

申请License入口位置

查看LicenseKey

配置GeoIP.conf

vim /usr/local/nginx/IPData/GeoIP.conf# Please see https://dev.maxmind.com/geoip/updating-databases?lang=en for
# instructions on setting up geoipupdate, including information on how to
# download a pre-filled GeoIP.conf file.# Replace YOUR_ACCOUNT_ID_HERE and YOUR_LICENSE_KEY_HERE with an active account
# ID and license key combination associated with your MaxMind account. These
# are available from https://www.maxmind.com/en/my_license_key.
AccountID xxxx  #这里填写刚才记下的ID
LicenseKey xxxx_xxxxxxxxxxxxxxx_xxx   #这里填写刚才记下的key# Enter the edition IDs of the databases you would like to update.
# Multiple edition IDs are separated by spaces.
EditionIDs GeoLite2-Country GeoLite2-City# The remaining settings are OPTIONAL.# The directory to store the database files. Defaults to /usr/local/share/GeoIP
DatabaseDirectory /usr/local/nginx/IPData/ #这里本来是注释掉的,取消注释修改成你数据库存放的位置# The server to use. Defaults to "updates.maxmind.com".
# Host updates.maxmind.com# The proxy host name or IP address. You may optionally specify a
# port number, e.g., 127.0.0.1:8888. If no port number is specified, 1080
# will be used.
# Proxy 127.0.0.1:8888# The user name and password to use with your proxy server.
# ProxyUserPassword username:password# Whether to preserve modification times of files downloaded from the server.
# Defaults to "0".
# PreserveFileTimes 0# The lock file to use. This ensures only one geoipupdate process can run at a
# time.
# Note: Once created, this lockfile is not removed from the filesystem.
# Defaults to ".geoipupdate.lock" under the DatabaseDirectory.
LockFile /usr/local/nginx/IPData/.geoipupdate.lock #这里本来是注释掉的,取消注释修改成你数据库存放的位置# The amount of time to retry for when errors during HTTP transactions are
# encountered. It can be specified as a (possibly fractional) decimal number
# followed by a unit suffix. Valid time units are "ns", "us" (or "µs"), "ms",
# "s", "m", "h".
# Defaults to "5m" (5 minutes).
# RetryFor 5m# The number of parallel database downloads.
# Defaults to "1".
# Parallelism 1

启动geoipupdate

根据官方提供的参数来看,默认数据库会下到/usr/local/share下,所以我们要加个参数让它存放到/usr/local/nginx/IPData, -d跟–database-directory一样,指定数据库存放位置, -f跟–config-file一样,就是指定配置文件

./geoipupdate -d /usr/local/nginx/IPData -f /usr/local/nginx/IPData/GeoIP.conf

等一会它就更新完了,更新完后用ll命令看下时间,如果时间是当前时间,那就说明更新成功。

创建定时任务

创建一个shell脚本
mkdir -p /usr/local/script/logs/
cd /usr/local/nginx/IPData/
vim autoupdate.sh#!/bin/bash
########################################################################
# Function  :自动更新IP数据库                                            #
# Platform  :Centso 6.x and 7.x (Base)                                 #
# Version   :2.0                                                       #
# C_Date    :2023-10-20                                                #
# U_Date    :2023-10-20                                                #
# Author    :Kim                                                       #
# Contact   :StephenJose_Dai                                           #
# Tips      :Please don't delete it                                    #
# Used      :确保/usr/local/nginx/IPData下有geoipupdate和GeoIP.conf文件  #
#            再把脚本放入    /usr/local/script/下,然后运行即可            #
# Log       :用于自动更新国家IP数据库和城市IP数据库的程序                    #
########################################################################
current_time=$(date "+%Y-%m-%d %H:%M:%S")
/usr/local/nginx/IPData/geoipupdate -d /usr/local/nginx/IPData/ -f /usr/local/nginx/IPData/GeoIP.conf
echo "[${current_time}] UpdateSuccessfully!"chmod +x autoupdate.shcrontab -e
00 02 * * * /usr/local/nginx/IPData/autoupdate.sh >>  /usr/local/script/logs/geoipupdate.log 2>&1重启crond服务
systemctl restart crond

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/112378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

他海投260万未回本,一天手写200面单到效率提升200%,经历了什么

他们是时代里的“小人物”,正经历着最为蓬勃的商业变革。年轻一代的创业老板们站在十字路口上,比老一辈更懂直播风口、人工智能、云计算、智能制造、数字经济等经济热词的含义。 作为北京快递行业内少见的本地人,范小菲形容自己的创业历程是…

YOLOv8改进实战 | 更换主干网络Backbone(一)之轻量化模型Ghostnet

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个…

jmeter监听每秒点击数(Hits per Second)

jmeter监听每秒点击数(Hits per Second) 下载插件添加监听器执行压测,监听结果 下载插件 点击选项,点击Plugins Manager (has upgrades),点击Available Plugins,搜索5 Additional Graphs安装。 添加监听…

FPGA的通用FIFO设计verilog,1024*8bit仿真,源码和视频

名称:FIFO存储器设计1024*8bit 软件:Quartus 语言:Verilog 本代码为FIFO通用代码,其他深度和位宽可简单修改以下参数得到 reg [7:0] ram [1023:0];//RAM。深度1024,宽度8 代码功能: 设计一个基于FPGA…

【ELK 使用指南 3】Zookeeper、Kafka集群与Filebeat+Kafka+ELK架构(附部署实例)

EFLKK 一、Zookeeper1.1 简介1.2 zookeeper的作用1.3 Zookeeper的特点1.5 Zookeeper的数据结构1.6 Zookeeper的应用场景1.7 Zookeeper的选举机制(重要)1.7.1 第一次启动时1.7.2 非第一次启动时 二、Zookeeper集群部署2.1 安装前准备2.2 安装 ZookeeperSt…

(三)QT中使用QVTKOpenGLNativeWidget的简单教程以及案例,利用PCLVisualizer显示点云

先添加一个带有ui的QT应用程序。 一、在ui界面中添加QVTKOpenGLNativeWidget控件 先拖出来一个QOpenGLWidget控件 修改布局如下: 然后将QOpenGLWidget控件提升为QVTKOpenGLNativeWidget控件,步骤如下: 右击QOpenGLWidget窗口,选…

【五:Httprunner的介绍使用】

接口自动化框架封装思想的建立。httprunner(热加载:动态参数),去应用 意义不大。 day1 一、什么是Httprunner? 1.httprunner是一个面向http协议的通用测试框架,目前最新的版本3.X。以前比较流行的 2.X的版本。2.它的…

pytorch 入门 (三)案例一:mnist手写数字识别

本文为🔗小白入门Pytorch内部限免文章 🍨 本文为🔗小白入门Pytorch中的学习记录博客🍦 参考文章:【小白入门Pytorch】mnist手写数字识别🍖 原作者:K同学啊 目录 一、 前期准备1. 设置GPU2. 导入…

基于主动移频法与AFD孤岛检测的单相并网逆变器仿真(Simulink仿真实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

二、vue基础语法

一、模板语法 1、文本渲染 使用双花括号语法插入文本 <template><div><h3>msg: {{ message }}</h3></div> </template><script> export default {data() {return {message: "输出信息"}} } </script><style s…

成集云 | 思迅商慧集成用友T | 解决方案

源系统成集云目标系统 方案介绍 思迅商慧是一款集批次成本、配送复核、自助收银、供应链、加盟管理等于一身的零售管理软件。可以帮助解决客户的运营和管理难题&#xff0c;包括加盟店管理、供应商管理、配送复核管理、商品经营维护、自助收银系统等。 用友T是一款…

Node.js在Python中的应用实例解析

随着互联网的发展&#xff0c;数据爬取成为了获取信息的重要手段。本文将以豆瓣网为案例&#xff0c;通过技术问答的方式&#xff0c;介绍如何使用Node.js在Python中实现数据爬取&#xff0c;并提供详细的实现代码过程。 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境…

Flutter——最详细(CustomScrollView)使用教程

CustomScrollView简介 创建一个 [ScrollView]&#xff0c;该视图使用薄片创建自定义滚动效果。 [SliverList]&#xff0c;这是一个显示线性子项列表的银子列表。 [SliverFixedExtentList]&#xff0c;这是一种更高效的薄片&#xff0c;它显示沿滚动轴具有相同范围的子级的线性列…

JavaScript爬虫程序实现自动化爬取tiktok数据教程

以下是一个使用 request-promise 和 JavaScript 的爬虫程序&#xff0c;用于爬取tiktok的内容。此程序使用了 https://www.duoip.cn/get_proxy 这段代码。 // 引入 request-promise 库 const rp require(request-promise);// 定义 get\_proxy 函数 function get_proxy() {retu…

家装、家居两不误,VR全景打造沉浸式家装体验

当下&#xff0c;用户对生活品质要求日益提升&#xff0c;越来越多的用户对多功能家装用品需求较大&#xff0c;由此造就了VR全景家装开始盛行。VR全景家装打破传统二维空间模式&#xff0c;通过视觉、交互等功能让用户更加真实、直观的体验和感受家居布置的效果。 一般来说&am…

基于PHP的蛋糕甜品商店管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

pytest利用request fixture实现个性化测试需求详解

这篇文章主要为大家详细介绍了pytest如何利用request fixture实现个性化测试需求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下− 前言 在深入理解 pytest-repeat 插件的工作原理这篇文章中&#xff0c;我们看到pytest_repeat源码中有这样一段 import pyt…

深拷贝和浅拷贝

一、深浅拷贝是什么&#xff1f; 首先我们要明白一点&#xff0c;js中数据类型分为&#xff1a; 基本数据类型: Number, String, Boolean, Null, Undefined, Symbol 引用数据类型: Object &#xff0c;Array , Function 对于引用数据 类型才有深浅拷贝的说法 1. 浅拷贝&…

An Embarrassingly Easy but Strong Baseline for Nested Named Entity Recognition

原文链接&#xff1a; https://aclanthology.org/2023.acl-short.123.pdf ACL 2023 介绍 问题 基于span来解决嵌套ner任务的范式&#xff0c;大多都是先对span进行枚举&#xff0c;然后对每个span进行分类&#xff0c;实际就是得到一个分数矩阵&#xff0c;矩阵中每个元素表示一…

书单|1024程序员狂欢节充能书单!

点击链接进入图书专题 1024程序员节 “IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台&#xff0c;致力于帮助读者在广义的IT领域里&#xff0c;掌握更专业、更实用的知识与技能&#xff0c;快速提升职场竞争力。 点击蓝色微信名可快速关注我们。 一年一度的1024程序员…