分布式 - 服务器Nginx:常见问题总结(二)

文章目录

      • 01. Nginx 虚拟主机怎么配置?
      • 02. Nginx location 指令的作用?
      • 03. Nginx location 指令如何与其他指令一起使用?
      • 04. Nginx root 命令的作用?
      • 05. Nginx if 模块的作用?
      • 06. Nginx include 指令的作用?
      • 07. Nginx location 指令的语法?
      • 08. Nginx 如何禁止访问某个目录?
      • 09. Nginx 如何定义错误页面?
      • 10. Nginx error_page 指令的作用?
      • 11. Nginx 中500、502、503、504 有什么区别?
      • 12. Nginx 如何精准匹配路径?
      • 13. Nginx 路径匹配优先级?
      • 14. Nginx rewrite 常用的全局变量?

01. Nginx 虚拟主机怎么配置?

① 在Nginx的配置文件中添加一个server块,用于定义虚拟主机的配置信息。例如:

server {listen 80;server_name example.com;root /var/www/example.com;index index.html;
}

其中,listen指定监听的端口号,server_name指定虚拟主机的域名,root指定虚拟主机的根目录,index指定默认的首页文件。

② 如果需要支持多个虚拟主机,则需要在Nginx的配置文件中添加多个server块,每个server块对应一个虚拟主机的配置信息。

③ 配置完成后,需要重新加载Nginx的配置文件,使其生效。可以使用以下命令:

sudo nginx -t # 检查配置文件是否正确
sudo systemctl reload nginx # 重新加载配置文件

02. Nginx location 指令的作用?

在 Nginx 中,location 指令用于匹配请求的 URL 路径,并指定相应的配置指令。它可以用来控制 Nginx 如何处理不同的请求 URL。

具体来说,location 指令可以用来:

① 指定不同的反向代理服务器或 FastCGI 服务器,以便处理不同的请求 URL。
② 指定不同的文件系统路径,以便 Nginx 可以提供静态文件服务。
③ 指定不同的缓存策略,以便 Nginx 可以缓存不同的请求 URL。
④ 指定不同的安全策略,以便 Nginx 可以对不同的请求 URL 进行访问控制。

在 Nginx 配置文件中,location 指令通常与其他指令一起使用,例如 proxy_pass、root、try_files、expires 等。通过合理使用 location 指令,可以使 Nginx 更加灵活和高效地处理不同的请求 URL。

03. Nginx location 指令如何与其他指令一起使用?

在 Nginx 中,location 指令用于匹配请求的 URI,并定义如何处理这些请求。location 指令可以与多个其他指令一起使用,包括 proxy_pass、root、try_files 和 expires 指令。

① 使用 proxy_pass 指令将请求代理到另一个服务器:

location /api {proxy_pass http://backend_server;
}

② 使用 root 指令指定文件根目录,并使用 try_files 指令查找文件:

location /static/ {root /var/www;try_files $uri $uri/ =404;
}

③ 使用 expires 指令设置缓存过期时间:

location /static/ {expires 1d;
}

需要注意的是,location 指令的匹配顺序是按照配置文件中出现的顺序进行的。因此,如果有多个 location 指令匹配同一个 URI,将使用第一个匹配的指令。如果没有匹配的指令,则使用默认的 location 指令。

04. Nginx root 命令的作用?

在 Nginx 中,root 指令用于指定服务器的根目录。具体来说,它指定了 Nginx 服务器在处理客户端请求时查找文件的根目录。当客户端请求的 URL 中包含文件路径时,Nginx 会在 root 指定的目录下查找该文件。

例如,如果 root /var/www/html,而客户端请求的 URL 是 http://example.com/index.html,那么 Nginx 会在 /var/www/html/index.html 中查找该文件。如果在 Nginx 的配置文件中没有指定 root 指令,或者指定的目录不存在或不可读,Nginx 将无法找到请求的文件,从而返回 404 错误。

需要注意的是,root 指令只能在 http、server 或 location 块中使用。在 http 块中使用 root 指令会影响所有的 server 块,而在 server 或 location 块中使用 root 指令则只会影响该块中的请求。

例如,公司的 nginx-conf 文件中配置的 root 指令,

server {listen       80 default_server;listen       [::]:80 default_server;server_name  _;root         /usr/share/nginx/html;//...
}

① listen 指令用于指定服务器监听的端口号和协议,这里监听的是 80 端口,同时支持 IPv4 和 IPv6。
② server_name 指令用于指定服务器的域名,这里使用了通配符 _,表示匹配所有域名。
③ root 指令用于指定服务器的根目录,这里设置为 /usr/share/nginx/html,表示访问服务器时默认会访问该目录下的文件。如果您的nginx服务器接收到一个请求 http://example.com/index.html,nginx将在 /usr/share/nginx/html/index.html 路径下查找该文件。

[root@master01 ~]# cd /usr/share/nginx/html
[root@master01 html]# ll
total 20
-rw-r--r--. 1 root root 3332 Jun 10  2021 404.html
-rw-r--r--. 1 root root 3404 Jun 10  2021 50x.html
-rw-r--r--. 1 root root 3429 Jun 10  2021 index.html
-rw-r--r--. 1 root root  368 Jun 10  2021 nginx-logo.png
-rw-r--r--. 1 root root 1800 Jun 10  2021 poweredby.png

05. Nginx if 模块的作用?

nginx的 if 模块是一个用于根据条件判断是否执行某些操作的模块。if模块可以根据请求的URI、请求方法、请求头、请求参数等条件进行判断,并根据判断结果执行相应的操作,如重定向、返回特定的HTTP状态码、设置响应头等。

if 模块的语法如下:

if (condition) {// do something
}

其中,condition是一个表达式,可以是任何能够返回布尔值的表达式,如比较运算符、逻辑运算符等。如果condition的值为true,则执行if块中的代码;否则跳过if块,继续执行后面的代码。

需要注意的是,if模块的使用应该尽量避免,因为它会影响nginx的性能。在nginx中,if模块的执行是在请求处理阶段进行的,而请求处理阶段是在nginx的事件模型中的一个阶段,它会阻塞其他请求的处理。因此,如果if模块的使用不当,会导致nginx的性能下降。建议使用其他模块,如rewrite模块、map模块等来替代if模块。

nginx的 if 模块可以根据请求的URI、请求方法、请求头、请求参数等条件进行判断。具体的判断条件可以使用nginx提供的变量来实现 :

  • $uri:请求的URI
  • $request_method:请求的方法
  • $http_user_agent:请求头中的User-Agent字段
  • $arg_xxx:请求参数中的xxx字段

① 例如,限制 HTTP 请求方法只能是 GET、POST、PUT、DELETE 或 PATCH,如果请求方法不在这些范围内,就返回 403 状态码,表示禁止访问。

if ($request_method !~ ^(GET|POST|PUT|DELETE|PATCH)$ ) {return 403;
}

② 例如,判断请求的URI以/api/开头,并且请求方法为POST,如果满足条件,则执行if语句中的代码块:

if ($uri ~* ^/api/ && $request_method = POST) {# 处理/api/开头的POST请求
}

06. Nginx include 指令的作用?

Nginx的include指令用于在Nginx配置文件中包含其他文件的内容。这个指令可以让你将一个大的配置文件分成多个小的文件,使得配置文件更加易于维护和管理。

使用include指令,你可以将其他文件中的配置内容包含到主配置文件中,这些文件可以是任何文本文件,包括其他Nginx配置文件、shell脚本、环境变量等等。这个指令可以在任何Nginx配置块中使用,包括http、server和location等。

① 例如,你可以在Nginx的http块中使用include指令来包含其他文件中的配置内容:

http {include /etc/nginx/conf.d/*.conf;
}

这个例子中,Nginx会在/etc/nginx/conf.d/目录下查找所有以.conf结尾的文件,并将它们的内容包含到http块中。

② 例如,通过 include 指令引入了 /etc/nginx/default/view.conf 文件中的配置信息:

server {include /etc/nginx/default/view.conf;
}

07. Nginx location 指令的语法?

nginx中location指令用于匹配请求的URI,并指定相应的处理方式。其语法如下:

location [ = | ~ | ~* | ^~ ] uri {... 
}

其中,location为指令名称,uri为要匹配的URI。=、~、~*、^~为匹配符号,具体含义如下:

  • =:精确匹配,只有当请求的URI与指定的uri完全相同时才匹配成功。
  • ~:区分大小写的正则表达式匹配。
  • ~*:不区分大小写的正则表达式匹配。
  • ^~:普通字符匹配,如果请求的URI以指定的uri开头,则匹配成功。

在location块中,可以指定一系列指令来处理匹配成功的请求,例如 proxy_pass、root、alias等。如果有多个location块匹配成功,则会按照定义的顺序选择第一个匹配成功的location块进行处理。

① 示例:

location /AUTH/api/v2/login {deny all;
}

它的作用是禁止所有用户访问 /AUTH/api/v2/login 这个路径下的资源。具体来说,它使用了 deny all 指令,表示拒绝所有用户的访问请求。这个指令通常用于保护敏感的登录接口,确保只有授权的用户才能够访问。

② 示例:

location = /AUTH/api/v2/users/inner/exact {deny all;
}

用于限制访问 /AUTH/api/v2/users/inner/exact 这个 URL 路径的资源。具体来说,它使用了 deny 指令,表示拒绝所有访问该路径的请求。因此,任何尝试访问该路径的请求都将被拒绝,并返回一个 403 Forbidden 的 HTTP 响应。

③ 示例:

location = /BFF/api/v1/auth/login {proxy_pass http://bff.platform.svc.cluster.local:8082$request_uri;proxy_set_header Current-Project-Id fx-projec-62c5c5b97c631a7d274fb1;
}

用于将请求转发到名为"bff.platform.svc.cluster.local"的后端服务的特定路径"/BFF/api/v1/auth/login"。其中,$request_uri变量表示原始请求的URI,会被传递给后端服务。此外,还设置了一个名为"Current-Project-Id"的HTTP头,其值为"fx-projec-62c5c5b97c631a7d274fb1",用于向后端服务传递当前项目的ID。

④ 示例:

location ~ ^/BFF/api/v[0-9]+ {proxy_pass http://bff.platform.svc.cluster.local:8082;
}

它的作用是将以/BFF/api/v[0-9]+开头的请求代理到 http://bff.platform.svc.cluster.local:8082这个地址。

具体来说,这个配置使用了正则表达式^/BFF/api/v[0-9]+来匹配请求的URL,其中^表示匹配URL的开头,/BFF/api/是固定的路径,v[0-9]+表示以v开头,后面跟着一个或多个数字的字符串。例如,/BFF/api/v1、/BFF/api/v2等都会被匹配。

当匹配成功后,proxy_pass指令会将请求代理到http://bff.platform.svc.cluster.local:8082这个地址,也就是将请求转发给了一个名为bff的后端服务。

⑤ 示例:

location ~ ^/PORTAL/api/v4 {proxy_pass http://portal-go.platform.svc.cluster.local:8082;
}

它的作用是将所有以/PORTAL/api/v4开头的请求转发到http://portal-go.platform.svc.cluster.local:8082这个地址。

具体来说,~表示使用正则表达式匹配URL,^表示匹配URL的开头,/PORTAL/api/v4是要匹配的URL的正则表达式,proxy_pass指令表示将匹配到的请求转发到指定的地址。在这个例子中,所有匹配到的请求都会被转发到http://portal-go.platform.svc.cluster.local:8082这个地址。

⑥ 示例:

# 开放oauth2 client相关的接口
location ~ ^/AUTH/api/v1/oauth2/client {proxy_pass http://auth:8081;
}

它将所有以/AUTH/api/v1/oauth2/client开头的请求代理到http://auth:8081这个地址。这个配置的作用是开放OAuth2客户端相关的接口,让客户端可以通过这个接口与认证服务器进行交互,完成OAuth2的认证流程。具体的接口实现需要在http://auth:8081这个地址上进行。

⑦ 示例:

location ~ ^/soc/[-A-Za-z0-9]+/api/v[0-9]+ {# 禁止通过nginx直接访问AUTH的接口if ($request_uri ~* ^/soc/AUTH/api) {return 403;}#合并bigscreen和overview到report微服务的转发if ($request_uri ~* ^/soc/(BIGSCREEN|OVERVIEW|REPORT)/api) {proxy_pass http://report.platform.svc.cluster.local:8101;}if ($request_uri ~* ^/soc/LINKAGE/api) {proxy_pass http://linkage:8130;}#合并VULNERABILITY和NOTIFICATION到INCIDENT微服务的转发if ($request_uri ~* ^/soc/(VULNERABILITY|NOTIFICATION|INCIDENT)/api) {proxy_pass http://incident:8091;}if ($request_uri ~* ^/soc/VIEW/api) {proxy_pass http://view.platform.svc.cluster.local:8122;}
}

用于匹配以/soc/开头,后面跟着一个由字母、数字和破折号组成的字符串,再接着/api/v后面跟着一个数字的请求路径。该配置中包含了一些规则:

  • 禁止直接访问AUTH的接口,如果请求路径中包含/soc/AUTH/api,则返回403错误。
  • 将BIGSCREEN、OVERVIEW和REPORT的请求转发到 report.platform.svc.cluster.local:8101。
  • 将LINKAGE的请求转发到 linkage:8130。
  • 将VULNERABILITY、NOTIFICATION和INCIDENT的请求转发到 incident:8091。
  • 将VIEW的请求转发到 view.platform.svc.clustaer.local:8122。

这些规则可以根据实际需求进行修改和扩展。

08. Nginx 如何禁止访问某个目录?

可以通过在 Nginx 的配置文件中添加如下指令来禁止访问某个目录:

server {listen 80;server_name example.com;location /path/to/directory {deny all;}# 其他配置项
}

其中,/path/to/directory 是要禁止访问的目录路径。deny all 指令表示拒绝所有访问该目录的请求。当用户访问 example.com/path/to/directory 时,Nginx 会返回 403 Forbidden 错误,表示禁止访问该目录。

09. Nginx 如何定义错误页面?

在Nginx中,可以通过配置错误页面来定义错误提示页面。具体步骤如下:

① 打开Nginx配置文件,一般为/etc/nginx/nginx.conf。

② 在http块中添加以下代码:

error_page 404 /404.html;
location = /404.html {root /usr/share/nginx/html;internal;
}

上述代码中,error_page指定了错误码为404时的错误页面路径为/404.html,location指定了该路径对应的本地文件路径为/usr/share/nginx/html/404.html。

③ 保存配置文件并重启Nginx服务。

这样,当访问的页面不存在时,Nginx就会自动跳转到定义的404错误页面。同样的,也可以定义其他错误码的错误页面,只需要在http块中添加相应的error_page和location配置即可。

10. Nginx error_page 指令的作用?

server {listen       80;server_name  example.com;root         /usr/share/nginx/html;error_page 404 /404.html;location = /40x.html {}
}
  • root 指定了服务器的根目录为 /usr/share/nginx/html。
  • error_page 404 /404.html 指定了当访问的页面不存在时,返回 /404.html 页面。
  • location = /40x.html {} 指定了当访问的页面为 /40x.html 时,不做任何处理。

在这个Nginx服务器配置中,root指令指定了Nginx服务器的根目录,即服务器上存储网站文件的主目录。root指令将网站文件的根目录设置为/usr/share/nginx/html。这意味着当用户访问example.com时,Nginx服务器将在/usr/share/nginx/html目录中查找网站文件并将其提供给用户。如果在该目录中找不到请求的文件,Nginx服务器将返回一个404错误页面,该页面的位置由error_page指令指定。

11. Nginx 中500、502、503、504 有什么区别?

这些状态码都是指向 Nginx 服务器的错误响应,具体区别如下:

① 500:表示服务器内部错误,通常是由于 Nginx 无法处理请求而导致的。这可能是由于配置错误、程序错误或其他问题引起的。

② 502:表示网关错误,通常是由于 Nginx 作为代理服务器时无法从上游服务器(如应用服务器)获取响应而导致的。这可能是由于上游服务器故障、网络问题或其他问题引起的。

③ 503:表示服务不可用,通常是由于 Nginx 无法处理请求,因为服务器过载或正在进行维护。这可能是由于服务器资源不足、应用程序错误或其他问题引起的。

④ 504:表示网关超时,通常是由于 Nginx 作为代理服务器时无法在预定时间内从上游服务器(如应用服务器)获取响应而导致的。这可能是由于上游服务器响应时间过长、网络问题或其他问题引起的。例如程序需要执行20秒,而nginx最大响应等待时间为10秒,这样就会出现超时。

总的来说,这些状态码都表示服务器或代理服务器无法正常处理请求,但具体原因可能不同。在排除问题时,需要根据具体的状态码和错误信息来确定问题的根本原因。

12. Nginx 如何精准匹配路径?

Nginx可以使用location指令来精准匹配路径。具体来说,可以使用以下几种方式:

① 精确匹配:使用“=”前缀,例如:

location = /path/to/resource {匹配精确路径 /path/to/resource
}

② 前缀匹配:使用“^~”前缀,例如:

location ^~ /path/to/ {# 匹配以 /path/to/ 开头的路径
}

③ 正则表达式匹配:使用“”或“*”前缀,例如:

location ~* \.(gif|jpg|jpeg)$ {匹配以 .gif、.jpg 或 .jpeg 结尾的路径
}

需要注意的是,Nginx会按照配置文件中location指令的顺序依次匹配请求的路径,因此应该将精确匹配放在前面,以避免被前缀匹配或正则表达式匹配覆盖。

13. Nginx 路径匹配优先级?

在 Nginx 中,路径匹配的优先级如下:

① 精确匹配:如果请求 URI 与某个 location 指令的前缀完全匹配,则使用该 location 指令处理请求。

② 前缀匹配:如果请求 URI 以某个 location 指令的前缀开头,则使用该 location 指令处理请求。

③ 正则表达式匹配:如果请求 URI 与某个 location 指令的正则表达式匹配,则使用该 location 指令处理请求。

如果有多个 location 指令匹配请求 URI,则使用最长的前缀匹配或正则表达式匹配的 location 指令处理请求。如果有多个最长匹配的 location 指令,则使用先定义的 location 指令处理请求。

需要注意的是,如果使用了 rewrite 指令,则重写后的 URI 会再次进行路径匹配,因此可能会匹配到不同的 location 指令

14. Nginx rewrite 常用的全局变量?

Nginx rewrite 常用的全局变量包括:

$args:请求中的参数部分,例如 /index.php?id=1 中的 id=1。
$uri:请求的 URI,例如 /index.php。
$request_uri:请求的 URI 包括参数,例如 /index.php?id=1。
$request_method:存放了客户端的请求方式,如 get,post 等。
$request_filename:存放当前请求的资源文件的路径名。
$document_root:当前请求的文档根目录。
$request_filename:当前请求的文件路径,由 root 或 alias 指令与 URI 组合而成。
$host:请求中的主机名,例如 www.example.com。
$http_user_agent:客户端浏览器的 User-Agent 字符串。
$http_referer:客户端浏览器的 Referer 字符串,表示用户是从哪个页面链接过来的。
$remote_addr:客户端的 IP 地址。
$server_name:当前请求的服务器名。
$server_port:当前请求的服务器端口号。

这些变量可以在 Nginx 的 rewrite 模块中使用,用于重写 URL 或者进行其他的操作。例如,可以使用 $uri 变量来重写 URL,或者使用 $http_user_agent 变量来根据客户端浏览器类型进行不同的处理。

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

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

相关文章

ThinkPHP函数深度解析

ThinkPHP是一个具有丰富功能和强大灵活性的PHP开发框架。在这篇文章中,我们将详细介绍ThinkPHP的一些关键函数,以帮助开发人员更好地理解和使用这个框架。 1. 入门:ThinkPHP的核心函数 1.1 C()函数 C()函数用于读取和设置配置参数。它是Thin…

【Spring】使用注解的方式获取Bean对象(对象装配)

目录 一、了解对象装配 1、属性注入 1.1、属性注入的优缺点分析 2、setter注入 2.1、setter注入的优缺点分析 3、构造方法注入 3.1、构造方法注入的优缺点 二、Resource注解 三、综合练习 上一个博客中,我们了解了使用注解快速的将对象存储到Spring中&#x…

Android:自己写一个简单记事本

一、前言:我的app是点击加号跳转到另一个界面 那么我遇到的问题的是点击加号是一个从一个Fragment跳转到另一个Fragment跳转失败。 二、解决方案: //相应控件的监听里面实现跳转FragmentManager fragmentManagergetFragmentManager();fragmentManager.b…

网络可靠性之链路聚合

网络的可靠性 网络的可靠性指当设备或者链路出现单点或者多点故障时保证网络服务不间断的能力网络的可靠性是可以从单板、设备、链路多个层面实现。 链路聚合 以太网链路聚合: 通过将多个物理接口捆绑成为一个逻辑接口,可以再不进行硬件升级的条件下&a…

css滚动条样式指南

css滚动条样式指南 滚动条是网页设计中经常被忽视的元素。虽然它看起来像是一个小细节,但它在网站导航中起着至关重要的作用。默认的滚动条可能看起来不合适,有损整体美观。本文将介绍如何使用 CSS 自定义滚动条。 在 Chrome、Edge 和 Safari 中设置滚…

【Rust 基础篇】Rust类函数宏:代码生成的魔法

导言 Rust是一门现代的、安全的系统级编程语言,它提供了丰富的元编程特性,其中类函数宏(Function-Like Macros)是其中之一。类函数宏允许开发者创建类似函数调用的宏,并在编译期间对代码进行生成和转换。在本篇博客中…

基于Azure OpenAI Service 的知识库搭建实验⼿册

1.概要 介绍如何使⽤Azure OpenAI Service 的嵌⼊技术,创建知识库;以及创建必要的资源组和资源,包括 Form Recognizer 资源和 Azure 翻译器资源。在创建问答机器⼈服务时,需要使⽤已部署模型的 Azure OpenAI 资源、已存在的…

SAP-MM-发票校验的重复校验功能

路径:SPRO-物料管理-后勤发票校验-收入发票-设置重复发票检查 按公司代码设置重复检查,可以按三个方式进行检查,公司代码、参照、发票日期,如果此处未维护就是按供应商(XK02)的六项进行检查 但是如果两处都…

MySQL 中的 distinct 和 group by 哪个效率更高?

在 MySQL 中,DISTINCT 和 GROUP BY 都是用来去除重复的数据,但它们的使用场景和性能影响是不同的。 有索引的情况下 group by 和 distinct 都能使用索引,效率相同。 无索引的情况下 distinct 效率高于 group by。原因是 distinct 和 group …

深入学习 Redis - 事务、实现原理、指令使用及场景

目录 一、Redis 事务 vs MySQL事务 二、Redis 事务的执行原理 2.1、执行原理 2.2、Redis 事务设计这么简单,为什么不涉及成 MySQL 那样强大呢? 三、Redis 事务的使用 3.1、使用场景 3.2、具体演示 开启/执行/放弃事务 watch 监控 watch 实现原理…

chapter14:springboot与安全

Spring Boot与安全视频 Spring Security, shiro等安全框架。主要功能是”认证“和”授权“,或者说是访问控制。 认证(Authentication)是建立在一个声明主体的过程(一个主体一般指用户,设备或一些可以在你的应用程序中…

nginx配置访问springboot服务

一、idea中可通过 clean package打包命令,打好包 ,比如:端口为8080,服务访问地址为/, 前端打包文件为dist,访端口为8000, 则可以这样配置nginx server {listen 8000;location / {root html/dist;…

ASP.NET Core SignalR

ASP.NET Core SignalR是一个开发实时网络应用程序的框架,它使用WebSocket作为传输协议,并提供了一种简单和高效的方式来实现实时双向通信。 SignalR使用了一种称为"Hub"的概念来管理连接和消息的传递。开发者可以编写自己的Hub类,…

Django之JWT库与SimpleJWT库的使用

Django之JWT库与SimpleJWT库的使用 JWTJWT概述头部(header)载荷(payload)签名(signature) Django使用JWT说明jwt库的使用安装依赖库配置settings.py文件配置urls.py文件创建视图配置权限 SimpleJWT库的使用安装SimpleJWT库配置Django项目配置路由创建用户接口测试身份认证自定义…

【雕爷学编程】Arduino动手做(190)---MAX4466声音模块

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…

(五)Node.js -模块的加载机制

1. 优先从缓存中加载 模块在第一次加载后会被缓存。这意味着多次调用require()不会导致模块的代码被执行多次。 注意:不论是内置模块、用户自定义模块、还是第三方模块,它们都会优先从缓存中加载,从而提高模块的加载效率。 2. 内置模块的加载…

Jenkins Gerrit Trigger实践

1.创建Gerrit Trigger 2.jenkins master节点生成gerrit用户的密钥 这里的用户名得写登录gerrit后个人信息中的 Username 3.gerrit 配置刚刚jenkins生成密钥的公钥 4.gerrit 用户加入群组 不加这个群组,下一步测试就会报错“User aeshare has no capability conn…

通过VBA宏合并Excel工作表

工作中经常会用到的把几个Excel文件合并到一个,或者是把一个Excel文件里的所有Sheet合并到一个Sheet来进行统计。下面分别提供用vba宏来解决这两个问题的方法。 1、合并Excel文件 打开一个空Excel文件,AltF11,插入一个模块,开始…

Dueling Network

Dueling Network —— Dueling Network Architectures for Deep Reinforcement Learning 论文下载地址 论文介绍 图9. Dueling Network 模型结果示意图 Dueling Network与传统DQN的区别在于神经网络结构的不同,Dueling Netowrk在传统DQN的基础上只进行了微小的改动…

Flowise AI:用于构建LLM流的拖放UI

推荐:使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 什么是Flowise AI? Flowise AI是一个开源的UI可视化工具,用于帮助开发LangChain应用程序。在我们详细介绍 Flowise AI 之前,让我们快速定义 LangChain。LangChain是…