NGINX高性能web服务器

news2025/1/12 23:13:14

1.web服务器介绍

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。
Nginx支持热部署,启动简单,可以做到7*24不间断运行。几个月都不需要重新启动。

Nginx能干什么呢?

可以作为Web服务器

可以作为邮件服务器

可以作为反向代理的服务器动静分离(就是将动态资源和静态资源分隔开)

可以实现负载均衡

2.源码安装NGINX

 使用源代码方法安装Nginx,可以自行选择Nginx版本进行安装,并且在安装过程中可以根据自己的需求调整Nginx的参数、安装自己所需的功能。源代码安装的Nginx相对yum安装的更加的稳定,移动数据更加的安全,卸载Nginx也不会有数据残留。

官方源码包下载地址:https://nginx.org/en/download.html

下载好之后拖入liunx解压即可

tar -zxf nginx-1.24.0.tar.gz

接下来我们采用1.24版本并进行平滑升级和降级

2.1 创建NGINX用户 

useradd -s /sbin/nologin -M nginx

创建用户并使用户无法作为远程登录用户

2.2 进行NGINX编译环境检测

首先先进入nginx-1.24.0目录

./configure --prefix=/usr/local/nginx \                                              #指定下载目录

--user=nginx \                                                                                 # 指定nginx运行用户
--group=nginx \                                                                               # 指定nginx运行组
--with-http_ssl_module \                                                                 # 支持https://
--with-http_v2_module \                                                                  # 支持http版本2
--with-http_realip_module \                                                             # 支持ip透传
--with-http_stub_status_module \                                                   # 支持状态页面
--with-http_gzip_static_module \                                                     # 支持压缩
--with-pcre \                                                                                     # 支持正则
--with-stream \                                                                                 # 支持tcp反向代理
--with-stream_ssl_module \                                                             # 支持tcp的ssl加密
--with-stream_realip_module                                                           # 支持tcp的透传ip
#当然你还可以添加其他更多模块功能
#通过./configure --help命令查看
#注意斜杠是换行符,复制粘贴时在斜杆后面不要留空格

也可以下面代码一键复制 

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module

 如果系统报错缺少东西,就根据提示自己下载

例如:

就是缺少gcc ,yum install gcc 下载即可

就是缺少 pcre-devel 下载即可 

dnf install gcc pcre-devel zlib-devel openssl-devel -y #可能你会缺少的软件包
成功过后就可以make编译了

2.3 make编译

make && make instal l
make编译完后就可以查看我们之前指定下载的目录里面去查看
ls /usr/local/nginx/
 cd /usr/local/nginx/sbin/
 ./nginx #启动nginx
ps aux | grep nginx
conf :保存 nginx 所有的配置文件,其中 nginx.conf nginx 服务器的最核心最主要的配置文件,其他 的.conf 则是用来配置 nginx 相关的功能的,例如 fastcgi 功能使用的是 fastcgi.conf
fastcgi_params 两个文件,配置文件一般都有一个样板配置文件,是以.default 为后缀,使用时可将其复制并将 default 后缀 去掉即可。
html 目录中保存了 nginx 服务器的 web 文件,但是可以更改为其他目录保存 web 文件 , 另外还有一个 50x web 文件是默认的错误页面提示页面。
logs :用来保存 nginx 服务器的访问日志错误日志等日志, logs 目录可以放在其他路径,比
/var/logs/nginx 里面。默认为空需要自己创建
sbin :保存 nginx 二进制启动脚本,可以接受不同的参数以实现不同的功能。

2.4  验证版本及编译参数

vim ~/.bash_profile
export PATH=$PATH:/usr/local/nginx/sbin
source ~/.bash_profile
nginx -V

2.5 源码安装后的二进制使用

使用 nginx -help 查看记得只有一条杠
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit # 显示版本和编译参数
-t : test configuration and exit # 测试配置文件是否异
-T : test configuration, dump it and exit # 测试并打印
-q : suppress non-error messages during configuration testing # 静默 模式
-s signal : send signal to a master process: stop, quit, reopen, reload # 发送信号,reload信号 会生成新的worker,但master不会重新生成
-p prefix : set prefix path (default: /etc/nginx/) # 指定 Nginx 目录
-c filename : set configuration file (default: /etc/nginx/nginx.conf) # 配置文件路径
-g directives : set global directives out of configuration file # 设置全局指令 , 注意和
配置文件不要同时配置 , 否则冲突

2.6 Nginx 配置启动文件

vim /lib/systemd/system/nginx.service

[/usr]/lib/systemd/system/ 该目录中包含的是软件包安装的单元,也就是说通过yum、dnf、rpm等软件包管理命令管理的systemd单元文件,都放置在该目录下。

/etc/systemd/system/(系统管理员安装的单元, 优先级更高)

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

[root@Nginx ~]# systemctl daemon-reload
[root@Nginx ~]# systemctl start nginx

2.7 平滑升级和回滚

目的:Nginx 版本进行升级以满足对其功能的需求,例如添加新模块,需要新功能,而此时
Nginx 又在跑着业务无法停掉,这时我们就可能选择平滑升级
步骤:
将旧 Nginx 二进制文件换成新 Nginx 程序文件(注意先备份 )
master 进程发送 USR2 信号
master 进程修改 pid 文件名加上后缀 .oldbin, 成为 nginx.pid.oldbin
master 进程用新 Nginx 文件启动新 master 进程成为旧 master 的子进程 , 系统中将有新旧两个 Nginx
进程共同提供 Web 服务 , 当前新的请求仍然由旧 Nginx worker 进程进行处理 , 将新生成的 master
程的 PID 存放至新生成的 pid 文件 nginx.pid
向旧的 Nginx 服务进程发送 WINCH 信号,使旧的 Nginx worker 进程平滑停止
向旧 master 进程发送 QUIT 信号,关闭老 master ,并删除 Nginx.pid.oldbin 文件
如果发现升级有问题 , 可以回滚∶向老 master 发送 HUP ,向新 master 发送 QUIT
./configure --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
# 只要 make 无需要 make install
ll objs/nginx /usr/local/nginx/sbin/nginx 
查看下载的nginx版本

复制老版nginx保留备份

将新版nginx命令复制过去

kill -USR2 38629 #nginx worker ID
#USR2 平滑升级可执行程序 , 将存储有旧版本主进程 PID 的文件重命名为 nginx.pid.oldbin ,并启动新的 nginx
# 此时两个 master 的进程都在运行 , 只是旧的 master 不在监听 , 由新的 master 监听 80
# 此时 Nginx 开启一个新的 master 进程,这个 master 进程会生成新的 worker 进程,这就是升级后的 Nginx 进 程,此时老的进程不会自动退出,但是当接收到新的请求不作处理而是交给新的进程处理。
 curl -I localhost
# 回收旧版本
 kill -WINCH 48732
 ps aux | grep nginx
#唤起旧版本 不必唤起旧版本只是作为演示
kill -HUP

# 检测版本信息
curl -I localhost

 

我们的服务并不会因为升级而断客户端可以一直访问不会有变化

同理降级也是相同操作就不一一演示

3 nginx 核心配置

3.1 配置文件说明

nginx 官方帮助文档: http://nginx.org/en/docs/
Nginx 的配置文件的组成部分:
主配置文件: nginx.conf
子配置文件 : include conf.d/*.conf
fastcgi uwsgi scgi 等协议相关的配置文件
mime.types :支持的 mime 类型, MIME(Multipurpose Internet Mail Extensions) 多用途互联网邮 件扩展类型,MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据,是设定某 种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动 使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

3.2 全局配置

user nginx nginx; # 启动 Nginx 工作进程的用户和组
没加之前
加了之后
# Nginx 工作进程绑定到指定的 CPU 核心,默认 Nginx 是不进行进程绑定的,绑定并不是意味着当前 nginx 进 程独占以一核心CPU ,但是可以保证此进程不运行在其他核心上,这就极大减少了 nginx 的工作进程在不同的 cpu核心上的来回跳转,减少了 CPU 对进程的资源分配与回收以及内存管理等,因此可以有效的提升 nginx 服务 器的性能。
绑定采用二进制第一个进程绑定第一个写入的cpu序号以此类推

 

worker_priority 0;
# 工作进程优先级, -20~20(19)
worker_rlimit_nofile 65536;                       
#所有worker进程能打开的文件数量上限 ,
#包括:Nginx的所有连接(例如与代理服务器的连接等)
#而不仅仅是与客户端的连接
#另一个考虑因素是实际的并发连接数不能超过系统级别的最大打开文件数的限制
#最好与ulimit -n 或者limits.conf 的值保持一致,
daemon off; # 前台运行 Nginx 服务用于测试、 docker 等环境。
master_process off|on;
# 是否开启 Nginx master-worker 工作模式,仅用于开发调试场景 ,默认为on

单个工作进程的最大并发连接数

use epoll;

#使用epoll事件驱动,

#Nginx 支持众多的事件驱动,
# 比如 :select poll epoll ,只能设置在 events 模块中
accept_mutex on; #on 为同一时刻一个请求轮流由 work 进程处理 ,
# 而防止被同时唤醒所有 worker
# 避免多个睡眠进程被唤醒的设置,默认为 off
# 新请求会唤醒所有 worker 进程 , 此过程也称为 " 惊群 "
# 因此 nginx 刚安装完以后要进行适当的优化。建议设置为 on
multi_accept on; #on Nginx 服务器的每个工作进程可以同时接受多个新的网
络连接
# 此指令默认为 off
# 即默认为一个工作进程只能一次接受一个新的网络连接
# 打开后几个同接受多个。建议设置为 on

实现 nginx 的高并发配置  

# 默认配置不支持高并发 , 会出现以下错误日志当我们压力测试时就会报错
yum install httpd-tools #下载测试工具
正常访问会导致报错
vim /etc/security/limits.conf 
 
vim /usr/local/nginx/conf/nginx.conf

再次访问即可

3.2 http 配置

# 在响应报文中将指定的文件扩展名映射至 MIME 对应的类型
include         /etc/nginx/mime.types;
default_type application/octet-stream; # mime.types 中的类型外
# 指定其它文件的默认 MIME 类型,浏览 器一般会提示下载
types {
        text/html html;
        image/gif gif;
        image/jpeg jpg;
}
3.2.1 建立简单PC站点
为了美观性和可读性等原因我们采用子配置文件写入
# 定义子配置文件路径
 mkdir /usr/local/nginx/conf.d/
vim /usr/local/nginx/conf/nginx.conf
http {
......
include /apps/nginx/conf/conf.d/*.conf; # 在配置文件的最后面添加此行
        #注意不要放在最前面 , 会导致前面的命令无法 生效
}

 

为了美观和可读性我们采用子配置文件写入

3.2.2 root和alias
server {
        listen 80;
        server_name www.exam.com;
        root /data/web/html;
        index index.html;
        location / {
                root /data/web/html/;
        }
        location /alias {
                alias /data/web/alias/;
        }
}



 echo this is alias > /data/web/alias/index.html

alias :定义路径别名,会把访问的路径重新定义到其指定的路径 , 文档映射的另一种机制 ; 仅能用于
location 上下文 , 此指令使用较少
root # 给定的路径对应于 location 中的 /uri 左侧的 /
alias # 给定的路径对应于 location 中的 /uri 的完整路径

3.2.3 location的详情使用
1 在一个 server location 配置段可存在多个,用于实现从 uri 到文件系统的路径映射;
2ngnix 会根据用户请求的 URI 来检查定义的所有 location ,按一定的优先级找出一个最佳匹配,
而后应用其配置在没有使用正则表达式的时候, nginx 会先在 server 中的多个 location 选取匹配度最高的一个uri
3uri 是用户请求的字符串,即域名后面的 web 文件路径 然后使用该location 模块中的正则 url 和字符串,如果匹配成功就结束搜索,并使用此 location 处理此请求
# 语法规则:
location [ = | ~ | ~* | ^~ ] uri { ... }
= # 用于标准 uri 前,需要请求字串与 uri 精确匹配,大小敏感 , 如果匹配成功就停止向下匹配并立
即处理请求
^~ # 用于标准 uri 前,表示包含正则表达式 , 并且匹配以指定的正则表达式开头
# uri 的最左边部分做匹配检查,不区分字符大小写
~ # 用于标准 uri 前,表示包含正则表达式 , 并且区分大小写
~* # 用于标准 uri 前,表示包含正则表达式 , 并且不区分大写
不带符号 # 匹配起始于此 uri 的所有的 uri
\ # 用于标准 uri 前,表示包含正则表达式并且转义字符。可以将 . * ? 等转义为普通符号
# 匹配优先级从高到低:
=, ^~, ~/~*, 不带符号
3.2.4 location的匹配 规则

[root@nginx nginx]# mkdir /data/web{1..5}/test -p
[root@nginx nginx]# ll /data/
总用量 0
drwxr-xr-x. 4 root root 31  8月 22 23:56 web
drwxr-xr-x. 3 root root 18  8月 23 00:08 web1
drwxr-xr-x. 3 root root 18  8月 23 00:09 web2
drwxr-xr-x. 3 root root 18  8月 23 00:09 web3
drwxr-xr-x. 3 root root 18  8月 23 00:09 web4
drwxr-xr-x. 3 root root 18  8月 23 00:08 web5
[root@nginx nginx]# echo web1 test > /data/web1/test/index.html
[root@nginx nginx]# echo web2 test > /data/web2/test/index.html
[root@nginx nginx]# echo web3 test > /data/web3/test/index.html
[root@nginx nginx]# echo web4 test > /data/web4/test/index.html
[root@nginx nginx]# echo web5 test > /data/web5/test/index.html

3.2.4.1 匹配案例-精确匹配

server 部分使用 location 配置一个 web 界面,例如:当访问 nginx 服务器的 /logo.jpg 的时候要显示指定
html 文件的内容,精确匹配一般用于匹配组织的 logo 等相对固定的 URL, 匹配优先级最高

3.2.4.2 匹配案例-区分大小写

~ 实现区分大小写的模糊匹配 . 以下范例中 ,
如果访问 uri 中包含大写字母的 logo.PNG ,则以下 location 匹配 logo.png 条件不成功
因为 ~ 区分大小写,当用户的请求被执行匹配时发现 location 中定义的是小写的 png
本次访问的 uri 匹配失败,后续要么继续往下匹配其他的 location (如果有),要么报错给客户端

3.2.4.3 匹配案例-不区分大小写

~* 用来对用户请求的 uri 做模糊匹配, uri 中无论都是大写、都是小写或者大小写混合,此模式也都会匹
配,通常使用此模式匹配用户 request 中的静态资源并继续做下一步操作 , 此方式使用较多

 

3.2.4.4 匹配案例-优先级

~* 和~优先级一样区别在于谁在前面

[root@nginx nginx]# cat /usr/local/nginx/conf.d/vhosts.conf 
server {
    listen 80;
    server_name www.exam.com;
    root /data/web/html;
    index index.html;

    location ~* .HtMl$ {
        root /data/web1;
    }    
    location ~ .html$ {
        root /data/web2;
    }
    location  /test {
        root /data/web3;
    }
    location ^~ /te {
        root /data/web4;
    }
    location = /test {
        root /data/web5;
    }
}    

3.2.4.5 匹配案例-文件名后缀

 [root@nginx nginx]# mkdir /data/web/jpg
[root@nginx nginx]# cd /data/web/
alias/ html/  jpg/   
[root@nginx nginx]# cd /data/web/jpg/
[root@nginx jpg]# ll
总用量 368
-rw-r--r--. 1 root root 376289  8月 23 00:32 1.png

 location ~* \.png {
                root /data/web/jpg/;
        }


 

 

3.3 location其他功能

3.3.1 自定义错误页面

[root@nginx conf.d]# cat  /data/errors/40x.html 
this is error html
[root@nginx conf.d]# cat /usr/local/nginx/conf.d/error.conf 
server {
    listen 80;
    server_name www.exam.com;
    error_page 404 /40x.html;
    
    location /40x.html {
        root /data/errors;
        }
}

 

3.3.2 自定义错误日志
[root@nginx conf.d]# ll /var/log/ | grep nginx
[root@nginx conf.d]# mkdir /var/log/nginx
[root@nginx conf.d]# cat /usr/local/nginx/conf.d/error.conf 
server {
    listen 80;
    server_name www.exam.com;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    error_page 404 /40x.html;
    
    location /40x.html {
        root /data/errors;
        }
}
[root@nginx conf.d]# nginx -s reload
nginx: [warn] conflicting server name "www.exam.com" on 0.0.0.0:80, ignored
[root@nginx conf.d]# curl www.exam.com/haha
this is error html
[root@nginx conf.d]# ll /var/log/ | grep nginx
drwxr-xr-x. 2 root   root        41  8月 23 16:04 nginx
[root@nginx conf.d]# tail -n1 /var/log/nginx/error.log 
2024/08/23 16:04:30 [error] 45178#0: *39 open() "/usr/local/nginx/html/haha" failed (2: No such file or directory), client: 172.25.254.136, server: www.exam.com, request: "GET /haha HTTP/1.1", host: "www.exam.com"
[root@nginx conf.d]# tail -n1 /var/log/nginx/access.log 
172.25.254.136 - - [23/Aug/2024:16:04:30 +0800] "GET /haha HTTP/1.1" 404 19 "-" "curl/7.76.1

3.3.3 检测文件是否存在

[root@nginx errors]# echo the html is not exist > /data/errors/default.html
[root@nginx errors]# cat /usr/local/nginx/conf.d/error.conf 
server {
    listen 80;
    server_name www.exam.com;
    root /data/; #必须得有默认路径否则检测文件不触发
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    error_page 404 /40x.html;
    try_files $uri $uri.html $uri/index.html /errors/no.html;
    location /40x.html {
        root /data/errors;
        }
}
[root@nginx errors]# nginx -s reload
nginx: [warn] conflicting server name "www.exam.com" on 0.0.0.0:80, ignored
[root@nginx errors]# curl www.exam.com/rhrh
the html is not exist
 

如果没写开头的默认路径就会报500错误未找到

2024/08/23 16:26:38 [error] 45257#0: *50 rewrite or internal redirection cycle while internally redirecting to "/data/errors/default.html", client: 172.25.254.1, server: www.exam.com, request: "GET /haa HTTP/1.1", host: "www.exam.com" 

3.3.4 账户认证
ngx_http_auth_basic_module 模块提供此功能
如果没有这个模块将不支持 源码安装时加上即可
[root@nginx errors]# htpasswd -cmb /usr/local/nginx/conf/.htpasswd admin lee
Adding password for user admin
[root@nginx errors]# cat /usr/local/nginx/conf/.htpasswd 
admin:$apr1$0RMWZyx5$sGmSBzlZHK4E9zh3N55li0
[root@nginx errors]# htpasswd -mb /usr/local/nginx/conf/.htpasswd admin2 lee
Adding password for user admin2
[root@nginx errors]# mkdir /data/login
[root@nginx errors]# echo welcome >/data/login/index.html
[root@nginx ~]# cat /usr/local/nginx/conf.d/login.conf 
server {
    listen 80;
    server_name www.exam.com;
    
    location /login {
        root /data;
        index index.html;
        auth_basic "login passwd";
        auth_basic_user_file "/usr/local/nginx/conf/.htpasswd";
    }
}

3.3.5 长连接
keepalive_requests 3;
keepalive_timeout 65 60;
# 开启长连接后,返回客户端的会话保持时间为 60s ,单次长连接累计请求达到指定次数请求或 65 秒就会被断 开,第二个数字60 为发送给客户端应答报文头部中显示的超时时间设置为 60s :如不设置客户端将不显示超时时间。
Keep-Alive:timeout=60 # 浏览器收到的服务器返回的报文
# 如果设置为 0 表示关闭会话保持功能,将如下显示:
#Connection:close 浏览器收到的服务器返回的报文
需要下载telnet包

[root@nginx ~]# telnet www.exam.com 80
Trying 172.25.254.136...
Connected to www.exam.com.
Escape character is '^]'.
GET / HTTP/1.1
HOST:www.exam.com

HTTP/1.1 200 OK
Server: nginx/1.26.1
Date: Fri, 23 Aug 2024 09:12:33 GMT
Content-Type: text/html
Content-Length: 22
Last-Modified: Fri, 23 Aug 2024 08:32:00 GMT
Connection: keep-alive
ETag: "66c84900-16"
Accept-Ranges: bytes

the html is not exist                        #第一次访问
GET / HTTP/1.1
HOST:www.exam.com

HTTP/1.1 200 OK
Server: nginx/1.26.1
Date: Fri, 23 Aug 2024 09:12:55 GMT
Content-Type: text/html
Content-Length: 22
Last-Modified: Fri, 23 Aug 2024 08:32:00 GMT
Connection: keep-alive
ETag: "66c84900-16"
Accept-Ranges: bytes

the html is not exist                            #第二次访问
GET / HTTP/1.1
HOST:www.exam.com

HTTP/1.1 200 OK
Server: nginx/1.26.1
Date: Fri, 23 Aug 2024 09:13:08 GMT
Content-Type: text/html
Content-Length: 22
Last-Modified: Fri, 23 Aug 2024 08:32:00 GMT
Connection: keep-alive
ETag: "66c84900-16"
Accept-Ranges: bytes

the html is not exist                          #第三次访问

connection closed by foreign host.

#到达3次后自动断开

3.3.6 作为下载服务器

ngx_http_autoindex_module 模块处理以斜杠字符 "/" 结尾的请求,并生成目录列表,可以做为下载服务配置使用

[root@nginx ~]# mkdir /data/download
[root@nginx ~]# cp /usr/local/nginx/logs/error.log /data/download/
[root@nginx ~]# cat /usr/local/nginx/conf.d/download.conf
server {
    listen 80 ;
    server_name www.exam.com;
    root /data;
    
    location /download {
        autoindex on;
        autoindex_exact_size on;
        autoindex_localtime on;
        limit_rate 1024k;
    }
}

4 nginx 高级配置 

基于 nginx 模块 ngx_http_stub_status_module 实现,
在编译安装 nginx 的时候需要添加编译参数 --with-http_stub_status_module
否则配置完成之后监测会是提示法错误

4.1 nginx 状态页

配置如下

location /status {
    stub_status;
}

 

# 状态页用于输出 nginx 的基本状态信息:
# 输出信息示例:
Active connections: 291
server accepts handled requests
16630948 16630948 31070465
上面三个数字分别对应 accepts,handled,requests 三个值
Reading: 6 Writing: 179 Waiting: 106
Active connections: # 当前处于活动状态的客户端连接数
# 包括连接等待空闲连接数 =reading+writing+waiting
accepts # 统计总值, Nginx 自启动后已经接受的客户端请求连接的总数。
handled: # 统计总值, Nginx 自启动后已经处理完成的客户端请求连接总数
# 通常等于 accepts ,除非有因 worker_connections 限制等被拒绝的连接
requests: # 统计总值, Nginx 自启动后客户端发来的总的请求数
Nginx 支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文件大小将比源文件显著变小,样有助于降低出口带宽的利用率,降低企业的IT 支出,不过会占用相应的CPU 资源。
Nginx 对文件的压缩功能是依赖于模块 ngx_http_gzip_module, 默认是内置模块
配置指令如下:
示例:
Reading: # 当前状态,正在读取客户端请求报文首部的连接的连接数
# 数值越大 , 说明排队现象严重 , 性能不足
Writing: # 当前状态,正在向客户端发送响应报文过程中的连接数 , 数值越大 , 说明
访问量很大
Waiting: # 当前状态,正在等待客户端发出请求的空闲连接数
开启 keep-alive 的情况下 , 这个值等于 active –
(reading+writing)

4.2 nginx 压缩功能

# 启用或禁用 gzip 压缩,默认关闭
gzip on | off;
# 压缩比由低到高从 1 9 ,默认为 1 ,值越高压缩后文件越小,但是消耗 cpu 比较高。基本设定未 4 或者 5
gzip_comp_level 4;
# 禁用 IE6 gzip 功能,早期的 IE6 之前的版本不支持压缩
gzip_disable "MSIE [1-6]\.";
#gzip 压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# 启用压缩功能时,协议的最小版本,默认 HTTP/1.1
gzip_http_version 1.0 | 1.1;
# 指定 Nginx 服务需要向服务器申请的缓存空间的个数和大小 , 平台不同 , 默认 :32 4k 或者 16 8k;
gzip_buffers number size;
# 指明仅对哪些类型的资源执行压缩操作 ; 默认为 gzip_types text/html ,不用显示指定,否则出错
gzip_types mime-type ...;
# 如果启用压缩,是否在响应报文首部插入 “Vary: Accept-Encoding”, 一般建议打开
gzip_vary on | off;
# 预压缩,即直接从磁盘找到对应文件的 gz 后缀的式的压缩文件返回给用户,无需消耗服务器 CPU
# 注意 : 来自于 ngx_http_gzip_static_module 模块
gzip_static on | off;

server {
	listen 80 ;
	server_name www.exam.com;
	root /data;
	gzip on;
	gzip_comp_level 5;
	gzip_min_length 1k;
	gzip_types text/plain text/css text/html;
	gzip_vary on;
	
	location /download {
		autoindex on;
		autoindex_exact_size on;
		autoindex_localtime on;
		limit_rate 1024k;
	}
}

4.3 nginx 变量使用

nginx 的变量可以在配置文件中引用,作为功能判断或者日志等场景使用
变量可以分为内置变量和自定义变量
内置变量是由 nginx 模块自带,通过变量可以获取到众多的与客户端访问相关的值。
编译的时候需要配置echo module
具体内置变量 http://nginx.org/en/docs/varindex.html 官方网站
$remote_addr;
# 存放了客户端的地址,注意是客户端的公网 IP
$args;
# 变量中存放了 URL 中的所有参数
# 例如 :https://search.jd.com/Search?keyword= 手机 &enc=utf-8
# 返回结果为 : keyword= 手机 &enc=utf-8
$is_args
# 如果有参数为 ? 否则为空
$document_root;
# 保存了针对当前资源的请求的系统根目录 , 例如 :/webdata/nginx/timinglee.org/lee
$document_uri;
# 保存了当前请求中不包含参数的 URI ,注意是不包含请求的指令
# 比如 :http://lee.timinglee.org/var?\id=11111 会被定义为 /var
# 返回结果为 :/var
$host;
# 存放了请求的 host 名称
limit_rate 10240;
echo $limit_rate;
# 如果 nginx 服务器使用 limit_rate 配置了显示网络速率,则会显示,如果没有设置, 则显示 0
$remote_port;
# 客户端请求 Nginx 服务器时随机打开的端口,这是每个客户端自己的端口
$remote_user;
# 已经经过 Auth Basic Module 验证的用户名
$request_body_file;
# 做反向代理时发给后端服务器的本地资源的名称
$request_method
# 请求资源的方式, GET/PUT/DELETE
$request_filename;
# 当前请求的资源文件的磁盘路径,由 root alias 指令与 URI 请求生成的文件绝对路径,
# :webdata/nginx/timinglee.org/lee/var/index.html
$request_uri;
# 包含请求参数的原始 URI ,不包含主机名,相当于 :$document_uri?$args,
# 例如: /main/index.do?id=20190221&partner=search
$scheme;
# 请求的协议,例如 :http https,ftp
$server_protocol;
# 保存了客户端请求资源使用的协议的版本,例如 :HTTP/1.0 HTTP/1.1 HTTP/2.0
$server_addr;
# 保存了服务器的 IP 地址
$server_name;
# 虚拟主机的主机名
$server_port;
# 虚拟主机的端口号
$http_user_agent;
# 客户端浏览器的详细信息
$http_cookie;
# 客户端的所有 cookie 信息
$cookie_<name>
#name 为任意请求报文首部字部 cookie key
$http_<name>
#name 为任意请求报文首部字段 , 表示记录请求报文的首部字段, ame 的对应的首部字段名需要为小写,如果有
横线需要替换为下划线
# 示例 :
echo $http_user_agent;
echo $http_host;
$sent_http_<name>
#name 为响应报文的首部字段, name 的对应的首部字段名需要为小写,如果有横线需要替换为下划线 , 此变量有
问题
echo $sent_http_server;
$arg_<name>
# 此变量存放了 URL 中的指定参数, name 为请求 url 中指定的参数
echo $arg_id;
[root@Nginx ~]# vim /usr/local/nginx/conf.d/vhosts.conf
server {
    listen 80;
    server_name lee.timinglee.org;
    root /webdata/nginx/timinglee.org/lee;
    location /var {
    default_type text/html;
    set $name timinglee;
        echo $name;
    set $web_port $server_port;
    echo $web_port;
}
}
测试输出
[root@client ~]# curl lee.timinglee.org/var
timinglee
80

5 nginx rewrite 功能

Nginx 服务器利用 ngx_http_rewrite_module 模块解析和处理 rewrite 请求
此功能依靠 PCRE(perl compatible regular expression) ,因此编译之前要安装 PCRE
rewrite nginx 服务器的重要功能之一,用于实现 URL 的重写, URL 的重写是非常有用的功能
比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的链接,就可以设置为访问
另外还可以在一定程度上提高网站的安全性。

5.1 if

=                 # 比较变量和字符串是否相等,相等时 if 指令认为该条件为 true ,反之为 false
!=              # 比较变量和字符串是否不相等,不相等时 if 指令认为条件为 true ,反之为 false
~    #  区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~ # 区分大小写字符 , 判断是否匹配,不满足匹配条件为真,满足匹配条件为假
~* # 不区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件假
!~* # 不区分大小字符 , 判断是否匹配,满足匹配条件为假,不满足匹配条件为真
-f !-f # 判断请求的文件是否存在和是否不存在
-d !-d # 判断请求的目录是否存在和是否不存在
-x !-x # 判断文件是否可执行和是否不可执行
-e !-e # 判断请求的文件或目录是否存在和是否不存在 ( 包括文件,目录,软链接 )
# 如果 $ 变量的值为空字符串或 0 ,则 if 指令认为该条件为 false ,其他条件为 true
#nginx 1.0.1 之前 $ 变量的值如果以 0 开头的任意字符串会返回 false

5.2 set

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

5.3 break

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

5.4 return

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

5.5 rewrite 指令

rewrite 将用户请求的 URI 基于 regex 所描述的模式进行检查,匹配到时将其替换为表达式指定的新的 URI
注意:如果在同一级配置块中存在多个 rewrite 规则,那么会自下而下逐个检查 ; 被某条件规则替换完成 后,会重新一轮的替换检查,隐含有循环机制, 但不超过 10 ; 如果超过,提示 500 响应码, [flag] 所表示的
标志位用于控制此循环机制
如果替换后的 URL 是以 http:// https:// 开头,则替换结果会直接以重定向返回给客户端 , 即永久重定向301

正则表达式格式

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

5.6 rewrite flag 使用介绍

redirect;
# 临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新 URL 给客户端
# 由客户端重新发起请求 ; 使用相对路径 , 或者 http:// https:// 开头,状态码: 302
permanent;
# 重写完成后以永久重定向方式直接返回重写后生成的新 URL 给客户端
# 由客户端重新发起请求,状态码: 301
break;
# 重写完成后 , 停止对当前 URL 在当前 location 中后续的其它重写操作
# 而后直接跳转至重写规则配置块之后的其它配置,结束循环,建议在 location 中使用
# 适用于一个 URL 一次重写
last;
# 重写完成后 , 停止对当前 URI 在当前 location 中后续的其它重写操作,
# 而后对新的 URL 启动新一轮重写检查,不建议在 location 中使用
# 适用于一个 URL 多次重写,要注意避免出现超过十次以及 URL 重写后返回错误的给用户
域名的临时的调整,后期可能会变,之前的域名或者 URL 可能还用、或者跳转的目的域名和 URL 还会跳 转,这种情况浏览器不会缓存跳转, 临时重定向不会缓存域名解析记录 (A 记录 ) ,但是永久重定向会缓存。
示例 : 因业务需要,将访问源域名 www.exam.org  的请求永久重定向到 www.exam.com
location / {
    root /data/nginx/html/pc;
    index index.html;
    rewrite / http://www.exam.com permanent; #临时重定向
    #rewrite / http://www.exam.com redirect;  #永久重定向
}

6 反向代理

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

6.1 反向代理 单web服务器

反向代理: 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 协议转发至指定服务器处理

 proxy_pass;

#用来设置将客户端请求转发给的后端服务器的主机

# 可以是主机名 ( 将转发至后端服务做为主机头首部 ) IP 地址:端口的方式
# 也可以代理到预先设置的主机群组,需要模块 ngx_http_upstream_module
server {
        listen 80;
        server_name www.exam.com;
        root data;

        location /proxy {
                proxy_pass http://172.25.254.10:80; http协议和端口号要写
        }
}
#80 后面无 uri, 即无 / 符号 ,
# 需要将 location 后面 url 附加到 proxy_pass 指定的url后面
# 此行为类似于 root
#proxy_pass 指定的 uri 不带斜线将访问的 /proxy
# 等于访问后端服务器

#80 后面有 uri, 即有 / 符号
# 相当于置换 , 即访问 /web 时实际返回 proxy_pass 后面uri内容
# 此行为类似于 alias
#proxy_pass 指定的 uri 带斜线
# 等于访问后端服务器的
#http://172.25.254.10:80/index.html
# 内容返回给客户端
配置webserver

 [root@server conf.d]# mkdir /data/web/proxy
[root@server conf.d]# echo this is 172.25.254.10 proxy > /data/web/proxy/index.html
[root@server conf.d]# systemctl restart nginx

 nginx 配置

 在我们的webserver服务器上移动文件位置

[root@server conf.d]# mv /data/web/proxy/ /data/web/html/
[root@server conf.d]# systemctl restart nginx



6.2 反向代理缓存功能

缓存功能默认关闭状态 , 需要先动配置才能启用
# 示例:在 http配置定义缓存信息# 配置在 nginx.conf http 配置段
proxy_cache_path /var/cache/nginx/proxy_cache
# 定义缓存保存路径, proxy_cache 会自动创建
levels=1:2:2 
# 定义缓存目录结构层次
keys_zone=proxycache:20m
指内存中缓存的大小,主要用于存放 key metadata
inactive=120s
# 缓存有效时间
max_size=10g;
# 最大磁盘占用空间,磁盘存入文件内容的缓存空间最大值
proxy_cache proxycache;
proxy_cache_key $request_uri; 
# 对指定的数据进行 MD5 的运算做为缓存的 key
proxy_cache_valid 200 302 301 10m; 
# 指定的状态码返回的数据缓存多长时间
proxy_cache_valid any 1m
# 除指定的状态码返回的数据以外的缓存多长时间 , 必须设置 , 否则不会缓存
proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 |
http_502 | http_503 | http_504 | http_403 | http_404 | off ;
# 在被代理的后端服务器出现哪种情况下,可直接使用过期的缓存响应客户端
proxy_cache_methods GET | HEAD | POST ...;
# 对哪些客户端请求方法对应的响应进行缓存, GET HEAD 方法总是被缓存

 未配置缓存

ab -n1000 -c100 http://www.exam.com/proxy

 配置在nginx.conf http配置段

配置NGINX location端 

server {
	listen 80;
	server_name www.exam.com;
	root data;
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;	
	location /proxy {
		proxy_pass http://172.25.254.10:80;
        proxy_cache proxycache; #自己定义的名字
		proxy_cache_key $request_uri;
		proxy_cache_valid 200 302 404 10m;
		proxy_cache_valid any 1m;
	}
}

 

 #验证缓存目录结构及文件大小

6.3 http反向代理负载均衡

在上一个节中 Nginx 可以将客户端的请求转发至单台后端服务器但是无法转发至特定的一组的服务器,而且不能对后端服务器提供相应的服务器状态监测,Nginx 可以基于 ngx_http_upstream_module 模块提 供服务器分组转发、权重分配、状态监测、调度算法等高级功能

 

upstream webserver {
	#ip_hash;
	#hash $request_uri consistent;
	#hash $cookie_lee
	#least_conn;
	server 172.25.254.10:80 weight=1 fail_timeout=15s max_fails=3;
	server 172.25.254.20:80 weight=1 fail_timeout=15s max_fails=3;
	server 172.25.254.136:80 backup;
	}
	server {
		listen 80;
		server_name www.exam.com;
		location ~ / {
			proxy_pass http://webserver;
		}
}

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

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

相关文章

使用一台电脑监控全体员工电脑,怎么实现?安全高效两不误,透视全公司电脑使用情况!

传统的管理模式无法监管员工上班时间内的所有行为&#xff0c;如聊天、浏览与工作无关的网站、玩游戏等等&#xff0c;总不能让企业管理者一直盯着员工办公吧&#xff1f; 员工电脑作为企业运营的神经末梢&#xff0c;其安全与使用效率直接关系到企业的稳定发展。那么&#xf…

Jenkins docker容器时区修改

背景 用docker搭建的Jenkins环境时间显示和我们本地时间相差8个小时&#xff0c;可能是由于docker run的时候没有加上/etc/localtime:/etc/localtime去同步时区&#xff0c;所以需修改容器内部的系统时间 查看时间 先查看宿主机的系统时间 date -R 进docker容器查看时间 d…

【加分二叉树】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 30; int a[N]; int f[N][N], root[N][N]; int n; void Print(int i, int j) {if(i j){cout << i << " ";return;}if(i > j) return;int k root[i][j];cout << k …

十大经典排序算法:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、计数排序、基数排序、桶排序

1.排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序…

AWS 使用 Amazon EC2 控制台安装和配置 CloudWatch 代理以添加其他指标如内存

默认情况下&#xff0c;Amazon CloudWatch 提供基本指标&#xff08;例如 CPUUtilization 和 NetworkIn&#xff09;用于监控 Amazon EC2 实例。要收集其他指标&#xff0c;您可以在 EC2 实例上安装 CloudWatch 代理&#xff0c;然后将该代理配置为发出所选指标。您可以使用 Am…

Linux系统中的HTTP协议

目录 一.http1.url和域名2.URL编码&#xff08;Encode&#xff09;和解码&#xff08;Decode&#xff09;4.http协议格式5.http的方法和状态码6.cookie和session 二.https1.加密2.https的方案与MITM3.证书 一.http 1.url和域名 url即统一资源定位符&#xff0c;通常会包括协议…

【JPCS独立出版 | 见刊检索稳定】第二届应用统计、建模与先进算法国际学术会议(ASMA2024,9月27日-29)

由哈尔滨理工大学主办的第二届应用统计、建模与先进算法国际学术会议&#xff08;ASMA2024&#xff09;将于2024年9月27日-29日于中国哈尔滨召开。 会议将围绕应用统计、建模及先进算法等在数学领域中的最新研究成果&#xff0c;为来自国内外高等院校、科学研究所、企事业单位的…

C语言 | Leetcode C语言题解之第375题猜数字大小II

题目&#xff1a; 题解&#xff1a; #include <stdlib.h> #include <stdio.h> #include <stdbool.h> #include <string.h> #include <math.h> #include <limits.h>#define MMAX(a, b) ((a) > (b)? (a) : (b)) #define MMIN(a,…

OpenCV几何图像变换(11)极坐标转换函数warpPolar()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 函数将图像重映射到极坐标或半对数极坐标空间。 极坐标重映射参考 用以下转换来转换源图像&#xff1a; d s t ( ρ , ϕ ) s r c ( x , y ) ds…

别着急面试㊙先背完答案✅offer接到手软

别着急面试㊙先背完答案✅offer接到手软 21/100 保存草稿 发布文章 2401_85378759 未选择任何文件 new 面试大模型岗的小伙伴们最近面试题背的怎么样啦 - 大模型&#xff08;LLM&#xff09;面试题是面试中比较常问到的&#xff0c;今天给大家整理了120个常见的大模型面试题✅…

【惠农网-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

图论:图的遍历(DFS vs. BFS)

文章目录 引言基本概念无向图示例绘制图形 深度优先搜索&#xff08;DFS&#xff09;基本概念可视化 DFS 过程深度优先搜索&#xff08;DFS&#xff09;DFS 应用场景 广度优先搜索&#xff08;BFS&#xff09;基本概念可视化 BFS 过程广度优先搜索&#xff08;BFS&#xff09;应…

有效三角形个数问题

目录 一题目简述&#xff1a; 二思路总结&#xff1a; 21不被认可的暴力破解思路&#xff1a; 22优化后的思路&#xff1a; 221优化后的判断三角形方法&#xff1a; 222 定一动二指针朝内筛选遍历&#xff1a; 三解答代码&#xff1a; 一题目简述&#xff1a; leetcode链…

500以内有好用的开放式耳机推荐吗?五款500以内开放式耳机推荐

作为一个几乎醒了就离不开耳机的人&#xff0c;我经常在思考什么样子的耳机才能做到佩戴无感、不塞耳、没有胀痛&#xff0c;还可以随时为我们提供高品质音乐呢&#xff1f;划拉来&#xff0c;划拉去还是觉得开放式耳机比较适合&#xff0c;它不入耳的设计能够让空气在耳朵流通…

基于大模型 + 知识库的 Code Review 实践

背景 &#x1f4a1; 想法源于在一次 Code Review 时&#xff0c;向 Claude 询问哪种写法代码更优雅得来。当时就想能不能让 AI 帮我们辅助做 Code Review&#xff1f; 痛点 信息安全合规问题&#xff1a;公司内代码直接调 ChatGPT / Claude 会有安全/合规问题&#xff0c;为了…

HR招聘,如何解决面试流程繁琐的问题

要解决面试流程繁琐的问题&#xff0c;就必须要精简和优化招聘流程。比如精简面试环节&#xff0c;制定标准化流程&#xff0c;完善信息管理&#xff0c;对面试环节进行细致梳理之后&#xff0c;尽快识别并去除那些不必要的步骤&#xff0c;这样就能够减少求职者的等待时间&…

零成本搭建个人 APP 和小程序后台

前言 前面也说了&#xff0c;通过 GitHub PagesGitHub Actions 只是解决了动态数据展示&#xff0c;但是要零成本得完成将用户信息存储下来&#xff0c;并实现数据交互呢&#xff1f; 我开始是想用云文档&#xff0c;种种原因&#xff0c;我还是希望有个自己能二次修改的后台…

动态网格交易、科创板做市、股票 CTA……DolphinDB 中高频策略回测实例之股票篇

股票中高频交易是量化交易的重要分支&#xff0c;其核心在于在极短时间内处理大量市场数据&#xff0c;执行多笔交易&#xff0c;从而捕捉细微的价格波动并获取利润。中高频交易策略的成功依赖于精准的算法设计、低延迟的交易系统以及交易程序强大的数据分析能力。作为实盘操作…

【系统架构设计】设计模式

【系统架构设计】设计模式 设计模式概述GoF设计模式Factory MethodAbstract Factory &#xff08;*&#xff09;BuilderPrototype(原型)Singleton&#xff08;*&#xff09;AdapterBridgeComposite(组合)Decorator(装饰)&#xff08;*&#xff09;Facade(外观)&#xff08;*&am…

恢复指定人微信聊天记录,看这里,4种方法帮您找回记录

微信在今天成为了我们日常生活中不可或缺的一部分&#xff0c;它承载着我们的社交、工作乃至生活的点点滴滴。然而&#xff0c;有时出于各种原因&#xff0c;我们可能会选择注销微信账号&#xff0c;但随后又可能因种种原因希望恢复其微信进行使用。那么&#xff0c;微信注销了…