nginx之重写功能 模块指令 防盗链

一 重写功能    rewrite

Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求,

此功能依靠 PCRE(perl compatible regular expression),因此编译之前要安装PCRE库,rewrite是

nginx服务器的重要功能之一,重写功能(rewrite)用于实现URL的重写,URL的重写是非常有用的功

能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我

们的链接,就可以设置为访问,另外还可以在一定程度上提高网站的安全性。更换域名后需要保持

旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。

rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用

一 ngx_http_rewrite_module模块指令

官方文档: Module ngx_http_rewrite_module

①if指令

官方文档: Module ngx_http_rewrite_module

用于条件匹配判断,并根据条件判断结果选择不同的Nginx配置,可以配置在server或location块中进行配置,Nginx的if语法仅能使用if做单次判断,不支持使用if else或者if elif这样的多重判断,用法如下:

if (条件匹配) {   
 action
}

使用正则表达式对变量进行匹配,匹配成功时if指令认为条件为true,否则认为false,变量与表达式之间使用以下符号链接:

​
=  #比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false
!=  #比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false
~  #区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~ #区分大小写字符,判断是否匹配,不满足匹配条件为真,满足匹配条件为假
 
~* #不区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~* #不区分大小字符,判断是否匹配,满足匹配条件为假,不满足匹配条件为真
 
 
-f 和 !-f #判断请求的文件是否存在和是否不存在
-d 和 !-d #判断请求的目录是否存在和是否不存在
-x 和 !-x #判断文件是否可执行和是否不可执行
-e 和 !-e #判断请求的文件或目录是否存在和是否不存在(包括文件,目录,软链接)
​
举例:
location /main {
     index index.html;
     default_type text/html;
#定义文件类型
     if ( $scheme = http ){
#如果用户访问的协议是http,$scheme变量表示用户来访问使用的协议。       
    echo "if-----> $scheme";
#则输出if --->协议 
    }
     if ( $scheme = https ){
#如果用户访问的协议是https,$scheme变量表示用户来访问使用的协议。 
      echo "if ----> $scheme";
#则输出if --->协议 
   }
实验:

检测 

②return

return用于完成对请求的处理,并直接向客户端返回响应状态码,比如:可以指定重定向URL(对于特殊重定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后的所有配置都将不被执行,return可以在server、if 和 location块进行配置

语法格式:

www.kgc.com/test/
404
return code; #返回给客户端指定的HTTP状态码

return code [text]; #返回给客户端的状态码及响应报文的实体内容,可以调用变量,其中text如果有空格,需要用单或双引号

return code url; #返回给客户端的URL地址 

3字打头重定向
301  永久重定向  将缓存记录在浏览器中
302  临时重定向  没有缓存  每次都要重定向 

301:永久重定向 (读取过一次,会将配置缓存在客户端;即使Nginx服务器宕机,在缓存时间内也可以跳转)

302:临时重定向 (不会存在客户端;每次跳转页面,都要问一遍服务器,然后解析;一旦服务器宕机,就无法跳转)

实验1:当用户不存在时跳转     302 
[root@mcb-11-9 ssl]#nginx -s reload
[root@mcb-11-9 ssl]#vim /apps/nginx/conf.d/pc.conf 
[root@mcb-11-9 ssl]#nginx -s reload
[root@mcb-11-9 ssl]#systemctl  restart nginx
[root@mcb-11-9 ssl]#cat /apps/nginx/conf.d/pc.conf 
server{
        listen 80;
        listen 443 ssl;
        root /data/;
        server_name www.kgc.com;
        ssl_certificate /data/ssl/www.kgc.com.crt;
        ssl_certificate_key /data/ssl/www.kgc.com.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m;
        location / {
        root /data;
        if (!-e $request_filename){
        return 302 http://www.baidu.com;
        }
    }
}

实验2:当用户不存在时跳转     301

实验3:当我们访问页面存在时,状态码为301 

③set 指令

指定key并给其定义一个变量,变量可以调用Nginx内置变量赋值给key,另外set定义格式为set $key value,value可以是text, variables和两者的组合。

server{
        listen 80;
        root /data/;
       server_name www.kgc.com;
       location /test {
       set $name kgc;
       echo $name;
       set $my_port $server_port;
       echo $my_port;
       }
}

修改配置文件

②Google浏览器访问 

④break 指令

用于中断当前相同作用域(location)中的其他Nginx配置,与该指令处于同一作用域的Nginx配置中,位于它前面的配置生效,位于后面的 ngx_http_rewrite_module 模块中指令就不再执行,Nginx服务器在根据配置处理请求的过程中遇到该指令的时候,回到上一层作用域继续向下读取配置,该指令可以在server块和location if块中使用

注意: 如果break指令在location块中后续指令还会继续执行,只是不执行 ngx_http_rewrite_module 模块的指令,其它指令还会执行

二 rewrite 指令

实验1:访问bj就跳转到beijing 

[root@mcb-11-9 ssl]#cd /data
[root@mcb-11-9 data]#vim /apps/nginx/conf.d/pc.conf 
[root@mcb-11-9 data]#nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
[root@mcb-11-9 data]#nginx -s reload
[root@mcb-11-9 data]#mkdir /data/beijing
[root@mcb-11-9 data]#ls
beijing  index.html  ip  ssl
[root@mcb-11-9 data]#echo beijing > beijing/index.html 
[root@mcb-11-9 data]#cat beijing/index.html 
beijing
[root@mcb-11-9 data]#cat /apps/nginx/conf.d/pc.conf 
server{
        listen 80;
        listen 443 ssl;
        root /data/;
        server_name www.kgc.com;
        ssl_certificate /data/ssl/www.kgc.com.crt;
        ssl_certificate_key /data/ssl/www.kgc.com.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m; 
       location /bj {
       rewrite ^/bj/(.*) /beijing/$1 break;
       }
        location / {
        root /data;
        if (!-e $request_filename){
        return 302 http://www.baidu.com;
        }
    }
}

另一台虚拟机验证

去浏览器验证

实验2:访问http等于访问https
location / {
      if ( $scheme = http ) {
      rewrite /(.*) https://$host/$1 permanent;
     }
}

谷歌浏览器访问

2 实验 last 和 break区别 
location /break {
    rewrite .*  /test break;
}
    location /last {
    rewrite .*  /test last;
}
    location /test {
    return 403;
}

检测

说明: 

redirect;302:临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求;使用相对路径,或者http://或https://开头,状态码:302

permanent;301:重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求,状态码:301

break:重写完成后,停止对当前URL在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location中使用,适用于一个URL一次重写 

last:重写完成后,停止对当前URI在当前location中后续的其它重写操作,而后对新的URL启动新一轮重写检查,不建议在location中使用。适用于一个URL多次重写,要注意避免出现超过十次以及URL重写后返回错误的给用户301

3  跳转的场景

①可以调整用户浏览的url,看起来更规范,合乎开发及产品人员的需求。

②为了让搜索引擎网站内容及用户体验更好,企业会将动态url地址伪装成静态地址提供服务。

③网址换新域名后,让旧的访问跳转到新的域名上。

④根据特殊变量,目录,客户端的信息进行url调整等。

4 跳转实现

Nginx:通过ngx_http_rewrite_module 模块支持URL重写、支持if条件判断,但不支持else。
跳转:从一个 location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误。
PCRE支持:perl兼容正则表达式的语法规则匹配。
重写模块 set 指令:创建新的变量并设其值。。

5 执行顺序

首先执行server块里面的rewrite指令

其次执行location匹配

最后执行选定的location中的rewritre指令

6 语法格式
rewrite <regex> <replacement> [flag];

regex :表示正则匹配规则。

replacement :表示跳转后的内容。

flag :表示 rewrite 支持的 flag 标记。
flag标记说明

rewrite flag 使用介绍
利用nginx的rewrite的指令,可以实现url的重新跳转,rewrtie有四种不同的flag,分别是redirect(临时重定向302)、permanent(永久重定向301)、break和last。其中前两种是跳转型的flag,后两种是代理型

跳转型指由客户端浏览器重新对新地址进行请求

代理型是在WEB服务器内部实现跳转

①last:本条规则匹配完成后,不中止重写后的url匹配,一般用在server和if中。

 www.bj.com
#重写完成后,停止对当前URL在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location中使用 ,适用于一个URL一次重写

②break:本条规则匹配完成即终止,终止重写后的url匹配,一般使用在location中。

#重写完成后,停止对当前URI在当前location中后续的其它重写操作,而后对新的URL启动新一轮重写检查,不建议在location中使用,会造成死循环,少用
适用于一个URL多次重写,要注意避免出现超过十次以及URL重写后返回错误的给用户301 

③redirect:返回302临时重定向,浏览器地址会显示跳转后的url地址。

#临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求;使用相对路径,或者http://或https://开头,状态码:302

④permanent:返回301永久重定向,浏览器地址栏会显示跳转后的url地址。

     www.bj.com     www.beijing.com
#重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求,状态码:301

正则表达式格式

. #匹配除换行符以外的任意字符
\w #匹配字母或数字或下划线或汉字
\s #匹配任意的空白符
\d #匹配数字    [0-9]   
\b #匹配单词的开始或结束
^ #匹配字符串的开始
$ #匹配字符串的结束
* #匹配重复零次或更多次
+ #匹配重复一次或更多次
? #匹配重复零次或一次
{n} #匹配重复n次
{n,} #匹配重复n次或更多次
{n,m} #匹配重复n到m次
*? #匹配重复任意次,但尽可能少重复
+? #匹配重复1次或更多次,但尽可能少重复
?? #匹配重复0次或1次,但尽可能少重复
{n,m}? #匹配重复n到m次,但尽可能少重复
{n,}? #匹配重复n次以上,但尽可能少重复
\W  #匹配任意不是字母,数字,下划线,汉字的字符
\S #匹配任意不是空白符的字符
\D #匹配任意非数字的字符
\B #匹配不是单词开头或结束的位置
[^x] #匹配除了x以外的任意字符
[^kgc] #匹配除了kgc 这几个字母以外的任意字符
三 防盗链

防盗链基于客户端携带的referer实现,referer是记录打开一个页面之前记录是从哪个页面跳转过来的标记信息,如果别人只链接了自己网站图片或某个单独的资源,而不是打开了网站的整个页面,这就是盗链,referer就是之前的那个网站域名,正常的referer信息有以下几种:

none:#请求报文首部没有referer首部,比如用户直接在浏览器输入域名访问web网站,就没有referer信息。

blocked:#请求报文有referer首部,但无有效值,比如为空。

server_names:#referer首部中包含本主机名及即nginx 监听的server_name。

arbitrary_string:#自定义指定字符串,但可使用*作通配符。示例: *.kgc.org www.kgc.*

regular expression:#被指定的正则表达式模式匹配到的字符串,要使用~开头,例如:~.*\.kgc\.com

盗链

server{
        listen 80;
        server_name www.mcb.com;
        root /data;
        location ~* \.(jpg|gif|swf)$ {
        root  /data/nginx/pc;
        valid_referers none blocked *.mcb.com mcb.com;
        if ( $invalid_referer ) {
        rewrite ^/ http://www.mcb.com/error.png;
        return 403;
        }
}
}

另一台虚拟机

[root@mcb-11-8 ~]#cd /var/www/html
[root@mcb-11-8 html]#ls
[root@mcb-11-8 html]#systemctl restart httpd
[root@mcb-11-8 html]#vim idex.html
[root@mcb-11-8 html]#cat idex.html
dy>
<h1>this is yun   </h1>
<img src="http://www.mcb.com/a.jpg"/>
</body>
</html>

注意:改完真机做完实验,将原配置改回去,防止原配置乱码

既然存在盗图,就配置防盗链

server{
        listen 80;
        root /data/;
        server_name www.lucky.com;
        listen 443 ssl;
        ssl_certificate /data/ssl/www.kgc.com.crt;
        ssl_certificate_key /data/ssl/www.kgc.com.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m;
     location ~* \.(jpg|gif|swf|jpeg|bmp)$ {
         valid_referers none blocked *.lucky.com lucky.com;
         if ( $invalid_referer ) {
          #rewrite ^/ http://www.lucky.com/error.png;
          return   403;
        }
}
}

 去浏览器反复问192.168.11.9/error.png

(四 )其它相关高级功能
https://www.digitalocean.com/community/tools/nginx
#自动生成nginx配置文件
https://github.com/agile6v/awesome-nginx/
#第三方模块
https://www.runoob.com/lua/lua-tutorial.html
#lua帮助
https://666666.dev/#/
#it人工具箱

二 反向代理

反向代理:reverse proxy,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。

Nginx 除了可以在企业提供高性能的web服务之外,另外还可以将 nginx 本身不具备的请求通过某种预定义的协议转发至其它服务器处理,不同的协议就是Nginx服务器与其他服务器进行通信的一种规范,主要在不同的场景使用以下模块实现不同的功能:

ngx_http_proxy_module: #将客户端的请求以http协议转发至指定服务器进行处理
ngx_http_upstream_module #用于定义为proxy_pass,fastcgi_pass,uwsgi_pass等指令引用的后端服务器分组
ngx_stream_proxy_module:#将客户端的请求以tcp协议转发至指定服务器处理
ngx_http_fastcgi_module:#将客户端对php的请求以fastcgi协议转发至指定服务器助理
ngx_http_uwsgi_module: #将客户端对Python的请求以uwsgi协议转发至指定服务器处理
  • 正向代理:代理客户端去访问服务器
  • 反向代理:代理的是服务器

 实现 http 反向代理

 官方文档: https://nginx.org/en/docs/http/ngx_http_proxy_module.html,

同构代理 、异构代理

①http 协议反向代理     
②反向代理配置参数  
#官方文档:https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 
proxy_pass; 
#用来设置将客户端请求转发给的后端服务器的主机,可以是主机名(将转发至后端服务做为主机头首部)、IP
地址:端口的方式
#也可以代理到预先设置的主机群组,需要模块ngx_http_upstream_module支持
 
#示例:
10.0.0.8/web
 location /web {
   index index.html;
   proxy_pass http://10.0.0.18:8080; #8080后面无uri,即无 / 符号,需要将location后面url 附加到proxy_pass指定的url后面,此行为类似于root
#proxy_pass指定的uri不带斜线将访问的/web,等于访问后端服务器
http://10.0.0.18:8080/web/index.html,即后端服务器配置的站点根目录要有web目录才可以被访问
    # http://nginx/web/index.html ==> http://10.0.0.18:8080/web/index.html
    
proxy_pass http://10.0.0.18:8080/;   #8080后面有uri,即有 / 符号,相当于置换,即访问/web时实际返回proxy_pass后面uri内容.此行为类似于alias 
    #proxy_pass指定的uri带斜线,等于访问后端服务器的http://10.0.0.18:8080/index.html 内容返回给客户端
 }  # http://nginx/web/index.html ==> http://10.0.0.18:8080
 
#重启Nginx测试访问效果:
#curl -L http://www.kgc.org/web
 
#如果location定义其uri时使用了正则表达式模式(包括~,~*,但不包括^~),则proxy_pass之后必须不能使用uri; 即不能有/ ,用户请求时传递的uri将直接附加至后端服务器之后
server {
 ...
 server_name HOSTNAME;
 location ~|~* /uri/ {
 proxy_pass http://host:port; #proxy_pass后面的url 不能加/
 }
 ...
 }
 http://HOSTNAME/uri/ --> http://host/uri/
 
proxy_hide_header field;
#用于nginx作为反向代理的时候,在返回给客户端http响应时,隐藏后端服务器相应头部的信息,可以设置
在http,server或location块
#示例: 隐藏后端服务器ETag首部字段
 location /web {
   index index.html;
   proxy_pass http://10.0.0.18:8080/; 
   proxy_hide_header ETag;
 }
 
proxy_pass_header field;
#默认nginx在响应报文中不传递后端服务器的首部字段Date, Server, X-Pad, X-Accel等参数,如果
要传递的话则要使用 proxy_pass_header field声明将后端服务器返回的值传递给客户端
#field 首部字段大小不敏感
#示例:透传后端服务器的Server和Date首部给客户端,同时不再响应报中显示前端服务器的Server字段
proxy_pass_header Server;
proxy_pass_header Date;
 
 
proxy_pass_request_body on | off; 
#是否向后端服务器发送HTTP实体部分,可以设置在http,server或location块,默认即为开启
 
 
proxy_pass_request_headers on | off; 
#是否将客户端的请求头部转发给后端服务器,可以设置在http,server或location块,默认即为开启
③反向代理单台web 服务器

拓扑图

实验1:访问代理本机(192.168.11.9)等于去访问192.168.11.   

① 配置代理服务器

[root@mcb-11-9 conf.d]#nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
[root@mcb-11-9 conf.d]#nginx -s reload
[root@mcb-11-9 conf.d]#cat pc.conf
server{
        listen 80;
        server_name www.mcb.com;
        root /data/;
        listen 443 ssl;
        ssl_certificate /data/ssl/www.kgc.com.crt;
        ssl_certificate_key /data/ssl/www.kgc.com.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m;
        location / {
        proxy_pass http://192.168.11.;  #访问本机的根等于访问指定地址
       }
}

② 客户端开启httpd服务

[root@mcb-11-12 html]# cat index.html 
<html>
<body>
<h1>iPhone Coco  </h1>
</body>
</html>

③ 客户端访问代理服务

实验2 修改端口
[root@mcb11-12 html]# vim /etc/httpd/conf/httpd.conf
[root@mcb11-12 html]# systemctl restart httpd

proxy_pass; 

#用来设置将客户端请求转发给的后端服务器的主机,可以是主机名(将转发至后端服务做为主机头首部)、IP
地址:端口的方式
#也可以代理到预先设置的主机群组,需要模块ngx_http_upstream_module支持

实验3:在真实服务器上 做防火墙规

iptables -A INPUT  -s 192.168.91.100 -j DROP

在真实服务器上做防火墙规则:

iptables -A INPUT  -s 192.168.190.102 -j DROP
#客户端再次访问会出现504网关超时(有可能只是处理时间久,服务器不一定挂了),时间较长1分钟,没有定义代理超时时间
在真实服务器上 做防火墙规则
iptables -A INPUT  -s 192.168.11.9 -j DROP
客户端再次访问  会出现504网关超时(有可能只是处理时间久,服务器不一定挂了),时间较长1分钟,没有定义代理超时时间
 
iptables -A INPUT  -s 192.168.11.9 -j REJECT
客户端再次访问  会出现502,一般出现502 代表后端真实服务器挂了

实验5:配置文件加 /  与不加 / 实验

既能访问自己,又能访问他人

写配置文件

另一台主机检测

总结:加/ 替换   不加/ 追加

注意:/api 匹配可能选择型太多,不允许替换,只能追加

④指定location 实现反向代理 、实现动静分离

④指定location 实现反向代理 、实现动静分离

状态码:502真实服务器坏了

             504网关超时,代理服务器与真实服务器之间有问题

补充:

 /api 匹配可能选择型太多,不允许替换,只能追加

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络:IPv6

1、由于IPv4地址资源枯竭&#xff0c;所以产生了IPV6。 版本长度地址数量IPv432 bit4 294 967 296IPv6128 bit340 282 366 920 938 463 374 607 431 768 211 456 2、IPv6的基本报头在IPv4报头基础上&#xff0c;增加了流标签域&#xff0c;去除了一些冗余字段&#xff0c;使报…

【Vue的单选按钮不选中已解决亲测】

伙计&#xff0c;你是否因为后台给vue前端已经传入了对应的单选按钮的数据&#xff0c;为啥还是不选中呢&#xff01;&#xff1f; 这个问题实话我百度乐很多都不能解决我的问题&#xff0c;最后机智如我的发现乐vue的自身的问题&#xff0c;后端返回的数据类型如果是数字int类…

算法day02_209.长度最小的子数组

推荐阅读 从零开始学数组&#xff1a;深入浅出&#xff0c;带你掌握核心要点 初探二分法 再探二分法 目录 推荐阅读209.长度最小的子数组题目思路解法暴力解法队列相加法&#xff08;滑动窗口&#xff09;对列相减法&#xff08;滑动窗口&#xff09; 系统的纪录一下刷算法的过…

[vscode] 1. 在编辑器的标签页下显示文件目录(标签页显示面包屑) 2. 在标题栏上显示当前文件的完整路径

1. 标签页显示面包屑 view->Appearance->Breadcrumbs 2. 在标题栏上显示当前文件的完整路径 搜索 window.title将原来的值activeEditorShort 修改为 activeEditorMedium 参考&#xff1a; vscode在编辑器的标签页下显示文件目录&#xff08;标签页显示面包屑&#xf…

ONLYOFFICE桌面编辑器v8.0完整指南:安装、特点与新增功能

文章目录 摘要引言安装主界面可填写的 PDF 表单双向文本支持电子表格中的新增功能其他改进与Moodle集成用密码保护PDF文件从“开始”菜单快速创建文档本地界面主题安装免费的 ONLYOFFICE桌面编辑器 总结 摘要 本文介绍了ONLYOFFICE桌面编辑器v8.0的安装、主界面特点以及新增功…

Python中检查一个数字是否是科技数的完整指南

目录 前言 什么是科技数&#xff1f; 如何判断一个数字是否是科技数&#xff1f; 分割数字并计算平方 Python实现科技数检测的示例代码 科技数的应用场景 1. 数字游戏 2. 数据处理 3. 算法优化 4. 数据结构设计 总结 前言 科技数&#xff08;Tech Number&#xff09;是一…

ABAP - OOALV 单击事件

OOALV的单击事件通过cl_gui_alv_grid内置事件hotspot_click实现,效果如下图显示实现步骤&#xff1a; 在Fieldcat中设置参数HOTSPOT参数&#xff0c;将列设置成热点。单击事件要和热点组合才能触发 gs_fieldcat-hotspot X. "热点 定义一个事件处理类及其操作处理 CLAS…

高性能图表组件LightningChart .NET v11.0发布——增强DPI感知能力

LightningChart完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科学&am…

CSS3详解

1.什么是CSS css的优势 1、内容和表现分离 2、网页结构表现统一&#xff0c;可以实现复用 3、样式十分的丰富 4、建议使用独立于html的css文件 5、利用SE0,容易被搜索引擎收录&#xff01; CSS的几种导入方法 内部式 <style>h1{color: red;}</style> 外部式 嵌…

GL/gl.h: No such file or directory(CentOS8 QT5.12.12)

1.问题描述 新建的QT工程&#xff0c;出现如下问题&#xff1a; GL/gl.h: No such file or directory 2.原因分析 centos系统里面缺少opengl库 3.解决方法 运行命令&#xff1a; yum install mesa-libGL -devel -y

palworld-server-tool(0.5.7)使用指南

文章目录 说明管理工具&#xff08;docker版本&#xff09;部署教程使用指南RCON指令工具RCON使用广播内容右下角&#xff0c;有加入白明单&#xff0c;和封禁和踢出的功能 游戏中RCON命令使用 说明 本文&#xff0c;主要使简单的使用介绍&#xff08;其实也没有什么指导的&am…

代码遗产:探索祖传代码的历史、挑战与现代融合艺术

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。&#x…

【Prometheus】基于Altertmanager发送告警到多个接收方、监控各种服务、pushgateway

基于Altertmanager发送报警到多个接收方 一、配置alertmanager-发送告警到qq邮箱1.1、告警流程1.2、告警设置【1】邮箱配置【2】告警规则配置【3】 部署prometheus【4】部署service 二、配置alertmanager-发送告警到钉钉三、配置alertmanager-发送告警到企业微信3.1、注册企业微…

Vue 2 的核心模块和历史遗留问题以及vue3新特性

从下图你能看到&#xff0c;Vue 2 是一个响应式驱动的、内置虚拟 DOM、组件 化、用在浏览器开发&#xff0c;并且有一个运行时把这些模块很好地管理起来的框架。 vue 2 能把上面所说的这些模块很好地管理起来&#xff0c;看起来已经足够好了。不过事实真的如 此么&#xff1f;…

在 Ubuntu 终端输出不同颜色、粗体、下划线或其他样式的字体

嗯。调试时总发现自己打印的调试信息太过普通、单调&#xff0c;于是乎…… Notice 要在终端实现字体的特殊样式&#xff0c;通常通过使用特殊的控制字符来实现&#xff0c;而不是通过某语言本身的功能来实现。 在大多数终端中&#xff0c;可以使用 ANSI 转义序列来设置字体的…

专业知识:EDR、XDR、NDR 和 MDR

多年来&#xff0c;EDR、XDR、NDR 和 MDR 等术语一直是网络安全不可或缺的一部分。但这些术语的背后是什么&#xff1f;使用什么技术&#xff1f; 新技术的发展对于网络安全尤为重要。最终&#xff0c;保护解决方案制造商必须始终领先网络攻击者一步。近年来&#xff0c;EDR、…

攻防世界-very-easy-sql

1.打开题目尝试输入1&#xff0c;1‘进行检测&#xff0c;看看是get请求还是post请求&#xff0c;但是没有回显&#xff0c;然后查看源代码&#xff0c;源代码中有一个use.php文件&#xff0c;访问这个文件&#xff0c;发现这是一个ssrf服务请求伪造漏洞 ssrf漏洞的一些原理 1&…

蓝桥杯第十二届电子类单片机组程序设计

目录 前言 蓝桥杯大赛历届真题_蓝桥杯 - 蓝桥云课&#xff08;点击查看&#xff09; 单片机资源数据包_2023&#xff08;点击下载&#xff09; 一、第十二届比赛原题 1.比赛题目 2.题目解读 蓝桥杯第十四届电子类单片机组程序设计_蓝桥杯单片机哪一届最难-CSDN博客 二、…

[DEBUG] spring boot-如何处理链接中的空格等特殊字符

问题&#xff1a; get或者post中提交的内容可能有空格、#等特殊字符&#xff0c;不做处理的话可能解析错误。 解决&#xff1a; html中&#xff1a; <a th:href"{/listSgrna(id${item.getGeneId()},geneName${item.getGeneName()},genome${genome},sgrnaNum${sgrnaN…

【kubernetes】关于云原生之k8s集群的pod理论详解

目录 一、pod的基础概念 什么是pod&#xff1f; k8s集群中pod的两种使用方式 pod中运行容器的原则&#xff1a; 创建pod的3种方式 第一种&#xff1a;自主式Pod 第二种&#xff1a;控制器管理的Pod 第三种&#xff1a;静态Pod 二、pod中容器的基础概念 pod容器的分类 …