Nginx常见用法
一、Niginx是什么?
- Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
- Niginx是一款轻量级的web服务器/反向代理器,
- Nginx是高性能的HTTP和 反向代理的web服务器,处理高并发的能力十分强大,能够经受高负载的考验,高达5万个并发连接数。
- Nginx支持热部署,启动简单,可以做到 7 * 24小时不间断运行,几个月都不需要重新启动。
- Nginx采用 多进程(单线程)&多路IO复用模型,一个master进程和多个worker进程,woker进程的数量一般和CPU数量一致
二、Nginx的反向代理(正向代理)
解释一下:
正向代理: 我们平时需要访问国外的浏览器是不是很慢,比如我们要看推特,看GitHub等等。我们直接用国内的服务器无法访问国外的服务器,或者是访问很慢。所以我们需要在本地搭建一个服务器来帮助我们去访问。那这种就是正向代理。(浏览器中配置代理服务器)
反向代理: 那什么是反向代理呢。比如:我们访问淘宝的时候,淘宝内部肯定不是只有一台服务器,它的内部有很多台服务器,那我们进行访问的时候,因为服务器中间session不共享,那我们是不是在服务器之间访问需要频繁登录,那这个时候淘宝搭建一个过渡服务器,对我们是没有任何影响的,我们是登录一次,但是访问所有,这种情况就是 反向代理。对我们来说,客户端对代理是无感知的,客户端不需要任何配置就可以访问,我们只需要把请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的地址。(在服务器中配置代理服务器)
三、Nginx的负载均衡
什么是负载均衡?
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
简单来说就是:现有的请求使服务器压力太大无法承受,所有我们需要搭建一个服务器集群,去分担原先一个服务器所承受的压力,那现在我们有ABCD等等多台服务器,我们需要把请求分给这些服务器,但是服务器可能大小也有自己的不同,所以怎么分?如何分配更好?又是一个问题。
3.1 Nginx提供的三种负载均衡的方式:
- 轮询法(默认方法)
每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除宕机的服务器。# 服务器三台server1 server2 server3请求过来,会按照时间顺序逐一转发 第一次请求 server1 第二次请求 server2 第三次请求 server3 第四次请求 server1 第五次请求 server2 第六次请求 server3 。。。# 服务器三台 server1 server2 server3请求过来,会按照时间顺序逐一转发 第一次请求 server1 第二次请求 server2 第三次请求 server3 第四次请求 server1 第五次请求 server2 第六次请求 server3 。。。
- weight权重模式(加权轮询)
指定轮询的几率,weight和访问比例成正比,用于后端服务器性能不均的情况。
这种方式比较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源、权重越大。被访问的概率越大# 服务器三台 server1 1 server2 1 server3 3请求过来,会按照时间顺序逐一转发 第一次请求 server1 第二次请求 server2 第三次请求 server3 第四次请求 server3 第五次请求 server3 第六次请求 server1 。。。
- ip_hash
上述方式存在一个问题,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一台,那么已经登录某个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然不妥。
我们可以采用ip_hash指令解决这个问题,如果用户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题!
四、Nginx的动态分离
Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项针对PHP的动静分离:静态页面交给Nginx处理,动态页面交给PHP-FPM模块或Apache处理。在Nginx的配置中,是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式
目前,通过使用Nginx大大提高了网站的响应速度,优化了用户体验,让网站的健壮性更上一层楼!
五、Nginx的安装
yum install nginx
配置文件
user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;events {worker_connections 1024;
}http {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 4096;include /etc/nginx/mime.types;default_type application/octet-stream;# Load modular configuration files from the /etc/nginx/conf.d directory.# See http://nginx.org/en/docs/ngx_core_module.html#include# for more information.include /etc/nginx/conf.d/*.conf;add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Headers X-Requested-With;add_header Access-Control-Allow-Methods GET,POST,OPTIONS;server {listen 80;listen [::]:80;server_name _;# root /root/xj/data/mysite;root /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2;
# listen [::]:443 ssl http2;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }}
启动nginx
systemctl start nginx
访问80端口,效果如下:
六、Nginx常用命令
whereis nginx # 查看nginx路径
nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man3/nginx.3pm.gz /usr/share/man/man8/nginx.8.gz启动:/user/sbin/nginx
指定文件启动:/user/sbin/nginx -c /etc/nginx/nginx.conf
停止:/user/sbin/nginx -s stop
安全退出:/user/sbin/nginx -s quit
重新加载:/user/sbin/nginx -s reload 如果修改了配置文件,就需要重新加载 或者:
systemctl start nginx
systemctl restart nginx
systemctl stop nginx
七、Nginx文件结构
... #全局块events { #events块...
}http #http块
{... #http全局块server #server块{ ... #server全局块location [PATTERN] #location块{...}location [PATTERN] {...}}server{...}... #http全局块
}
-
1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
user nobody; # nginx运行的用户身份,一般要么注释掉,要么把nobody 改成 www 或 nginx worker_processes auto; # 工作进程数,(如果是双核4线程,可以设置为4,一般建议和CPU的逻辑核数量一致) error_log /var/log/nginx/error.log; # 全局指定nginx错误日志的存放目录 pid /run/nginx.pid; # 指定nginx的pid文件目录
-
2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
worker_connections 1024; # 最大可以调整到100,000以上, nginx的最大并发连接数 = worker_processes * worker_connections(进程数*连接数)
-
3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
# 导入mime.types模块,让nginx能够识别各种各样的文件资源 include mime.types; # nginx默认识别的mime.types,默认采用二进制数据格式。 default_type application/octet-stream; # 设置客户端访问nginx的访问日志格式 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 logs/access.log main; # Nginx在进行数据传输,会调用sendfile()函数, Linux 2.0+ 以后的推出的一个系统调用。 # 对比一般的数据的网络传输sendfile会有更少的切换和更少的数据拷贝。 sendfile on; tcp_nopush on; # 客户端保持连接时间 #keepalive_timeout 0; keepalive_timeout 65; # 开启网络传输的数据gzip压缩[会额外消耗一定的cpu资源,但是会节约大量的出口带宽来提高访问速度,gzip压缩算法的使用会带来一定的安全隐患,不建议压缩图片和大文件] gzip on; #低于1kb的资源不压缩 gzip_min_length 1k; # 设置压缩级别,级别范围:1~9,数字越大压缩率越高,同时消耗cpu资源也越多,建议设置在5左右。 gzip_comp_level 5; # 指定压缩哪些MIME类型的静态资源,多个空格隔开。不建议压缩图片,视频等二进制文件 gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css; # web站点的虚拟主机,类似python的虚拟环境,这里的配置,会让nginx自动提供一个站点给外界访问 # 指定包含的配置文件 # 可以设置多个 server 模块 include /etc/nginx/conf.d/*.conf;
-
4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
server {# 站点的访问端口,要允许外界访问,还需要设置防火墙listen 80;# 站点的访问域名地址server_name www.luffycity.dabanyu.com;#charset koi8-r;#access_log logs/host.access.log main;# 地址模式匹配,location后面的是访问url路径,相当于django的正则路由一样,# 地址匹配成功以后,则会调用当前花括号的配置信息location / {# root 表示当前站点所在目录root html;# index 指定默认首页index main.html main.htm;}...}
-
5、location块:配置请求的路由,以及各种页面的处理情况。
在proxy_pass 中的代理url后加上/,代理转发的url中就不会带着location中匹配路径; 如果后面没有/,代理转发的url中就会带上location中的匹配路径
我们访问 http://my.yemao.com/proxy/index.html,其实是访问到了 http://test.yemao.com/index.html正在上传…重新上传取消
我们访问 http://my.yemao.com/proxy/index.html,其实是访问到了 http://test.yemao.com/proxy/index.html。这里将 location 中 匹配的 proxy 也自动加到了 代理转发的地址后面
如果nginx代理的三个服务器都要在端口*:80上监听。那么nginx首先决定那个服务器应该处理请求:
[注解] listen 监听某个ip和端口,并根据传来的请求中“Host”字段匹配server_name。然后转给server_name 服务器去处理
nginx是根据请求中的"Host"
字段来决定应当将这个客户端的请求转发给哪一个web服务器,这个"Host"
的值应当是与某一个server_name
相匹配的。
但是, 如果其值与任何服务器的 server_name
都不匹配,或者请求根本不包含"Host"
字段,则nginx会将请求转发到此端口的默认服务器。 在上面的配置中,默认服务器是第一个 ,这是nginx的标准默认行为。
server {listen 80; # 监听端口server_name example.org www.example.org; # 服务器名称...
}server {listen 80;# 监听端口server_name example.net www.example.net;# 服务器名称...
}server {listen 80;# 监听端口server_name example.com www.example.com;# 服务器名称...
}
它也可以使用listen指令中的default_server参数明确设置哪个服务器应该是默认的,如下所示 example.net www.example.net 将是默认的 server_name:如果一个server_name
都匹配不上,则会将请求转给默认服务器
server {listen 80 default_server; # 监听端口, 将此虚拟服务器设置为默认服务器server_name example.net www.example.net; # 服务器名称...
}
请注意,默认服务器是监听端口(listen)的属性,而不是 server_name 的属性。
如果客户端的请求中没有"Host"字段,那么我们可以定义配置文件,来扔掉这类的客户端请求。
如下的配置中,server_name 设置为一个空字符串,它将匹配没有“Host”头字段的请求,并返回一个特殊的nginx非标准代码444来关闭连接。
server {listen 80;server_name "";return 444;
}
现在我们知道了nginx
配置中是如何选择服务器来处理请求的了
那么在指定的服务器中,由哪一个location
来处理请求呢?需要通过location的匹配规则来决定
匹配location
的过程如下:
location匹配命令
-
~ : 表示执行一个正则匹配,区分大小写
-
~*: 表示执行一个正则匹配,不区分大小写
-
^~: 表示普通字符匹配,如果该选项匹配,则只匹配该选项,其他选项不匹配。一般用于匹配目录
-
= : 表示普通字符精确匹配
-
@: 定义一个自命名的location用于内部定向时使用,列如 error_page, try_files
规则优先级:
= 高于 ^~ 高于 ~* 等于 ~ 高于 /
=前缀的指令严格匹配这个查询。如果找到,停止搜索。
所有剩下的常规字符串,最长的匹配。如果这个匹配使用^〜前缀,搜索停止。
正则表达式,在配置文件中定义的顺序。
如果第3条规则产生匹配的话,结果被使用。否则,使用第2条规则的结果。
首先,nginx
不管location
的顺序,而是从location
中找到与请求的url
最匹配、最具体的这个location
前缀。
/
根目录能够匹配到所有的请求,也就是说,所有的请求都可以由 /
根目录的这个location
来处理。 因此 /
根目录的location
是在没有其他的location
匹配这个url
的时候,才会由它处理该请求。
其次,nginx
检查由正则表达式组成的location
。一旦找到匹配的location
, 则停止查找,由此location
来处理该请求。
server {listen 80; # 监听本机的80端口server_name example.org www.example.org; # 服务器名root /data/www; location / { # 这里的 / 表示匹配所有的路径index index.html index.php;}location ~* \.(gif|jpg|png)$ { # 这里表示为。不区分大小写的正则匹配,匹配以gif、jpg、png结尾的请求expires 30d;}location ~ \.php$ { # 这里的正则表示,匹配以php结尾的请求fastcgi_pass localhost:9000;fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;include fastcgi_params;}
}
举几个例子看看上面的nginx配置是如何处理请求的吧。
-
请求url
“/logo.gif”
首先与location 前缀“/”
匹配,也与正则表达式“.(gif|jpg|png)”
匹配,因此,它由第二个location处理。 使用指令"root" /data/www 将请求映射到文件/data/www/logo.gif
,并将该文件返回给客户端。 -
请求url
“/index.php”
首先和lcoation 前缀"/“
匹配,也与正则表达式“.php$ "
匹配,因此,由第三个location来处理请求。请求被传递给监听localhost:9000的FastCGI服务器。 fastcgi_param指令将FastCGI参数SCRIPT_FILENAME设置为“/data/www/index.php”
,FastCGI服务器执行该文件。 变量等于指令的值(),变量 fastcgi_script_name等于请求URI (”/index.php”)。 -
请求
“/about.html”
仅与location前缀 “/” 匹配,因此,该请求由此locatoin处理。 使用 “root” 指令(值 /data/www)将请求映射到文件/data/www/about.html
,并将文件返回给客户端。 -
请求
“/”
仅与 location前缀 “/” 匹配,因此该请求由此location处理。然后索引指令根据其参数和 “root” 指令的值/data/www查找文件是否存在。 如果文件/data/www/index.html
不存在,并且文件/data/www/index.php
存在,则指令执行内部重定向到“/index.php”
,并且nginx再次搜索位置 如果请求是由客户发送的。 正如我们之前看到的,重定向的请求最终将由FastCGI服务器处理。
需要注意的是,只匹配请求url中的非参数部分
。这是因为,参数可以有很多种方式给出,例如:
/index.php?user=john&page=1
/index.php?page=1&user=john
/index.php?page=1&something+else&user=john # 查询字符串中的内容种类太多了,不好匹配
八、Nginx参数详解
worker_processes
woker_processes 1|auto; # 指定nginx工作时的进程数,设置值小于CPU的核数
worker_connections
worker_connections 1024 # 设置Nginx的最大连接数
keepalive_timeout
keepalive_timeout 65; # http连接超时时间,默认是65s,当需要上传大文件时,避免文件上传过程中断开连接,导致文件上传失败
gzip
gzip on; # 对网络传输的数据内容进行压缩
upstream
# 默认为轮询
upstream backend{server 101.35.241.220:8001;server 150.158.153.179:8002;server 42.194.147.234:8003;}第一个请求 101.35.241.220:8001
第二个请求 150.158.153.179:8002
第三个请求 42.194.147.234:8003
...# 设置权重
upstream backend{server 101.35.241.220:8001 weight=1;server 150.158.153.179:8002 weight=2 max_fails=2 fail_timeout=2;;server 42.194.147.234:8003 weight=1 max_fails=2 fail_timeout=1;}# 请求会按照权重进行转发
第一个请求 101.35.241.220:8001
第二个请求 150.158.153.179:8002
第三个请求 150.158.153.179:8002
第四个请求 42.194.147.234:8003
第四个请求 101.35.241.220:8001
。。。
max_fails=2:允许请求失败的次数,默认为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误。
fail_timeout=1:在经历了max_fails次失败后,暂停服务的时间,max_fails可以和fail_timeout一起使用。# 热备和下线
upstream backend{server 101.35.241.220:8001;server 150.158.153.179:8002 down;server 42.194.147.234:8003 backup;}
# 150.158.153.179:8002 down 不参与转发
# 42.194.147.234:8003 backup 只有在主服务器挂掉,才会生效
server
server {listen 80; # 监听的端口server_name localhost; # 声明server_name,Host请求头命中server_name才会走这个server#charset koi8-r;#access_log logs/host.access.log main;location / { # 所有的请求都在走这里root html; # 指定根目录index index.html index.htm;proxy_pass http://backend; # 请求转发proxy_redirect default;proxy_set_header Host $host;proxy_set_header X_Real_IP $remote_addr;proxy_set_header X_Forwarded_For $proxy_add_x_forwarded_for;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}
}
注意点
# root
location ^~ /t/ {root /www/root/html/;
}
如果一个请求的url是/t/a.html。web服务器会返回服务器上/www/root/html/t/a.html的文件内容# alias
location ^~ /t/ {alias /www/root/html/new_t/;
}
如果一个请求是/t/a.html。则web服务器会返回服务器上/www/root/html/new_t/a.html使用alias的时候,目录名后面一定要加‘/’
alias在使用正则匹配的时候,必须捕获要匹配的内容并在指定的内容处使用
alias只能位于location中,root可以不放在lication中
如果root在全局中和location中都存在,则优先location中的root
location
# 配置该服务的访问规则,同一个server可以配置多个location
= 表示精确匹配
^~ 表示uri以指定字符或者字符串开头的前缀匹配,不是正则匹配,一旦匹配则不在查找其他匹配项
~ 表示区分大小写的匹配大小写的正则匹配
~* 表示不区分大小写的正则匹配
/ 表示通用匹配,如果没有其他匹配,任何请求都会匹配到规则优先级:
= 高于 ^~ 高于 ~* 等于 ~ 高于 /
九、负载均衡
http {upstream myapp1 {server srv1.example.com;server srv2.example.com;server srv3.example.com;}server {listen 80;location / {proxy_pass http://myapp1; # 将请求转发到 定义的服务器里列表中}}
}
在上面的示例中,在srv1-srv3上运行了3个相同应用程序的实例。 如果没有指明配置负载均衡的方法,则默认为轮询方式实现负载均衡。
所有请求都代理到服务器组myapp1,nginx应用HTTP负载平衡来分发请求。
要为HTTPS而不是HTTP配置负载均衡,只需使用“https”作为协议。更多详情见 nginx负载均衡官方文档 Using nginx as HTTP load balancer
nginx 配置文件的含义见 菜鸟教程-nginx Nginx 配置详解 | 菜鸟教程
nginx 负载均衡,反向代理 : Nginx 反向代理与负载均衡详解 | 菜鸟教程
Nginx 服务器安装及配置文件详解 https://www.cnblogs.com/bluestorm/p/4574688.html 根据上面了解到的知识,修改 /usr/local/nginx/conf/nginx.conf 为如下:
########### 每个指令必须有分号结束。#################
user root; # 配置用户或用户组,否则有可能会出错
worker_processes auto; # 允许生成的进程数,默认为1
error_log /var/log/nginx/error.log warn; # 指定日志路径,级别。这个设置可以放入全局块,http块,server块,级别依次为:debug|info|notice|warn|error|crit|alert|emerg
pid /run/nginx.pid; # 指定nginx进程运行文件存放地址# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;events { # events块worker_connections 1024; # 最大连接数,默认为512
}http { # http块include /etc/nginx/mime.types; # 文件扩展名与文件类型映射表default_type application/octet-stream; # 默认文件类型,默认为text/plain# 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; # 允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。# tcp_nopush on; # tcp_nodelay on;keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。# types_hash_max_size 2048;# 设定负载均衡后台服务器列表, backend可以修改为其它名字upstream backend {#ip_hash; # 指定负载均衡的方式,3种,默认为轮询。server 192.168.10.100:8080 max_fails=2 fail_timeout=30s ; # 30秒错误2次,这台服务器就挂掉server 192.168.10.101:8080 max_fails=2 fail_timeout=30s ;server 127.0.0.1:8027;server 127.0.0.1:8028;server 127.0.0.1:8029;}server { # server块listen 80; # 通过80端口访问nginx时server_name localhost; # 服务器名,监听地址location / { # location块,# 请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。对以 / 所有地址进行负载均衡root html; # 定义服务器的默认网站根目录位置。如果locationURL匹配的是子目录或文件,root没什么作用,一般放在server指令里面或/下# index index.html; #定义路径下默认访问的文件名,一般跟着root放# proxy_pass http://mysvr; 请求转向backend定义的服务器列表,即反向代理,设置被代理服务器的端口或套接字以及URL# deny 127.0.0.1; #拒绝的ip# allow 172.18.5.54; #允许的ip include uwsgi_params;uwsgi_pass backend; # 非集群设置的是uWSGI套接字地址,集群则直接使用负载均衡组名# uwsgi_pass 127.0.0.1:5000; # 非集群时使用,如果配合uwsgi使用,则这里要和uwsgi.ini中的socket一致}location /static/ { # 请求静态文件时,将返回/home/myproject/static/xxx alias /home/myproject/static; }error_page 404 /404.html; # 错误页location = /40x.html {}error_page 500 502 503 504 /50x.html; # 错误页location = /50x.html {}}}
相关文章:

Nginx常见用法
一、Niginx是什么? Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Niginx是一款轻量级的web服务器/反向代理器,Nginx是高性能的HTTP和 反向代理的web服务器,处理高并发的能力十分强大,…...

MySQL存储引擎和日志管理
MySQL存储引擎和日志管理一、存储引擎的概念1、Myisam的特点2、Myisam表支持 3 种不同的存储格式3、innodb4、死锁5、查看系统支持的存储引擎6、查看表使用的存储引擎7、修改存储引擎8、通过 create table 创建表时指定存储引擎二、日志管理1、错误日志2、通用查询日志3、慢查询…...

Arduino 驱动DS1307时钟模块使用介绍
Arduino 驱动DS1307时钟模块使用介绍 🔖DS1307时钟模块 📍DS1307时钟模块资料 https://pan.baidu.com/s/1mtXruLAktZj7UDhFD54BNw 提取码:d9xh 📋模块简介:DS1307 I2C实时时钟芯片(RTC) 24C32 32K I2C EEPROM存储器 解决DS1307带备用电池不能读写的问题。 充满电后,…...
为什么 Python 没有 main 函数?
众所周知,Python中没有所谓的main函数,但是网上经常有文章提到“ Python的main函数”和“建议编写main函数”。 其实,可能他们是想模仿真正的main函数,但是许多人都被误导(或误解),然后编写了非…...

【无标题】使用Bibtex4word 整理毕业论文参考文献
Bibtex4Word使用一览需要安装和配置的软件texLiveBibtex4word需要安装和配置的软件 texLive 这个就不多说啦,大家自己找教程安装吧,因为我之前装过这一系列所以就不再来一遍了,但是有两条配置需要注意! 添加环境变量 key: BIB…...

19--网络API(java版)
什么是网络API在一个网站里面发起https请求是很常见的,但是,由于微信小程序是腾讯内部的产品,不能直接打开一个外部的链接,例如,您在微信小程序里面无法直接打开网站,但是,在做小程序开发的时候…...

ElasticSearch - 分片内部原理之动态更新索引、近实时搜索、持久化变更、段合并
文章目录01. ElasticSearch 倒排索引是什么?02. ElasticSearch 倒排索引为什么是不可变的?03. ElasticSearch 索引文档原理?04. ElasticSearch 如何动态更新索引?05. ElasticSearch 文档的新增、删除、更新?06. Elasti…...

模拟数据采集卡之ADCTDC 模拟时间/数字转换器组合应用选型指南
简介 产品组合包括一系列多功能时间到数字转换器(TDC)和模数转换器(ADC)。我们的许多客户的应用场景依赖于对飞行时 间(TOF)的测量。该系列产品非常适合用于质谱系统(TOF-MS),光学相干断层扫描(OCT),荧光寿命成像显微镜(FLIM), 时间相关单光子…...

R语言编程基础
文章目录安装运算符判断函数递归安装 根据自己的操作系统,下载R语言环境后,安装,并将安装路径加入到环境变量,即可从命令行进入R环境 >rR version 4.2.2 (2022-10-31 ucrt) -- "Innocent and Trusting" Copyright …...

2023-03-15:屏幕录制并且显示视频,不要用命令。代码用go语言编写。
2023-03-15:屏幕录制并且显示视频,不要用命令。代码用go语言编写。 答案2023-03-15: 使用moonfdd/ffmpeg-go和moonfdd/sdl2-go库来实现屏幕录制并显示视频,大体流程如下: 1.使用libavdevice库中的AVInputFormat&…...

STM32外设-DMA
1. 简介 DMA(Direct Memory Access)—直接存储器存取,是单片机的一个外设,它的主要功能是用来搬数据,但是不需要占用 CPU,即在传输数据的时候, CPU 可以干其他的事情,好像是多线程一样。数据传输支持从外设…...

【面试题】面试官:如果后端给你 1w 条数据,你如何做展示?
最近一位朋友参加阿b的面试,然后面试官问了她这个问题,我问她咋写的,她一脸淡定的说:“虚拟列表。”大厂面试题分享 面试题库前后端面试题库 (面试必备) 推荐:★★★★★地址:前端面…...

第十二届蓝桥杯省赛详解
试题A:空间 1B是8位,32位二进制数占用4B空间,1MB2^10KB2^20B 那么可以存放32位二进制数的个数为256*2^20*8/3267108864 试题B:卡片 分析:因为数据只有2021,所以直接模拟即可 结果为:3181&…...
ssh创建秘钥对
1. 使用ssh-keygen 生成秘钥对 [root6zix89b87qmvuv ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): 按回车键或设置密钥的存储路径 Enter passphrase (empty for no passphrase): 按回车键或设置密钥的存…...
JS中sort()方法返回值?
参考 https://segmentfault.com/q/1010000043489928 精辟解释 就是说 sort() 会修改原数组项的排序,sort() 结束后会返回一个数组结果,这个结果其实就是原数组。并不是说会返回一个新的数组。 原理讲解 JS 分为栈内存和堆内存,栈内存可以…...

07从零开始学Java之如何正确的编写Java代码?
作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者前言在上一篇文章中,壹哥带领大家开始编写了第一个Java案例,在我们的cmd命令窗口中输出了”Hello World“这…...
Python学习笔记14:网络编程
网络编程 几个网络模块 模块socket # 简单的服务器 import socket s socket.socket() host socket.gethostname() port 1234 s.bind((host, port))s.listen(5) while True: c, addr s.accept() print(Got connection from, addr) c.send(Thank you for connecting)c.…...

初入了解——什么是VUE
个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…...
代码规范(C++)
1.命名规范 1.目录/文件 字母、数字、下划线构成,不同单词用下划线隔开。 2.函数/接口 小驼峰命名法。 3.命名空间 字母、数字、下划线构成,不同单词用下划线隔开,但是尽量只使用一个单词。 4.结构体/类 大驼峰命名法,不包…...
React教程详解四(hooks、pureComponent、Context通信、错误边界、children props与render props)
前言 hooks是react16.8.0版本新增加的新特性/新语法,最大的特点是可以在开发者在函数组件中使用state以及其它React特性,下面分别对其介绍~ React.useState() state hook能让函数组件也可以拥有state状态,方便其进行state状态的…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
raid存储技术
1. 存储技术概念 数据存储架构是对数据存储方式、存储设备及相关组件的组织和规划,涵盖存储系统的布局、数据存储策略等,它明确数据如何存储、管理与访问,为数据的安全、高效使用提供支撑。 由计算机中一组存储设备、控制部件和管理信息调度的…...

工厂方法模式和抽象工厂方法模式的battle
1.案例直接上手 在这个案例里面,我们会实现这个普通的工厂方法,并且对比这个普通工厂方法和我们直接创建对象的差别在哪里,为什么需要一个工厂: 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类: 两个发…...
JavaScript 标签加载
目录 JavaScript 标签加载script 标签的 async 和 defer 属性,分别代表什么,有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …...

react更新页面数据,操作页面,双向数据绑定
// 路由不是组件的直接跳转use client,useEffect,useRouter,需3个结合, use client表示客户端 use client; import { Button,Card, Space,Tag,Table,message,Input } from antd; import { useEffect,useState } from react; impor…...