关于 Nginx 的哪些事
关于 Nginx 的哪些事
- 1、Nginx 主要功能
- 2、Nginx 的常用命令
- 2.1、启动Nginx
- 2.2、停止 Nginx
- 2.3、重新加载Nginx 配置
- 2.4、检查Nginx配置文件
- 2.5、指定配置文件
- 2.6、检查Nginx版本
- 2.7、显示Nginx帮助信息
- 3、Nginx 配置文件 nginx.conf
- 3.1、Nginx 配置文件(nginx.conf)组成部分
- 3.2、Nginx 配置文件(nginx.conf)示例
- 4、反向代理
- 4.1、简单示例
- 4.2、location 语法
- 4.2.1、精准匹配(=)
- 4.2.2、普通匹配(^~)
- 4.2.3、正则匹配(~)
- 4.2.4、默认根路径匹配(/)
- 4.2.5、nginx内部跳转(@)
- 4.2.6、location URI结尾带不带 /
- 5、负载均衡
- 5.1、简单示例
- 5.2、常用负载均衡策略
- 5.2.1、轮询
- 5.2.2、权重轮询
- 5.2.3、IP哈希
- 5.2.4、最少连接
- 6、动静分离
- 7、Nginx 限流
- 7.1、基于IP限流
- 7.2、基于URL限流
1、Nginx 主要功能
Nginx主要功能:
-
正向代理:需要在客户端配置代理服务器,进行指定网站访问。
-
反向代理:反向代理是Nginx的常见功能之一。当客户端向服务器发送请求时,首先经过Nginx服务器,然后Nginx将请求转发给内部的Web服务器。这种代理方式使得外部网络无法直接访问内部的Web服务器,提高了安全性。
-
负载均衡:它将网络流量分担到多个网络节点上,并行处理请求,从而提高网络系统的处理能力,减少前端用户等待响应的时间。
-
动静分离:将动态网页和静态页面分开处理。通过动静分离,Nginx可以充分利用其高并发、高性能的特点,同时减轻后端服务器的负载,提高网站的访问速度和可维护性。
2、Nginx 的常用命令
2.1、启动Nginx
# 首先进入 Nginx 目录 (一般在该目录,具体根据实际安装情况而定)
cd /usr/local/nginx
# 启动 Nginx
./sbin/nginx# 或者直接执行
/usr/local/nginx/sbin/nginx
2.2、停止 Nginx
# 首先进入 Nginx 目录 (一般在该目录,具体根据实际安装情况而定)
cd /usr/local/nginx
# 停止 Nginx
./sbin/nginx -s stop
# 或者在 Nginx 目录执行
./sbin/nginx -s quit# 或者直接执行
/usr/local/nginx/sbin/nginx -s stop
# 或
/usr/local/nginx/sbin/nginx -s quit
2.3、重新加载Nginx 配置
# 首先进入 Nginx 目录 (一般在该目录,具体根据实际安装情况而定)
cd /usr/local/nginx
# 重新加载Nginx 配置
./sbin/nginx -s reload
2.4、检查Nginx配置文件
# 首先进入 Nginx 目录 (一般在该目录,具体根据实际安装情况而定)
cd /usr/local/nginx
# 检查Nginx配置文件是否正确
./sbin/nginx -t
2.5、指定配置文件
# 首先进入 Nginx 目录 (一般在该目录,具体根据实际安装情况而定)
cd /usr/local/nginx
# 指定配置文件:在命令行中添加 -c 参数。例如:
./sbin/nginx -c /usr/local/nginx/conf/nginx.conf
2.6、检查Nginx版本
# 首先进入 Nginx 目录 (一般在该目录,具体根据实际安装情况而定)
cd /usr/local/nginx
# 检查Nginx版本
./sbin/nginx -V
# 或者在Nginx目录中执行
./sbin/nginx -v
2.7、显示Nginx帮助信息
# 首先进入 Nginx 目录 (一般在该目录,具体根据实际安装情况而定)
cd /usr/local/nginx
# 显示Nginx帮助信息
./sbin/nginx -h
3、Nginx 配置文件 nginx.conf
Nginx 配置文件路径,一般在 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf
3.1、Nginx 配置文件(nginx.conf)组成部分
-
① 全局块:从配置文件开始到events块之间的内容,主要设置一些影响nginx服务器整体运行的配置命令,如worker_processes、worker_processes值等。
-
② events块:主要配置Nginx服务器与用户的网络连接,包括是否开启对多work process下的网络连接进行序列化,是否允许同时接收多个网络连接等。
-
③ http块:这是Nginx服务器配置中最频繁的部分,包括http全局块、server块等。http全局块配置指令包括文件引入、MIME-TYPE定义、日志定义、连接超时时间、单链接请求数上限等。
此外,Nginx还支持对stream和server块的配置,stream块用于配置HTTP和SMTP代理服务器的代理设置,server块用于配置虚拟主机的设置。
3.2、Nginx 配置文件(nginx.conf)示例
# 指定Nginx服务器的用户
user nginx;
# 指定Nginx服务器的工作进程数。
worker_processes 1;
# 指定错误日志存放路径
error_log /var/log/nginx/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;# 指定Nginx进程的存放路径。
pid /var/run/nginx.pid; events { # 指定每个worker process的最大连接数worker_connections 1024; # 指定Nginx服务器的工作进程数。# worker_processes 20;# 指定是否允许一个worker process同时接收多个网络连接。multi_accept on;
} http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # gzip:开启gzip压缩,减少传输数据量。# gzip on;# 该 server 配置了Nginx作为反向代理服务器,# 将所有以example.com为域名的HTTP请求转发到192.168.1.100:8080的目标服务器。server { # listen:指定Nginx监听的端口号。例如,listen 80,表示Nginx将监听80端口。listen 80; # server_name:指定服务器名称,可以是一个域名或多个域名。# 指定Nginx要代理的域名,表示Nginx将代理example.com域名的请求。server_name example.com; # charset:设置字符集。# charset koi8-r;# access_log logs/host.access.log main;# 指定要代理的请求路径。例,location / { ... }表示Nginx将对所有请求进行代理# location /:匹配所有以该主机名开头的URL路径。location / { # 指定代理的目标服务器。# 这里指Nginx将所有请求代理到192.168.1.100:8080的目标服务器。proxy_pass http://192.168.1.100:8080; # index:指定默认页面,可以是index.html、index.htm或index.nginx-debian.html。# index index.html index.htm;# try_files:用于尝试访问本地文件或定义的其他动作,如重定向、返回特定状态码等。# try_files $uri $uri/ /index.html;} # error_page:指定错误页面,用于处理特定错误码的页面。#error_page 404 /404.html;# redirect server error pages to the static page /50x.html# error_page:指定错误页面,用于处理特定错误码的页面。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;#}} # 该server段落,配置了Nginx作为反向代理和HTTPS代理服务器。# 这里将所有以example.com为域名的HTTPS请求,转发到192.168.1.100:8080的目标服务器, # 并使用SSL证书进行加密传输。server { # listen:指定Nginx监听的端口号。listen 443 ssl; # server_name:指定服务器名称,可以是一个域名或多个域名。# 指定Nginx要代理的域名,表示Nginx将代理example.com域名的请求。server_name example.com; # ssl_certificate:指定SSL证书的路径。# 这里表示Nginx将使用位于/etc/nginx/ssl/nginx.crt的SSL证书。ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; # ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location 用于匹配特定URL,并定义相应的代理规则或静态文件路径。location / { # proxy_pass:定义反向代理规则。proxy_pass http://192.168.1.100:8080; } } # #server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index:指定默认页面,可以是index.html、index.htm或index.nginx-debian.html。# index index.html index.htm;# }#}}
4、反向代理
4.1、简单示例
在下面示例中,Nginx作为反向代理服务器,将所有以example.com为域名的HTTP请求转发到192.168.1.100:8080的目标服务器。同时,通过proxy_set_header指令设置了一些必要的请求头信息,以便目标服务器正确地处理请求。该示例仅适用于HTTP协议的代理配置。
server { listen 80; server_name example.com; # location /:匹配所有以该主机名开头的URL路径。location / { proxy_pass http://192.168.1.100:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
}
注意:目标服务器,需要对外开放访问的端口
# 以下是基于 CentOS7 版本的防火墙相关命令。# 查看防火墙状态
firewall-cmd --state# 如果防火墙处于关闭状态,先启动它
systemctl start firewalld.service# 防火墙开放8080 端口号
firewall-cmd --add-port=8080/tcp --permanent# 重启防火墙以使更改生效
systemctl restart firewalld.service# 重新加载防火墙配置
firewall-cmd –reload# 查看已经开放的端口号
firewall-cmd --list-all
4.2、location 语法
在NGINX中,location指令用于定义请求匹配的URL路径和相应的配置。它是在NGINX配置文件中的server块内使用的。下面是location指令的基本语法:
location [=|~|~*|^~] /path { # 配置指令
}# 说明:
= :表示完全匹配指定的路径。
~ :表示使用正则表达式匹配路径。
~* :表示不区分大小写的正则表达式匹配路径。
^~ :表示前缀匹配路径,但不使用正则表达式。
location 匹配优先级:
= 大于 ^~ 大于 ~ | ~* 大于 最长前缀匹配 大于 /
4.2.1、精准匹配(=)
精准匹配的符号标记为“=”,示例:
# 如果请求URI和精准匹配的模式字符串/api完全相同,那么精准匹配通过.
# 在所有的匹配类型中,精准匹配的优先级最高.
location = /api {proxy_pass http://192.168.1.100:8080;
}# 假设 server_name example.com;
# 只匹配http://example.com/abc
# http://example.com/api [匹配成功]
# http://example.com/api/index [匹配失败]
4.2.2、普通匹配(^~)
普通匹配的符号标记为“~”,普通匹配是前缀匹配,也是Nginx默认的匹配类型。类型符号“~”可以省略,如果location没有任何匹配类型,就为普通的前缀匹配。示例:
# 普通匹配:如果请求路径URI头部,匹配到location的模式字符串,那么匹配成功。
# 如果匹配到多个前缀,那么最长模式匹配优先
# 匹配以"/api/"开头的所有请求
location ^~ /api/ {proxy_pass http://192.168.1.100:8080;
}location ^~ /api/demo {proxy_pass http://192.168.1.101:8081;
}# 假设 server_name example.com;
#以 /api/ 开头的请求,都会匹配上
#http://example.com/api/index.page [匹配成功]
#http://example.com/error/error.page [匹配失败]# 以上 http://example.com/api/demo/index.page 请求 [匹配成功]
# 且 http://example.com/api/demo/index.page 请求,优先匹配目标:http://192.168.1.101:8081location ^~ /api/ {proxy_pass http://192.168.1.100:8080;
}
# 等同于
location /api/ {proxy_pass http://192.168.1.100:8080;
}
4.2.3、正则匹配(~)
正则匹配的类型,根据类型符号的不同,可以细分为以下4种 :
-
~:标准正则匹配,区分字母大小写,进行正则表达式测试,若测试成功,则匹配成功。
-
~*:标准正则匹配,不区分字母大小写,进行正则表达式测试,若测试成功,则匹配成功。
-
!~:反向正则匹配,区分字母大小写,进行正则表达式测试,若测试不成功,则匹配成功。
-
!~*:反向正则匹配,不区分字母大小写,进行正则表达式测试,若测试不成功,则匹配成功。
# ~ :区分字母大小写
location ~ /Api/ {proxy_pass http://192.168.1.100:8080;
}
# 假设 server_name example.com;
#http://example.com/Api/ [匹配成功]
#http://example.com/api/ [匹配失败]# ~* :不区分字母大小写
location ~* /Api/ {proxy_pass http://192.168.1.100:8080;
}
# 假设 server_name example.com;
# 则会忽略 uri 部分的大小写
#http://example.com/Api/ [匹配成功]
#http://example.com/api/ [匹配成功]
4.2.4、默认根路径匹配(/)
根路径的路径规则就是使用单个“/”符号,示例:
# 匹配所有以该主机名开头的URL路径。
location / {proxy_pass http://192.168.1.100:8080;
}
4.2.5、nginx内部跳转(@)
location /index/ {error_page 404 @index_error;
}
location @index_error {.....
}
#以 /index/ 开头的请求,如果链接的状态为 404。则会匹配到 @index_error 这条规则上。
4.2.6、location URI结尾带不带 /
在 Nginx 中,location指令用于匹配请求的 URL,并根据匹配的结果来配置相应的代理、重定向、静态文件服务等操作。在 location指令中,URL最后是否带有斜杠(/)会对匹配的结果产生一些区别。浏览器在发起请求的时候,默认加上了 / 。虽然很多浏览器在地址栏里也不会显示 / 。
- URL最后带有斜杠(
/):- 当 URL 以斜杠结尾时,
location指令会精确匹配该 URL。例如,如果配置了location /foo/,则只有请求的 URL 为/foo/时才会匹配,但不匹配/foo或/foo123等。 - 如果请求的 URL 是
/foo/bar,则不会匹配location /foo/,因为最后有一个额外的路径片段(bar)。 - 如果需要匹配以
foo结尾的所有 URL,包括/foo/和/foo/bar等,可以使用正则表达式,例如location ~ ^/foo/$。
- 当 URL 以斜杠结尾时,
- URL最后没有斜杠(
/):- 当 URL 不以斜杠结尾时,
location指令会匹配以该 URL 为前缀的所有 URL。例如,如果配置了location /foo,则请求的 URL 为/foo、/foobar、/foo/bar等以/foo为前缀的 URL 都会匹配。 - 如果请求的 URL 是
/foo/bar,则会匹配location /foo,因为/foo是该 URL 的前缀。
- 当 URL 不以斜杠结尾时,
总结起来,是否在 location指令的 URL 最后加上斜杠,决定了是精确匹配还是前缀匹配。具体使用哪种方式取决于你的需求,如果需要精确匹配某个 URL,可以使用斜杠结尾;如果需要匹配某个前缀的所有 URL,则可以去掉斜杠。
5、负载均衡
5.1、简单示例
# 使用 upstream 块定义了一个名为 backend 的后端服务器组。
# 在该后端服务器组中,列出了三个后端服务器
# 192.168.1.100:8080、192.168.1.101:8081 和 192.168.1.102:8082
upstream backend { server 192.168.1.100:8080; server 192.168.1.101:8081; server 192.168.1.102:8082;
} server { listen 80; server_name example.com; location / { proxy_pass http://backend; # 在这里配置其他相关的反向代理设置 }
}
5.2、常用负载均衡策略
以下是几种常见的策略:轮询、权重、IP哈希、最少连接。
5.2.1、轮询
轮询(Round Robin):每个请求按时间顺序逐一分配到不同的后端服务器。如果后端服务器down掉,Nginx会自动剔除该服务器。
# 默认采用轮询策略,示例:
upstream backserver { server 192.168.0.14; server 192.168.0.15;
}
5.2.2、权重轮询
权重轮询(Weighted Round Robin):在轮询策略的基础上,指定每个后端服务器的轮询几率,权重值越高的服务器被选择的可能性就越大。
# 使用示例:
upstream backserver { server 192.168.0.14 weight=2; server 192.168.0.15 weight=1;
}
5.2.3、IP哈希
IP哈希(IP Hash):指定负载均衡器按照基于客户端IP的分配方式。这个方法确保了相同的客户端的请求一直发送到相同的后端服务器,以保持会话一致性。
# 使用示例:
upstream backserver { ip_hash; server 192.168.0.14; server 192.168.0.15;
}
5.2.4、最少连接
最少连接(Least Connections):把请求转发给连接数最少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。使用最少连接策略可以更好地平衡负载。
# 使用示例:
upstream backserver { least_conn; server 192.168.0.14; server 192.168.0.15;
}
6、动静分离
Nginx 的动静分离,是指将动态请求和静态请求,分发到不同的后端处理。
动态请求通常需要与数据库等进行交互,处理逻辑较为复杂。而静态请求,则是指只需要直接返回静态文件或资源的请求,处理速度较快。
通过动静分离,可以将动态请求交给专门的动态服务器处理,而静态请求则可以由更高效的静态服务器处理,从而提高整体的处理性能和响应速度。
server { listen 80; server_name example.com; # 动态请求location /dynamic { proxy_pass http://dynamic_server;}location /css { # root指令用于指定静态文件的根目录root /path/to/css; } location /js { # root指令用于指定静态文件的根目录root /path/to/js; } # 页面访问方式一:location /front {root /data;index index.html;}# 页面访问方式二:location /web {alias /data/front;index index.html;}# 图片访问方式一:location /static {root /data/front; }# 图片访问方式二:location /photo {alias /data/front/static;}
}
注意:alias和root指令都是用于指定文件路径的,但它们的使用方式和效果有所不同。
alias指令用于指定匹配的URL段对应的文件或目录的路径。当请求的URL匹配location块中配置的URL段时,NGINX会将其重定向到alias指令指定的路径下对应的文件或目录。这意味着请求的URL将会发生变化,从原来的URL变为新的URL。
例如,下面的配置将请求的URL为/images/example.jpg重定向到/var/www/html/images/example.jpg
location /images { alias /var/www/html/images;
}
root指令则是指定最上层目录的定义,它不会改变请求的URL。当请求的URL匹配location块中配置的URL段时,NGINX会在指定的目录下查找对应的文件。
例如,下面的配置将请求的URL为/images/example.jpg映射到/var/www/html/images/example.jpg
location /images { root /var/www/html;
}
7、Nginx 限流
nginx可以通过以下方式实现限流:基于IP限流、基于URL限流、基于时间限流。
7.1、基于IP限流
基于IP的限流,可以有效地控制每个IP地址的请求频率和请求数,有助于防止恶意攻击和保护服务器的性能。
需要注意的是,限流区域的配置和限流指令的应用,需要根据实际需求进行调整和优化。
示例配置:
# 创建限流区域one,限制每个IP的请求频率为1次/秒
# $binary_remote_addr 是用于存储限流信息的共享内存名称,使用了10MB的共享内存
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
# 创建限流区域two,限制每个IP的请求频率为2次/秒
limit_req_zone $binary_remote_addr zone=two:10m rate=2r/s; server { location / { # 使用limit_req指令,指定使用one限流区域# 设置burst参数为1,表示允许每个IP在突发情况下最多多发送一个请求。limit_req zone=one burst=1; ... }
}
-
限流算法:
-
nginx的限流算法使用了漏桶算法。
-
当请求到达时,会先检查对应的限流桶中的请求数量是否已经达到限制速率。
-
如果未达到限制速率,则允许请求通过,并在限流桶中增加一个请求。
-
如果达到限制速率,则需要检查是否允许突发请求。
-
如果允许突发请求,则允许请求通过,并在限流桶中增加一个请求,同时记录突发请求数;
-
如果不允许突发请求,则直接拒绝请求。
-
-
7.2、基于URL限流
基于URL的限流,可以有效地控制每个URL的请求频率和请求数,有助于保护服务器的性能和防止滥用。
基于URL的限流方式,适用于限制某些频繁访问的URL,或者限制对某些重要接口的请求频率,以保护服务器资源或者控制某些URL的使用。
需要注意的是,限流区域的配置和限流指令的应用,需要根据实际需求进行调整和优化。
示例配置:
# 实现基于URL的限流,要先配置限流区域 limit_req_zone,限流区域是一个存储URL和相关统计信息的缓存区。
# $uri 用于存储限流信息的共享内存名称,这里创建了一个名为one的限流区域,使用了10MB的共享内存。
# rate 是每个URL的请求限制速率,这里限制了每个URL的请求频率为1次/秒。
limit_req_zone $uri zone=one:10m rate=1r/s;location /api/ { # 针对/api/路径进行限流,limit_req指令来指定使用限流区域为one# burst参数为10,表示允许每个URL在突发情况下最多多发送10个请求。limit_req zone=one burst=10; ...
}
- 限流算法:
- nginx的限流算法使用了漏桶算法。
- 当请求到达时,会先检查对应的限流桶中的请求数量,是否已经达到限制速率。
- 如果未达到限制速率,则允许请求通过,并在限流桶中增加一个请求。
- 如果达到限制速率,则需要检查是否允许突发请求。
- 如果允许突发请求,则允许请求通过,并在限流桶中增加一个请求,同时记录突发请求数;
- 如果不允许突发请求,则直接拒绝请求。
.
相关文章:
关于 Nginx 的哪些事
关于 Nginx 的哪些事 1、Nginx 主要功能2、Nginx 的常用命令2.1、启动Nginx2.2、停止 Nginx2.3、重新加载Nginx 配置2.4、检查Nginx配置文件2.5、指定配置文件2.6、检查Nginx版本2.7、显示Nginx帮助信息 3、Nginx 配置文件 nginx.conf3.1、Nginx 配置文件(nginx.con…...
插入排序——希尔排序
1、简述: 希尔排序(Shells Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 D.L.Shell 于 1959 年提出而得名。 希尔排…...
C语言之初阶总结篇
目录 NO.1 NO.2 NO.3 NO.4 NO.5 NO.6 NO.7 NO.8 NO.9 NO.10 NO.11 NO.12.概念tips NO.13.求最小公倍数 NO.14.最大公因数 NO.15.输入读取字符串 NO.16.倒置字符串 今天是一些C语言题目,最近天气炎热,多喝水。 NO.1 下面程序执行后&am…...
Android签名查看
查看签名文件信息 第一种方法: 1.打开cmd,执行keytool -list -v -keystore xxx.keystore,效果如下图: 第二种方法: 1.打开cmd,执行 keytool -list -v -keystore xxxx.keystore -storepass 签名文件密码࿰…...
Educational Codeforces Round 3
目录 A. USB Flash Drives B. The Best Gift C. Load Balancing D. Gadgets for dollars and pounds A. USB Flash Drives #include<bits/stdc.h>using namespace std; const int N1e65; typedef long long ll; typedef pair<ll,ll> pll; typedef array<int…...
Docker Compose常用命令
常用命令 1.1 restart, start, stop-- 启动和停止服务 命令必须在 docker-compose.yml文件所在的目录下执行。 # 前台启动, 启动项目中的所有服务。 $. docker-compose up# 后台启动, 启动所有服务并在后台运行。 $. docker-compose up -d# 停止所有服务。 $. docker-compose …...
C++——智能指针
智能指针 文章目录 智能指针内存泄漏智能指针解决内存泄漏问题智能指针的使用及原理RAII智能指针对象的拷贝问题 C中的智能指针auto_ptrunique_ptrshared_ptrweak_ptr定制包装器C11和boost中智能指针的关系 内存泄漏 什么是内存泄漏:内存泄漏指因为疏忽或错误造成程…...
CVE-2023-3836:大华智慧园区综合管理平台任意文件上传漏洞复现
文章目录 CVE-2023-3836:大华智慧园区综合管理平台任意文件上传漏洞复现0x01 前言0x02 漏洞描述0x03 影响范围0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 CVE-2023-3836:大华智慧园区综合管理平台任意文件上传漏洞复现 0x01 前言 免责声…...
LAMP搭建WordPress
L linux A apache hhtpd M mysql/maridb P PHP1、 安装php yum -y install php php-fpm php-server php-mysql1.1、 启动php-fpm并自启 systemctl enable php-fpm --now[rootecs-1cee ~]# systemctl status php-fpm ● php-fpm.service - The PHP FastCGI Process ManagerLoa…...
【数学建模竞赛】预测类赛题常用算法解析
解析常见的预测类算法 灰色预测模型 灰色预测模型是一种利用少量的、不完全的信息,建立数学模型并进行预测的方法。该方法通过对系统行为特征的发展变化规律进行估计预测,同时也可以对行为特征的异常情况发生的时刻进行估计计算,并研究特定…...
OFDM 系统在 AWGN 信道下对不同载波频率偏移 (CFO) 的 BER 灵敏度研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
go基础07-了解map实现原理并高效使用
对于C程序员出身的Gopher来说,map类型是和切片、interface一样能让他们感受到Go语言先进性的重要语法元素。map类型也是Go语言中最常用的数据类型之一。 go 中 map 怎么表现? 一些有关Go语言的中文教程或译本将map称为字典或哈希表,但在这里…...
SpringMVC进阶:常用注解、参数传递和请求响应以及页面跳转
目录 一、常用注解 1.1.RequestMapping 1.2.RequestParam 1.3.ModelAttribute 1.4.SessionAttributes 1.5.RequestBody 1.6.RequestHeader 1.7.PathVariable 1.8.CookieValue 二、参数传递 2.1.基础类型String 2.2.复杂类型 2.3.RequestParam 2.4.PathVariable 2…...
nacos - centos7.x环境单机与集群快速部署
参考官网:https://nacos.io/zh-cn/docs/what-is-nacos.html 官方集群部署手册:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html 【单机部署】 1.下载 & 解压到安装目录 下载:wget -c https://github.com/alibaba/nacos/releases/download/2.1.2/nacos-ser…...
文心一言初体验,和ChatGPT语言理解能力比较
文章目录 第一个考验,语义理解第二个考验,历史问题的回答推荐阅读 百度旗下AI大模型文心一言宣布向全社会全面开放,所有用户都可以体验这款AI大模型了。要比较这两个语言模型,我们先设计好题目。 第一个考验,语义理解 题目1&…...
浏览器进程,性能指标,性能优化
目录 浏览器进程:多进程 主进程:显示、交互,增删进程 UI进程:控制地址栏、书签、前进后退 存储进程:cookie,webstorage,indexDB 渲染进程:每个标签页或窗口都有一个独立的渲染进…...
Python基础set集合定义与函数
set集合 集合的特点: 1.集合是无序 2.集合是去重 定义一个空集合 name_set set() 定义一个非空集合 name_set {a, b, c} 关系测试: 交集,并集,差集,对称差集 1.交集:intersection() 或者 & …...
【大数据之Kafka】九、Kafka Broker之文件存储及高效读写数据
1 文件存储 1.1 文件存储机制 Topic是逻辑上的概念,而partition是物理上的概念,每个partition对应于一个log文件,该log文件中存储的是Producer生产的数据。 Producer生产的数据会被不断追加到该log文件末端,为防止log文件过大导致…...
Android 使用Camera2 API 和 GLSurfaceView实现相机预览
GLSurfaceView 和 SurfaceView 是 Android 中用于显示图像的两个视图类,它们在实现方式和使用场景上有一些区别。 实现方式:GLSurfaceView 基于 OpenGL ES 技术实现,可以通过 OpenGL ES 渲染图像。而 SurfaceView 则是通过基于线程的绘制方式…...
说说IO多路复用
分析&回答 IO多路复用 I/O multiplexing 这里面的 multiplexing 指的其实是在单个线程通过记录跟踪每一个Sock(I/O流)的状态(对应空管塔里面的Fight progress strip槽)来同时管理多个I/O流。直白点说:多路指的是多个socket连接,复用指的是复用一个…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
