Nginx 负载均衡模块 ngx_http_upstream_module 详述

2023-11-18

译序:截至发稿时止,官方最新 ngx_http_upstream_module 指令详述。官方随时在更新,请及时关注官网最新公布。以下是官方原文。
ngx_http_upstream_module 模块用于定义可以被 proxy_passfastcgi_pass 以及memcached_pass 等指令引用的服务器群。
配置示例

upstream backend {  
    server backend1.example.com       weight=5;  
    server backend2.example.com:8080;  
    server unix:/tmp/backend3;  
  
    server backup1.example.com:8080   backup;  
    server backup2.example.com:8080   backup;  
}  
  
server {  
    location / {  
        proxy_pass http://backend;  
    }

    #静态资源交由nginx管理
    location /static {
        root        /var/www/mydomain/web;    # static 文件夹所在的目录
        expires     1d;
        add_header  Cache-Control public;
        access_log  off;
    }
}  


动态可配置群,仅作为我们商业订阅的一部分:

[plain]  view plain copy print ?
  1. upstream appservers {  
  2.     zone appservers 64k;  
  3.   
  4.     server appserv1.example.com      weight=5;  
  5.     server appserv2.example.com:8080 fail_timeout=5s slow_start=30s;  
  6.     server 192.0.2.1                 max_fails=3;  
  7.   
  8.     server reserve1.example.com:8080 backup;  
  9.     server reserve2.example.com:8080 backup;  
  10. }  
  11.   
  12. server {  
  13.     location / {  
  14.         proxy_pass http://appservers;  
  15.         health_check;  
  16.     }  
  17.   
  18.     location /upstream_conf {  
  19.         upstream_conf;  
  20.         allow 127.0.0.1;  
  21.         deny all;  
  22.     }  
  23. }  

指令
语法:upstream name { ... }
 默认值:—
上下文:http

定义一群服务器。服务器可以监听到不同的端口。此外,监听 TCP 和 UNIX-domian socket 的服务器可以混合定义。
例如:
[plain]  view plain copy print ?
  1. upstream backend {  
  2.     server backend1.example.com weight=5;  
  3.     server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;  
  4.     server unix:/tmp/backend3;  
  5. }  

默认情况下,请求是使用一个加权重的循环负载方法分配给各个主机的。在上面的例子中,每七个请求会以以下方案进行分配:五个请求分给 backend1.example.com 而另外两个请求分别分配给第二和第三个主机。如果在连接一台主机时发生错误,当前请求会被传给下一台主机,如此这般知道所有运行中的服务器都被尝试。如果没有任何主机成功返回,客户端会受到从最后一台主机返回的通信结果。
语法:server address [parameters];
默认值:—
上下文:upstream

定义一台主机的地址以及其他一些参数。地址可以被指定为一个域名或一个 IP 地址,端口号参数可选,或者被指定为 "unix:" 前缀之后的一个 UNIX-domain socket 路径。端口号没指定的话就使用端口号 80。解析到多个 IP 地址的域名会一次性定义多台主机。
可以定义以下参数:
weight=number
        设置服务器的权重,默认为 1。
max_fails=number
        设置由 fail_timeout 定义的时间段内连接该主机的失败次数,以此来断定 fail_timeout 定义的时间段内该主机是否可用。默认情况下这个数值设置为 1。零值的话禁用这个数量的尝试。由 proxy_next_upstream fastcgi_next_upstream 、以及 memcached_next_upstream  等指令来判定错误尝试。
fail_timeout=time
        设置
        在指定时间内连接到主机的失败次数,超过该次数该主机被认为不可用。
        服务器被视为无效的时段。
        这个参数默认是 10 秒钟。
slow_start=time
        设置一台不健康的主机变成 健康 主机,或者当一台主机在被认为不可用变成可用时,将其权重由零恢复到标称值的时间。默认值为零,也就是说,禁用慢启动。
         这个功能仅作为我们的商业订阅的一部分。
backup
        将当前服务器标记为备份服务器。当主服务器不可用时,向备用服务器传递请求。
down
        标记当前服务器为永不可用;和  ip_hash  指令一起使用。
举例:
[plain]  view plain copy print ?
  1. upstream backend {  
  2.     server backend1.example.com     weight=5;  
  3.     server 127.0.0.1:8080           max_fails=3 fail_timeout=30s;  
  4.     server unix:/tmp/backend3;  
  5.   
  6.     server backup1.example.com:8080 backup;  
  7. }  

         如果群里面只有一台主机,那么 max_fails、 fail_timeout 和 slow_start 参数将被忽略,而且这样的主机也永远不会被认为不可用。
语法:zone name size;
默认值:—
上下文:upstream

使群动态可配。定义持有群的配置和工作进程之间共享的运行时状态的共享内存区域的名字和大小。这样的群允许在运行时添加、删除和修改服务器。这个配置通过  upstream_conf  进行访问。
         这一指令仅作为我们商业订购的一部分。
语法:ip_hash;
默认值:—
上下文:upstream

指定一个使用负载均衡方法根据客户端 IP 地址将请求分发给一些服务器的群。客户 IPv4 地址或者 IPv6 地址的前三个位群作为一个散列键。这个方法可以使同一个客户端的常常被发送给同一台主机,除非这台主机是不可用状态。在这种情况下(该主机不可用)客户端请求会被传递到另一台主机。大多数情况下,它将被发送给同一台主机。
         Nginx 1.3.2 和 1.2.2 之后开始支持 IPv6 地址。
如果服务器中的一台需要临时移除掉,那么它应该使用 down 参数标记以保持客户 IP 地址的当前散列。
例如:
[plain]  view plain copy print ?
  1. upstream backend {  
  2.     ip_hash;  
  3.   
  4.     server backend1.example.com;  
  5.     server backend2.example.com;  
  6.     server backend3.example.com down;  
  7.     server backend4.example.com;  
  8. }  

         在 Nginx 1.3.1 和 1.2.2 版本之前的版本是无法使用 ip_hash 负载均衡方式定义服务器权重的。
语法:keepalive connections;
默认:—
上下文:upstream
这一指令在 Nginx 版本 1.1.4 之后出现。

激活 upstream 服务器的连接缓存。
connections 参数设置保存在每个工作进程缓存中的 upstream 主机的闲置 keepalive 连接的最大个数。超出这个数目时,最近很少使用的连接被关闭。
         应该特别指出的是 keepalive 指令并没有限制一个 Nginx 工作进程所能承载的连接总量。connections 应该设置为一个足够小的值以使 upstream 服务器也足以应对新的连接。
带有 keepalive 连接的 memcached upstream 配置例子:
[plain]  view plain copy print ?
  1. upstream memcached_backend {  
  2.     server 127.0.0.1:11211;  
  3.     server 10.0.0.2:11211;  
  4.   
  5.     keepalive 32;  
  6. }  
  7.   
  8. server {  
  9.     ...  
  10.   
  11.     location /memcached/ {  
  12.         set $memcached_key $uri;  
  13.         memcached_pass memcached_backend;  
  14.     }  
  15.   
  16. }  

对于 HTTP, proxy_http_version  指令应该设置为 "1.1",并且清空 "Connection" 头字段:
[plain]  view plain copy print ?
  1. upstream http_backend {  
  2.     server 127.0.0.1:8080;  
  3.   
  4.     keepalive 16;  
  5. }  
  6.   
  7. server {  
  8.     ...  
  9.   
  10.     location /http/ {  
  11.         proxy_pass http://http_backend;  
  12.         proxy_http_version 1.1;  
  13.         proxy_set_header Connection "";  
  14.         ...  
  15.     }  
  16. }  

         作为一种选择,HTTP/1.0 持久连接可以通过传递 "Connection: Keep-Alive" 头字段到 upstream 服务器来使用,虽然这种方法并不被推荐。
对于 FastCGI 服务器,需要为持久连接设置  fastcgi_keep_conn
[plain]  view plain copy print ?
  1. upstream fastcgi_backend {  
  2.     server 127.0.0.1:9000;  
  3.   
  4.     keepalive 8;  
  5. }  
  6.   
  7. server {  
  8.     ...  
  9.   
  10.     location /fastcgi/ {  
  11.         fastcgi_pass fastcgi_backend;  
  12.         fastcgi_keep_conn on;  
  13.         ...  
  14.     }  
  15. }  

         当使用 round-robin 之外的负载均衡方法时,需要在 keepalive 指令之前将他们激活。
         SCGI 和 uwsgi 协议没有长连接的概念。
语法:least_conn;
默认值:—
上下文:upstream

描述:这一指令出现在版本 1.3.1 和 1.2.2 中。
定义一群应该在请求传递给具有最小有效连接的服务器时使用的负载均衡方法,要考虑到服务器的权重。如果有很多这样的服务器,将会使用带权重的 round-robin 方法。
语法:health_check [interval=time] [fails=number] [passes=number] [uri=uri] [match=name];
默认值:—
上下文:location

        激活定期健康检查。
支持以下可选参数:
  • interval:两次连续性健康检查的间隔时间,默认为 5 秒;
  • fails:设置连续性健康检查失败的次数,超过这个次数的话这台服务器就被认为是不健康的,默认为 1;
  • passes:设置连续性健康检查通过的次数,超过这个次数的话这台服务器就被认为是健康的,默认为 1;
  • uri:定义健康检查请求用的 URI,默认为 "/";
  • match:定义健康检查返回通过的匹配块的配置;默认情况下,返回应该具有状态码 2XX 或者 3XX。
例如,
[plain]  view plain copy print ?
  1. location / {  
  2.     proxy_pass http://backend;  
  3.     health_check;  
  4. }  

将会每隔五秒钟发送 "/" 到 backend 群的每个服务器。如果有任何通信错误或者超时发生,或者代理服务器返回为 2XX 或者 3XX 之外的状态码,健康检查失败,这台服务器就被认为是不健康的了。来自客户端的请求不会被传递给不健康的服务器。
健康检查可以被配置成测试返回的状态码,头字段以及其值,还有正文内容。测试单独地使用 match 参数引用到的  match  指令进行配置,例如:
[plain]  view plain copy print ?
  1. http {  
  2.     server {  
  3.     ...  
  4.         location / {  
  5.             proxy_pass http://backend;  
  6.             health_check match=welcome;  
  7.         }  
  8.     }  
  9.   
  10.     match welcome {  
  11.         status 200;  
  12.         header Content-Type = text/html;  
  13.         body ~ "Welcome to nginx!";  
  14.     }  
  15. }  

这一配置说明了健康检查通过的条件是,健康检查请求应该成功返回,拥有状态码 200,Content-Type 是为 "text/html",并且在正文中包含 "Welcome to nginx!"。
服务器群必须属于 共享内存
如果一些健康检查是为同一群服务器而定义,一个失败的任何检查就会使相关服务器被认为是不健康的。
         这个指令仅作为我们的商业订阅的一部分。
语法:match name { ... }
默认值:—
上下文:http

定义已命名测试设置,用于核对健康检查请求的返回。
可以在一个返回中进行以下项目测试:
status 200;
状态码为 200。
status ! 500;
状态码不是 500。
status 200 204;
状态码为 200 或者 400。
status ! 301 302;
状态码既不是 301 也不是 302。
status 200-399;
状态码在 200 - 399 之间。
status ! 400-599;
状态码不在 400 - 599 之间。
status 301-303 307;
状态码是 301,302,303,或者 307。
header Content-Type = text/html;
头包含字段 "Content-Type" 值为 text/html。
header Content-Type != text/html;
头包含字段 "Content-Type" 值不是 text/html。
header Connection ~ close;
头包含字段 "Connection" 值匹配正则表达式 close。
header Connection !~ close;
头包含字段 "Connection" 值不匹配正则表达式 close。
header Host;
头包含字段 "Host"。
header ! X-Accel-Redirect;
头没有 "X-Accel-Redirect" 字段。
body ~ "Welcome to nginx!";
正文匹配正则表达式 "Welcome to nginx!"。
body !~ "Welcome to nginx!";
正文不匹配正则表达式 "Welcome to nginx!"。
如果以上有些被定义,那么返回必须全都匹配时才能说明它测试通过。
         仅仅检查返回正文的头 256 k 个字节。
例如:
[plain]  view plain copy print ?
  1. # status is 200, content type is "text/html",  
  2. # and body contains "Welcome to nginx!"  
  3. match welcome {  
  4.     status 200;  
  5.     header Content-Type = text/html;  
  6.     body ~ "Welcome to nginx!";  
  7. }  
  8. # status is not one of 301, 302, 303, or 307, and header does not have "Refresh:"  
  9. match not_redirect {  
  10.     status ! 301-303 307;  
  11.     header ! Refresh;  
  12. }  
  13. # status ok and not in maintenance mode  
  14. match server_ok {  
  15.     status 200-399;  
  16.     body !~ "maintenance mode";  
  17. }  

         这个指令仅作为我们的商业订阅的一部分。
语法:sticky cookie name [expires=time] [domain=domain] [path=path];
sticky route variable ...;
默认值:—
上下文:upstream
这一指令开始出现于版本 1.5.7。

激活会话关联,可以使来自同一客户端的请求总是传递给一群服务器中的同一个。例如:
[plain]  view plain copy print ?
  1. upstream backend {  
  2.     server backend1.example.com;  
  3.     server backend2.example.com;  
  4.   
  5.     sticky_cookie_insert srv_id expires=1h domain=example.com path=/;  
  6. }  

没有绑定到特定服务器的客户端请求会被传递到由配置的负载均衡方法选中的服务器。这个客户端的而后的请求将被传递到同一台服务器。如果指定服务器无法处理请求,一台新的服务器会被选中绑定,就像这个客户端的这次请求前没有绑定到任何服务器一样。
关于绑定服务器的信息保存在 HTTP cookie 中。第一个参数设置 cookie 名。其他参数如下:
expires
        设置浏览器保持 cookie 的时间。特别值 max 将会使 cookie 在 "31 Dec 2037 23:55:55 GMT" 才过期。这个是老的浏览器所能知道最大日期值了。如果这个参数没有定义,cookie 会在浏览器会话结束时过期。
domain
        定义设置的 cookie 的域名。
path
        定义设置的 cookie 的路径。
如果任何一个参数被遗漏掉,相应的 cookie 属性就不会被设置上。
         这个指令仅作为我们的商业订阅的一部分。
语法:upstream_conf;
默认值:—
上下文:location

开启 location 域的 HTTP upstream 配置接口。对于这一 location 的访问应该是 受限 的。
配置命令可以用于:
  • 查看一群中的主要和备用服务器;
  • 查看一个特别的服务器;
  • 修改一个特别的服务器;
  • 添加一个新的服务器(参考下边注释);
  • 移除一个特别的服务器。
正如在 server 指令中提到的那样,指定一个服务器作为一个域名可能导致多个服务器被添加到群。因为地址在一群不需要是独特的,单个服务器在一个群可以被唯一引用的话只有用他们的 ID。服务器的 ID 会被自动分配,并在群配置中显示。
一个配置命令包括作为请求参数传递的参数,例如:
http://127.0.0.1/upstream_conf?upstream=appservers
支持以下参数:
upstream=name
选择一群。这一参数是强制必须的。
backup=
如果没有设置,选中一群中的主要服务器。如果设置了,则选中一群中的备用服务器。
id=number
选中一群中特定的主要服务器或者备用服务器。
remove=
移调一群中一台特定的主要服务器或者备用服务器。
add=
添加一台主要服务器或者备用服务器到群。
server=address
同  server  指令中的 "address" 参数。
weight=number
同  server  指令中的 "weight" 参数。
max_fails=number
同  server  指令中的 "max_fails" 参数。
fail_timeout=time
同  server  指令中的 "fail_timeout" 参数。
slow_start=time
同  server  指令中的 "slow_start" 参数。
down=
同  server  指令中的 "down" 参数。
up=
同  server  指令中的 "down" 参数相反。
前三个参数用于选择命令适用的对象。
比如,查看群组里头的主服务器,发送:
http://127.0.0.1/upstream_conf?upstream=appservers
查看群组里头的备用服务器,发送:
http://127.0.0.1/upstream_conf?upstream=appservers&backup=
查看群组里头特定的主服务器,发送:
http://127.0.0.1/upstream_conf?upstream=appservers&id=42
查看群组里头特定的备用服务器,发送:
http://127.0.0.1/upstream_conf?upstream=appservers&backup=&id=42
要添加一台主服务器或者备用服务器到群组,在 "server=" 参数中定义其地址即可。如果没有定义其他参数,该服务器添加后,其他参数设置为默认值(参见  server  指令)。
例如,添加一台新的主服务器到群组,发送:
http://127.0.0.1/upstream_conf?add=&upstream=appservers&server=127.0.0.1:8080
添加一台新的从服务器到群组,发送:
http://127.0.0.1/upstream_conf?add=&upstream=appservers&backup=&server=127.0.0.1:8080
添加一台主服务器到群组,设置其参数非默认值,且将其标记为 "down",发送:
http://127.0.0.1/upstream_conf?add=&upstream=appservers&server=127.0.0.1:8080&weight=2&max_fails=3&fail_timeout=3s&down=
移除群组中的一台特定主服务器或者备用服务器,可以使用 id= 参数将其选择。
例如,移除群组中的一台特定主服务器,发送:
http://127.0.0.1/upstream_conf?remove=&upstream=appservers&id=42
移除群组中的一台特定从服务器,发送:
http://127.0.0.1/upstream_conf?remove=&upstream=appservers&backup=&id=42
修改群组中的一台特定的主服务器或从服务器,也使用 id= 参数将其选中。
例如,修改群组中一台特定主服务器为 "down",发送:
http://127.0.0.1/upstream_conf?upstream=appservers&id=42&down=
修改群组里头的一台备用服务器地址,发送:
http://127.0.0.1/upstream_conf?upstream=appservers&backup=&id=42&server=192.0.2.3:8123
修改群组里头的一台主服务器的其他参数,发送:
http://127.0.0.1/upstream_conf?upstream=appservers&id=42&max_fails=3&weight=4
         这个指令仅作为我们的商业订阅的一部分。
嵌入式变量
ngx_http_upstream_module 模块支持以下嵌入式变量:
$upstream_addr
        为 UNIX-domain socket 保存服务器地址及端口号。如果请求处理时涉及多台服务器,使用逗号将他们的地址进行分隔,比如 "192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock"。如果一个由 "X-Accel-Redirect" 或者 错误页面  发出的从一个服务器群组到另一个群组的重定向发生时,不同群组之间的服务器地址使用冒号分隔,比如 "192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock : 192.168.10.1:80, 192.168.10.2:80"。
$upstream_cache_status
        保存访问响应缓存的状态(版本 0.8.3)。这一状态可以是 "MISS","BYPASS","EXPIRED","STALE","UPDATING" 或者 "HIT"。
$upstream_response_length
        保存从 upstream 服务器获得的响应体长度(版本 0.7.27)字节的长度。几个响应长度的话使用逗号和冒号分隔,就像 $upstream_addr 中的地址那样。
$upstream_response_time
        保存从 upstream 服务器获得的响应次数,长度以毫秒的分辨率保存,单位是秒。几个响应次数的话使用逗号和冒号分隔,就像 $upstream_addr 中的地址那样。
$upstream_status
        保存从 upstream 服务器获得的响应码。几个响应码的话使用逗号和冒号分隔,就像 $upstream_addr 中的地址那样。
$upstream_http_...
        保存服务器响应头。比如,"Server" 响应头可以使用 $upstream_http_server 参数激活。将头信息转化为参数名字的规则和以 " $http_ " 前缀开始的参数规则一样。只保存最后一个响应头。
原文链接: http://nginx.org/en/docs/http/ngx_http_upstream_module.html

http://blog.csdn.net/defonds/article/details/13003121


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nginx 负载均衡模块 ngx_http_upstream_module 详述 的相关文章

  • Lack of free swap space on 192.168.3.1

    zabbix健康报错 Lack of free swap space on 192 168 3 1 解决办法 先查看磁盘swap磁盘容量 是因为Zabbix监控没有考虑虚拟主机的交换空间情况 解决办法修改配置 选择 Lack of free
  • easypoi校验数据时获取excel行号和错误信息

    目录 什么是easypoi easypoi校验excel实体类怎么获取错误信息和excel的行号 需要用到的excel实体类 调用的客户端代码 什么是easypoi easypoi功能如同名字easy 主打的功能就是容易 让一个没见接触过p
  • 华为校招机试题- 数组的中心位置-2023年

    题目描述 给你一个整数数组nums 请计算数组的中心位置 数组中心位置是数组的一个下标 其左侧所有元素相乘的积等于右侧所有元素相乘的积 数组第一个元素的左侧积为1 最后一个元素的右侧积为1 如果数组有多个中心位置 应该返回最靠近左边的那一个
  • 修改lvgl Linux demo使用tslib获取触摸坐标

    1 为什么要修改 o 交叉编译官方lvgl linux demo发现触摸坐标不准确 官方demo获取坐标的做法是 evdev fd open EVDEV NAME O RDWR O NOCTTY O NDELAY if evdev fd 1
  • 再谈TCP三次握手/四次挥手

    TCP三次握手 四次挥手 在TCP IP协议中 TCP协议提供可靠的连接服务 采用三次握手建立一个连接 如图1所示 1 第一次握手 建立连接时 客户端A发送SYN包 SYN j 到服务器B 并进入SYN SEND状态 等待服务器B确认 2
  • 比PS还好用!Python 20行代码批量抠图

    抠图前 vs Python自动抠图后 在日常的工作和生活中 我们经常会遇到需要抠图的场景 即便是只有一张图片需要抠 也会抠得我们不耐烦 倘若遇到许多张图片需要抠 这时候你的表情应该会很有趣 Python能够成为这样的一种工具 在只有一张图片

随机推荐

  • cypress——前端自动化测试框架

    前端自动化测试概述 MVC Model View Controller 模式开始流行 MVC是模型 Model 视图 View 和控制器 Controller 的缩写 它使业务逻辑 数据 界面显示分离 这时Web开发属于View层 Ajax
  • Unity InputSystem 实现同一按键单击、双击、长按执行不同逻辑

    最近学习了一下Unity InputSystem 该系统可用于实现 管理复杂的操作逻辑 上限很高 但由于它有一定的学习成本 导致一些和我一样的小白一入门时不得要领 之前卡住我的一个需求就是通过InputSystem 实现同一按键单击 双击
  • java 0-9 A-Z进位函数

    java 可以包含数字0 9 和字母A Z的加法编码规则 例如城市编码 2位 可以是0 9 也可以是A Z 那么实际编码顺序则是0 1 2 3 4 5 6 7 8 9 A B C D E F G A9的下一个编码是AA AZ的下一个编码是B
  • html背景毛玻璃效果代码,css3毛玻璃效果(背景虚化)

    wrap h3 font size 18px color ffffff wrap p font size 14px color ffffff font variant ligatures common ligatures discretio
  • 人工智能--深度学习两层全连接神经网络搭建

    系列文章目录 人工智能 深度学习从感知机到神经网络 人工智能 深度学习神经网络神经元的实现 文章目录 系列文章目录 前言 一 多层神经网络的结构 二 两层全连接神经网络 1 搭建模型 2 神经元传递理论 3 激活函数的确定 三 神经网络实现
  • exe和dll库分离

    c 在写程序的时候一般会用到第三方库 我们在引用后 一般会把第三方库复制到debug生成的目录下 如果第三方库的dll很少那还可以 如果第三方库的dll很多 那么就会和自己生成的exe混在一起 看着极其混乱 所以有时候会把第三方库文件单独的
  • 高端算法总结

    1 合并排序 2 两次筛选 3 BANSAC 4 动态规划 5 Karatsuoa 乘法 6 快速傅里叶变换 7 最大流量算法 8 learing学习算法 9 RSA 10 Strassen 11 单纯型算法 12 奇异值分解 13 求解线
  • upload-labs靶场第一关——第九关

    Pass 01JS检测绕过 1 根据提示 从上述代码中可以看出 上述代码使用了JavaScript脚本 在前端对用户上传文件的类型进行了检测 因此 我们只需要先上传符合JavaScript脚本要求的数据包 然后使用Burpsuit抓取该数据
  • python+Appium自动化:python多线程多并发启动appium服务

    Python启动Appium 服务 使用Dos命令或者bat批处理来手动启动appium服务 启动效率低下 如何将启动Appium服务也实现自动化呢 这里需要使用subprocess模块 该模块可以创建新的进程 并且连接到进程的输入 输出
  • 数据可视化第五章

    基于python的散点图实现 py import ggplot as gp import pandas as pd crime pd read csv crimeRatesByState2005 csv plot gp ggplot gp
  • 有点钱怎么做副业?应该投资哪些副业?

    有点钱怎么做副业 应该投资哪些副业 现在很多上班族 失业族 甚至连带孩子的妈妈们 他们不满足现状 给自己寻找赚钱的机会 一个是为了丰富自己的业余生活 再个就是能更加充实自己的钱包 让自己更为独立 也能自主 现在有哪些小途径可以实现轻松赚钱呢
  • Lua中的定时器

    Lua定时器 Cocos2d x C 中的定时器网上有很多 也很容易找 所以我就不写了 直接Lua吧 在Lua中用定时器的地方很多 我是深有体会啊 比如说我们需要一个函数每帧都执行 那么就可以用定时器来解决啦 旁白 好哇 好哇 终于可以解决
  • 搭建域控和添加本域辅域控,加入域(上)(精准扶小白)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 安装环境 操作系统 Windows2012 一 什么是工作组 域 活动目录 树 林 工作组 处在同一个局域网中的用户 他们也默认处于同一个工作组 且加入工作组不需要信任过程
  • [PYTHON与CSP的姻缘]2023-3 LDAP

    练习过程 一开始一直以为set输出数字的时候是有序的 扣了一天一直显示错误 不知道哪跟哪 大冤种无语了 然后改了输出直接满分 无语ing 主要注意要考虑到表达式的一些嵌套 这样就可以参考题干中对语句的递归定义来写 用递归进行对表达式的切分处
  • react有哪些性能优化的手段?

    1 使用组件shouldComponentUpdate方法 通过在组件爱你中实现shouldComponentUpdate方法 可以手动控制组件的更新 在该方法中 可以根据组件的属性和状态进行比较 判断是否需要进行更新 避免不必要的更新可以
  • 539. Minimum Time Difference

    Given a list of 24 hour clock time points in Hour Minutes format find the minimum minutes difference between any two tim
  • 数据库几种删除的区别delete,truncate,drop

    delete from 表名 where 条件 gt 删除满足条件的记录 delete from test where id 1 delete from test gt 删除所有 commit gt 提交数据 rollback gt 回滚数
  • Java面试题大全(2021版)

    发现网上很多Java面试题都没有答案 所以花了很长时间搜集整理出来了这套Java面试题大全 希望对大家有帮助哈 本套Java面试题大全 全的不能再全 哈哈 博主已将以下这些面试题整理成了一个Java面试手册 是PDF版的 关注博主的微信公众
  • 用递归进行数组求和

    记录一下zj提前批算法一面 用递归进行数组求和 算法马上就写出来了 但是运行的时候一直报栈溢出 我以为是我的递归逻辑出问题了 就一直在改 但是还是报错 最终卡住了 开局就GG 自己也慌得一批 导致我第二道题也没做出来 最初写的代码如下 au
  • Nginx 负载均衡模块 ngx_http_upstream_module 详述

    译序 截至发稿时止 官方最新 ngx http upstream module 指令详述 官方随时在更新 请及时关注官网最新公布 以下是官方原文 ngx http upstream module 模块用于定义可以被 proxy pass f