Nginx超详细讲解+实操

前言

nginx作为当今火爆的、高性能的http及反向代理服务,不管前端还是后端,都需要全面去了解,学习,实操。

nginx 介绍

为了有一个全面的认知,接下来我们先来看看nginx的架构以及一些特点。

nginx 特点

  1. 处理响应请求快(异步非阻塞I/O,零拷贝,mmap,缓存机制)
  2. 扩展性好(模块化设计)
  3. 内存消耗低(异步非阻塞,多阶段处理)
  4. 具有很高的可靠性(无数次的生产验证,很多头部公司都在用)
  5. 热部署
  6. 高并发连接(事件驱动模型,多进程机制)
  7. 自由的BSD许可协议(可以自己修改代码后发布,包容性极强)

nginx模块

nginx服务器由n多个模块组成,每个模块就是一个功能,某个模块只负责自身的功能,所以说对于 “高内聚,低耦合“ 的编程规则,在nginx身上可谓体现的淋漓尽致

Nginx模块名称模块作用
ngx_http_access_module四层基于IP的访问控制,可以通过匹配客户端源IP地址进行限制
ngx_http_auth_basic_module状态页,使用basic机制进行用户认证,在编译安装nginx的时候需要添加编译参数–withhttp_stub_status_module,否则配置完成之后监测会是提示语法错误
ngx_http_stub_status_module状态统计模块
ngx_http_gzip_module文件的压缩功能
ngx_http_gzip_static_module静态压缩模块
ngx_http_ssl_modulenginx 的https 功能
ngx_http_rewrite_module重定向模块,解析和处理rewrite请求
ngx_http_referer_module防盗链功能,基于访问安全考虑
ngx_http_proxy_module将客户端的请求以http协议转发至指定服务器进行处理
ngx_stream_proxy_moduletcp负载,将客户端的请求以tcp协议转发至指定服务器处理
ngx_http_fastcgi_module将客户端对php的请求以fastcgi协议转发至指定服务器助理
ngx_http_uwsgi_module将客户端对Python的请求以uwsgi协议转发至指定服务器处理
ngx_http_headers_module可以实现对头部报文添加指定的key与值
ngx_http_upstream_module负载均衡模块,提供服务器分组转发、权重分配、状态监测、调度算法等高级功能
ngx_stream_upstream_module后端服务器分组转发、权重分配、状态监测、调度算法等高级功能
ngx_http_fastcgi_module实现通过fastcgi协议将指定的客户端请求转发至php-fpm处理
ngx_http_flv_module为flv伪流媒体服务端提供支持

核心模块 :是nginx 服务器正常运行必不可少的模块,提供错误日志记录、配置文件解析、事件驱动 机制、进程管理等核心功能

标准HTTP模块 :提供 HTTP 协议解析相关的功能,如:端口配置、网页编码设置、HTTP 响应头设 置等

可选HTTP模块 :主要用于扩展标准的 HTTP 功能,让nginx能处理一些特殊的服务,如:Flash 多 媒体传输、解析 GeoIP 请求、SSL 支持等

邮件服务模块 :主要用于支持 nginx 的邮件服务,包括对 POP3 协议、IMAP 协议和 SMTP 协议的支持

第三方模块 :是为了扩展 Nginx 服务器应用,完成开发者自定义功能,如:Json 支持、Lua 支持等

nginx常见应用场景

  • 反向代理
  • 负载均衡
  • 缓存
  • 限流
  • 黑/白名单
  • 静态资源服务
  • 动静分离
  • 防盗链
  • 跨域
  • 高可用

反向代理

使用一台代理服务器(下图中的深色服务器)对底层的应用服务器(下图中的浅色服务器)进行代理。将他们的地址信息对客户端屏蔽,客户端只需要访问代理服务器即可,代理服务器会将请求转发给底层的真正起作用的应用服务器。但在客户端眼里,服务器只有唯一的一台,就是代理服务器。


最近又赶上跳槽的高峰期(招聘旺季),好多读者都问我有没有面试题神器,我苦苦整了一份内部资料《互联网大厂面试题+Java3套知识精华》并分类 4 份 PDF,累计 926 页!
在这里插入图片描述

Linux保姆级教程|互联网大厂面试题|算法小抄

nginx.conf文件解读

nginx.conf 这个文件是 nginx 的核心配置,一共由三部分组成,分别为全局块、events块和http块。

默认配置文件

#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;server {listen       80; #监听的端口server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {#    listen       8000;#    listen       somename:8080;#    server_name  somename  alias  another.alias;#    location / {#        root   html;#        index  index.html index.htm;#    }#}# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;#    location / {#        root   html;#        index  index.html index.htm;#    }#}}

结构说明

全局模块
event模块
http模块upstream模块server模块location块location块....server模块location块location块.......    

各模块的功能作用如下描述:

  1. 全局模块: 配置影响nginx全局的指令,比如运行nginx的用户名,nginx进程pid存放路径,日志存放路径,配置文件引入,worker进程数等。
  2. events块: 配置影响nginx服务器或与用户的网络连接。比如每个进程的最大连接数,选取哪种事件驱动模型(select/poll epoll或者是其他等等nginx支持的)来处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
  3. http块: 可以嵌套多个server,配置代理,缓存,日志格式定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
  4. server块: 配置虚拟主机的相关参数比如域名端口等等,一个http中可以有多个server。
  5. location块: 配置url路由规则
  6. upstream块: 配置上游服务器的地址以及负载均衡策略和重试策略等等

配置示例

########### 每个指令必须有分号结束。#################
#配置用户或者组,默认为nobody nobody,以什么用户启动 nginx程序,涉及到文件的读写权限,一般应该用root。
user root;  #允许生成的进程数,默认为1。标配一个cpu起一个进程。
worker_processes auto;  #指定nginx进程运行文件存放地址
pid /nginx/pid/nginx.pid;   #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
#error_log log/error.log debug;  events {#设置网路连接序列化,防止惊群现象发生,默认为on#accept_mutex on;  #设置一个进程是否同时接受多个网络连接,默认为off#multi_accept on; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport#use epoll;     #最大连接数,可以根据实际情况扩大,生产可扩大到10240worker_connections  10240;    
}http {#文件扩展名与文件类型映射表include       mime.types; #默认文件类型,默认为text/plaindefault_type  application/octet-stream; #取消服务日志#access_log off; #自定义格式    #log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #combined为日志格式的默认值#access_log log/access.log myFormat;  #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。sendfile on; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。sendfile_max_chunk 100k;  #连接超时时间,默认为75s,可以在http,server,location块。keepalive_timeout 75;  #接收客户端请求体超时client_body_timeout 20s;#客户端连接nginx超时, 建议5s内,接收客户端header超时时间,超时返回408client_header_timeout 10s;#限制请求体的大小,若超过所设定的大小,返回413错误。client_max_body_size 10M;#Nginx分配给请求数据的Buffer大小,如果请求的数据小于client_body_buffer_size直接将数据先在内存中存储。#大于该值小于client_max_body_size,就会将数据先存储到临时文件(用户组要有读写权限)中,client_body_temp 指定的路径中,默认该路径值是/tmp/。client_body_buffer_size 128k;#开启自定义错误重定向,不存在会返回404页面fastcgi_intercept_errors on;#热备upstream mysvr {   server 127.0.0.1:7878;server 192.168.10.121:3333 backup;  }server {#单连接请求上限次数。keepalive_requests 120; #监听端口listen       4545;   #监听地址 server_name  127.0.0.1;    #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。     location  ~*^.+$ {   #根目录,设置目录#root path;  #设置默认页#index index.htm;  #请求转向mysvr 定义的服务器列表proxy_pass  http://mysvr;  #拒绝的ip#deny 127.0.0.1; #允许的ip#allow 172.18.5.54;           } }
}

location 路由匹配规则

nginx根据用户请求的URI来匹配对应的location模块,匹配到哪个location,请求将被哪个location块中的配置项所处理。

location配置语法:location [修饰符] pattern {…}

常见匹配规则如下:

修饰符作用
无修饰符的前缀匹配,匹配前缀是 你配置的(比如说你配的是 /aaa) 的url
=精确匹配
~正则表达式模式匹配,区分大小写
~*正则表达式模式匹配,不区分大小写
^~^~类型的前缀匹配,类似于无修饰符前缀匹配,不同的是,如果匹配到了,那么就停止后续匹配
/通用匹配,任何请求都会匹配到(只要你域名对,所有请求通吃!)

以上规则简单总结就是优先级从高到低依次为(序号越小优先级越高):

1. location =    # 精准匹配
2. location ^~   # 带参前缀匹配
3. location ~    # 正则匹配(区分大小写)
4. location ~*   # 正则匹配(不区分大小写)
5. location /a   # 普通前缀匹配,优先级低于带参数前缀匹配。
6. location /    # 任何没有匹配成功的,都会匹配这里处理
前缀匹配(无修饰符)

这种方式最常用

server {location /api/{proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://localhost:48080/;}
}
前缀匹配( ^~ )

^~ 表示 uri 以某个字符串开头

location ^~ /static/ {default_type text/plain;return 200 "hello";
}
#curl http://127.0.0.1:2880/static/aa
正则匹配(~ 区分大小写)
location  ~ ^/document$ {default_type text/plain;return 200 "hello";
}
#curl http://127.0.0.1:2880/document
正则匹配(~* 不区分大小写)
location  ~* ^/document$ {default_type text/plain;return 200 "hello";
}#curl http://127.0.0.1:2880/document 
#curl http://127.0.0.1:2880/DOCUMENT
通用匹配( / )

通用匹配使用一个 / 表示,可以匹配所有请求,一般nginx配置文件最后都会有一个通用匹配规则,当其他匹配规则均失效时,请求会被路由给通用匹配规则处理,如果没有配置通用匹配,并且其他所有匹配规则均失效时,nginx会返回404错误。

location / {root   html;index  index.html index.htm;
}

反向代理配置

server {listen 8279;location / { proxy_pass http://ip:6020;}
}

负载均衡

把www.domain.com均衡到本机不同的端口,也可以改为均衡到不同的地址上

http {upstream myproject {ip_hash;server 127.0.0.1:8000 weight=3;server 127.0.0.1:8001;server 127.0.0.1:8002;server 127.0.0.1:8003;}server {listen 80;server_name www.domain.com;location / {proxy_pass http://myproject;}}
}

Nginx常用的负载策略

负载策略描述特点
轮询默认方式1. 每个请求会按时间顺序逐一分配到不同的后端服务器 2. 在轮询中,如果服务器down掉了,会自动剔除该服务器 3. 缺省配置就是轮询策略 4. 此策略适合服务器配置相当,无状态且短平快的服务使用
weight权重方式1. 在轮询策略的基础上指定轮询的几率 2. 权重越高分配到的请求越多 3. 此策略可以与least_conn和ip_hash结合使用 4. 此策略比较适合服务器的硬件配置差别比较大的情况
ip_hash依据ip的hash值来分配1. 在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight) 2. ip_hash不能与backup同时使用 3. 此策略适合有状态服务,比如session 4. 当有服务器需要剔除,必须手动down掉
least_conn最少连接方式1. 此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况
fair(第三方)响应时间方式1. 根据后端服务器的响应时间来分配请求,响应时间短的优先分配 2. Nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream_fair模块
url_hash(第三方)依据URL分配方式1. 按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器 2. Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包

缓存

nginx代理缓存可以在某些场景下有效的减少服务器压力,让请求快速响应,从而提升用户体验和服务性能。

指令名称作用解释语法默认配置示例作用域
proxy_cache设置是否开启对后端响应的缓存。proxy_cache zone | off;proxy_cache off;proxy_cache mycache; # 规定开启nginx缓存并且缓存名称为: mycachehttp, server, location
proxy_cache_valid配置什么状态码可以被缓存,以及缓存时长proxy_cache_valid [code …] time;没有默认值proxy_cache_valid 200 304 2m; # 对于状态为200和304的缓存文件,缓存时间是2分钟http, server, location
proxy_cache_key设置缓存文件的 keyproxy_cache_key string;proxy_cache_key schemeschemeschemeproxy_host$request_uri;proxy_cache_key “hosthosthostrequest_uri $cookie_user”; # 使用host +请求的uri以及cookie拼接成缓存keyhttp, server, location
proxy_cache_path指定缓存存储的路径,文件名为cache key的md5值,然后多级目录的话,根据level参数来生成,key_zone参数用来指定在共享内存中缓存数据的名称和内存大小,比如keys_zone=mycache:100m,inactive用来指定缓存没有被访问后超时移除的时间,默认是10分钟,也可以自己指定比如inactive=2h ;max_size 用来指定缓存的最大值,超过这个值则会自动移除最近最少使用(lru淘汰算法)的缓存 这个指令对应的参数很多,具体见官网:proxy_cache_pathproxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [min_free=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:128m inactive=3d max_size=2g; # 设置缓存存放的目录为/data/nginx/cache,并设置缓存名称为mycache,大小为128m, 三天未被访问过的缓存将自动清除,磁盘中缓存的最大容量为2GB。http
proxy_cache_bypass定义不从缓存中获取响应数据的条件。如果字符串参数中至少有一个值不为空且不等于" 0 ",则不会从缓存中获取响应:proxy_cache_bypass string …;没有默认值proxy_cache_bypass cookienocachecookie_nocache cookienocachearg_nocache$arg_comment;http, server, location
proxy_cache_min_uses指定某一个相同请求在几次请求之后才缓存响应内容proxy_cache_min_uses number;proxy_cache_min_uses 1;proxy_cache_min_uses 3; 规定某一个请求在第3次之后才走nginx缓存http, server, location
proxy_cache_use_stale指定后端服务器在返回什么状态码的情况下可以使用过期的缓存proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 … |off ;proxy_cache_use_stale off;proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; # 规定服务在出现error timeout,以及502,503,504时可使用过期缓存http, server, location
proxy_cache_lock默认不开启,开启后若出现并发重复请求,nginx只让一个请求去后端读数据,其他的排队并尝试从缓存中读取;proxy_cache_lock on |off;proxy_cache_lock off;proxy_cache_lock on; # 开启缓存锁http, server, location
proxy_cache_lock_timeout等待缓存锁(proxy_cache_lock)超时之后将直接请求后端,且结果不会被缓存proxy_cache_lock_timeout time;proxy_cache_lock_timeout 5s;proxy_cache_lock_timeout 6s; # 等待缓存锁超时(6ms)之后将直接请求后端,结果不会被缓存。http, server, location
proxy_cache_methods如果客户端请求方法在该指令中,则响应将被缓存。“GET”和“HEAD”方法总是被添加到列表中,尽管建议显式地指定它proxy_cache_methods GET|HEAD |POST …;proxy_cache_methods GET HEAD;proxy_cache_methods GET HEAD PUT POST; # 规定 可缓存的方法有 :get head put posthttp, server, location

修改配置文件:

http{...# 指定缓存存放目录为/usr/local/nginx/test/nginx_cache_storage,并设置缓存名称为mycache,大小为64m, 1天未被访问过的缓存将自动清除,磁盘中缓存的最大容量为1gbproxy_cache_path /usr/local/nginx/test/nginx_cache_storage levels=1:2 keys_zone=mycache:64m inactive=1d max_size=1g;...server{...#  指定 username 参数中只要有字母 就不走nginx缓存  if ($arg_username ~ [a-z]) {set $cache_name "no cache";}location  /interface {proxy_pass http://myserver/;# 使用名为 mycache 的缓存空间proxy_cache mycache;# 对于200 206 状态码的数据缓存2分钟proxy_cache_valid 200 206 1m;# 定义生成缓存键的规则(请求的url+参数作为缓存key)proxy_cache_key $host$uri$is_args$args;# 资源至少被重复访问2次后再加入缓存proxy_cache_min_uses 3;# 出现重复请求时,只让其中一个去后端读数据,其他的从缓存中读取proxy_cache_lock on;# 上面的锁 超时时间为4s,超过4s未获取数据,其他请求直接去后端proxy_cache_lock_timeout 4s;# 对于请求参数中有字母的 不走nginx缓存proxy_no_cache $cache_name; # 判断该变量是否有值,如果有值则不进行缓存,没有值则进行缓存# 在响应头中添加一个缓存是否命中的状态(便于调试)add_header Cache-status $upstream_cache_status;    }...
}

限流

Nginx主要有两种限流方式:按并发连接数限流(ngx_http_limit_conn_module)、按请求速率限流(ngx_http_limit_req_module 使用的令牌桶算法)。

按请求速率限流

http{...# 对请求速率限流limit_req_zone $binary_remote_addr zone=myRateLimit:10m rate=5r/s;server{location /interface{...limit_req zone=myRateLimit burst=5  nodelay;limit_req_status 520;limit_req_log_level info;}}
}

$binary_remote_addr:表示基于 remote_addr(客户端IP) 来做限流 zone=myRateLimit:10m:表示使用myRateLimit来作为内存区域(存储访问信息)的名字,大小为10M,1M能存储16000 IP地址的访问信息,10M可以存储16W IP地址访问信息

rate=5r/s:表示相同ip每秒最多请求5次,nginx是精确到毫秒的,也就是说此配置代表每200毫秒处理一个请求,这意味着自上一个请求处理完后,若后续200毫秒内又有请求到达,将拒绝处理该请求(如果没配burst的话)
burst=5:意思是设置一个大小为5的缓冲队列,若同时有6个请求到达,Nginx 会处理第一个请求,剩余5个请求将放入队列,然后每隔200ms从队列中获取一个请求进行处理。若请求数大于6,将拒绝处理多余的请求,直接返回503
nodelay:针对的是 burst 参数,burst=5 nodelay 这个配置表示被放到缓冲队列的这5个请求会立马处理,不再是每隔200ms取一个了。但是值得注意的是,即使这5个突发请求立马处理并结束,后续来了请求也不一定不会立马处理,因为虽然请求被处理了但是请求所占的坑并不会被立即释放,而是只能按 200ms 一个来释放,释放一个后 才将等待的请求 入队一个。
另外两个: limit_req_status=520表示当被限流后,nginx的返回码,limit_req_log_level info代表日志级别

按并发连接数限流

http{# 针对ip  对请求连接数限流...limit_conn_zone $binary_remote_addr zone=myConnLimit:10m; ...server{...limit_conn myConnLimit 12;}
}    

limit_conn_zone $binary_remote_addr zone=myConnLimit:10m; 代表的意思 是 基于连接数量限流,限流的对象是ip 名称是myConnLimit 存储空间大小10mb(即存放某ip的访问记录),limit_conn myConnLimit 12;标识该ip最大支持12个连接超过则返回503

https配置

https_ssl模块安装

需要下载源码:

wget http://nginx.org/download/nginx-1.23.0.tar.gz

解压后编译:

 ./configure --prefix=/usr/local/nginx --with-http_ssl_modulemake && make install

查看版本:

nginx -V

出现 --with-http_ssl_module 代表安装了ssl模块。

证书可以自己生成免费证书,也可以购买。

配置https

   server {listen      8080 ssl;server_name  localhost;ssl_certificate      /home/nginx/cert/test.crt;ssl_certificate_key  /home/nginx/cert/test.key;root  html/dist;charset utf-8;}

压缩

http {# 开启/关闭 压缩机制gzip on;# 根据文件类型选择 是否开启压缩机制gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/jpg image/gif image/png  application/json;# 设置压缩级别,一共9个级别  1-9   ,越高资源消耗越大 越耗时,但压缩效果越好,gzip_comp_level 9;# 设置是否携带Vary:Accept-Encoding 的响应头gzip_vary on;# 处理压缩请求的 缓冲区数量和大小gzip_buffers 32 64k;# 对于不支持压缩功能的客户端请求 不开启压缩机制gzip_disable "MSIE [1-6]\."; # 比如低版本的IE浏览器不支持压缩# 设置压缩功能所支持的HTTP最低版本gzip_http_version 1.1;# 设置触发压缩的最小阈值gzip_min_length 2k;# off/any/expired/no-cache/no-store/private/no_last_modified/no_etag/auth 根据不同配置对后端服务器的响应结果进行压缩gzip_proxied any;
} 

Spring Cloud Alibaba开发手册,真香!
Spring Cloud Alibaba为分布式应用开发提供了一站式解决方案。它包含开发分布式应用程序所需的所有组件,可以轻松地使用Spring Cloud开发应用程序。

最近抽空整理了一份Spring Cloud Alibab学习笔记免费分享给大家,目录如下

在这里插入图片描述

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

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

相关文章

QT(C++)-error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”

1、项目场景: 在VS中采用QT(C)调试时,出现error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”错误 2、解决方案: 在“解决方案资源管理器”中选中出现此类BUG的项目,右键-…

静态路由表学习实验

实验要求:各个pc设备可以通信,并且可以访问外网,假设R1已连接外网 拓扑结构 思路:配置pc机ip地址,子网掩码,和网关(网关地址是上层路由接口的地址),配置路由各个接口地址…

什么是LLM Agent?

引言: LLM Agent 已经成为大语言模型中最有价值的探索方向,也更趋于最前沿的通用人工智能。构建企业自己的 LLM Agent 有助于企业在最前沿的人工智能领域探索具有完全自主性的智能化能力,包括基于企业知识库、企业工具 API(如&am…

element-plus中的日期时间选择器el-date-picker;日期选择面板中选定起始与结束的日期只能改具体的时刻,日期默认是一个月没法动态修改问题

目前遇到一个问题,在使用element-plus中的日期时间选择器el-date-picker,type为datetimerange时,展示的日期选择面板有两个输入框,开始时间和结束时间,element-plus只提供了default-time 使用datetimerange进行范围选择…

Visio中存在问题的解决方法

公式缩放 mathtype公式在visio缩放之后,出现了变形。 解决方法:每次输入公式都通过 插入->对象->mathType Equation 新建一个公式。可以避免 注:网上有的说在word中使用mathtype编写公式,之后复制到visio中。 插入波形 选择…

LinkedIn 互联网架构扩展简史

LinkedIn成立于 2003 年,其目标是连接到您的网络以获得更好的工作机会。第一周只有 2,700 名会员。时间快进了很多年,LinkedIn 的产品组合、会员基础和服务器负载都取得了巨大的增长。 如今,LinkedIn 在全球运营,拥有超过 3.5 亿会…

fuzzywuzzy,一个好用的 Python 库!

目录 前言 安装 基本功能 1. 字符串相似度比较 2. 模糊匹配与排序 实际应用场景 1. 数据清洗 2. 文本匹配与搜索 3. 搜索引擎优化 总结 前言 大家好,今天为大家分享一个好用的 Python 库 - fuzzywuzzy Github地址:https://github.com/seatgeek/fu…

企业如何乘上跨境电商的风口?

近年来,国内跨境电商成为内贸外贸发展的一个亮点,国家工作会议也提出:“要加快培育外贸新动能,巩固外贸外资基本盘,拓展中间品贸易、服务贸易、数字贸易、跨境电商出口”。多因素推动下,使得跨境电商成为我…

使用pytorch构建一个无监督的深度卷积GAN网络模型

本文为此系列的第二篇DCGAN,上一篇为初级的GAN。普通GAN有训练不稳定、容易陷入局部最优等问题,DCGAN相对于普通GAN的优点是能够生成更加逼真、清晰的图像。 因为DCGAN是在GAN的基础上的改造,所以本篇只针对GAN的改造点进行讲解,其…

Python算法100例-4.6 歌星大奖赛

完整源代码项目地址,关注博主私信源代码后可获取 1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序6.问题拓展7.知识点补充 1.问题描述 在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。选手最…

Spring Cloud+Spring Alibaba笔记

Spring CloudSpring Alibaba 文章目录 Spring CloudSpring AlibabaNacos服务发现配置中心 OpenFeign超时机制开启httpclient5重试机制开启日志 SeataSentinel流量控制熔断降级热点控制规则持久化集成 OpenFeign集成 Gateway MicrometerZipKinGateway路由断言过滤器 Nacos 服务…

TikTok养号保姆级教程:学好这9招,你就是流量宠儿!

01 什么是养号? 在回答这个问题之前,我们首先要明白Tiktok智能推荐机制,也就是著名TikTok算法。 每个创作者发布视频时,TikTok都会根据视频内容、视频发布地区、标题内容进行特征识别,来判断视频可能会有哪些人群喜欢…

鱼哥赠书活动第14期:看完这本《数字化运维》掌握数字化运维方法,构建数字化运维体系

鱼哥赠书活动第14期:看完这本《数字化运维》掌握数字化运维方法,构建数字化运维体系 主要内容:读者对象:赠书抽奖规则:往期赠书福利: 数字化转型已经成为大势所趋,各行各业正朝着数字化方向转型&#xff0c…

SpringBoot3集成PostgreSQL

标签:PostgreSQL.Druid.Mybatis.Plus; 一、简介 PostgreSQL是一个功能强大的开源数据库系统,具有可靠性、稳定性、数据一致性等特点,且可以运行在所有主流操作系统上,包括Linux、Unix、Windows等。 通过官方文档可以…

MySQL数据库高级语句

文章目录 MySQL高级语句older by 排序区间判断查询或与且(or 与and)嵌套查询(多条件)查询不重复记录distinctcount 计数限制结果条目limit别名as常用通配符嵌套查询(子查询)同表不同表嵌套查询还能用于删除…

C语言例4-36:求Fibonacci数列的前40个数

教材优化代码如下&#xff1a; //求Fibonacci数列的前40个数 #include<stdio.h> int main(void) {long int f11,f21;int i1;for(;i<20;i){printf("%15ld%15ld",f1,f2);if(i%20)printf("\n");f1f2;f2f1;}return 0; } 结果如下&#xff1a; 我的基…

IC-随便记

1、移远通信---通信模组 物联网解决方案供应商&#xff0c;可提供完备的IoT产品和服务&#xff0c;涵盖蜂窝模组(5G/4G/3G/2G/LPWA)、车载前装模组、智能模组&#xff08;5G/4G/边缘计算&#xff09;、短距离通信模组(Wi-Fi&BT)、GNSS定位模组、卫星通信模组、天线等硬件产…

Radio Silence for mac 好用的防火墙软件

Radio Silence for Mac是一款功能强大的网络防火墙软件&#xff0c;专为Mac用户设计&#xff0c;旨在保护用户的隐私和网络安全。它具备实时网络监视和控制功能&#xff0c;可以精确显示每个网络连接的状态&#xff0c;让用户轻松掌握网络活动情况。 软件下载&#xff1a;Radio…

DNS 服务 Unbound 部署最佳实践

文章目录 安装unbound-control配置启动服务测试 参考&#xff1a; 官网地址&#xff1a;https://nlnetlabs.nl/projects/unbound/about/ 详细文档&#xff1a;https://unbound.docs.nlnetlabs.nl/en/latest/index.html DNS服务Unbound部署于使用 https://cloud.tencent.com/…