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状态的…...
【Spring从成神到升仙系列 二】2023年再不会 IOC 源码,就要被淘汰了
👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到升仙…...
菜鸟的进阶--手写一个小型dubbo框架
1.rpc调用流程2.组件1.Redis注册中心3.编解码/序列化在本例的Netty通信中,由于每次调用rpc服务都要发送同一个类对象invoker,所以可以使用Protobuf。但是在接受方法调用结果的时候就不行了,因为我们无法提前确定对方方法返回结果的类型&#…...
js逆向爬取某音乐网站某歌手的歌曲
js逆向爬取某音乐网站某歌手的歌曲一、分析网站1、案例介绍2、寻找列表页Ajax入口(1)页面展示图。(2)寻找部分歌曲信息Ajax的token。(3)寻找歌曲链接(4)获取歌曲名称和id信息3、寻找…...
为什么软件测试面试了几个月都没有offer,从HR角度分析
首先,我觉得你在软件测试面试的过程中,逻辑比较混乱的最大一个原因是,说明你没有形成一个一个整体的体系。 导致你说的时候很多东西都杂乱无章。 我个人认为软件测试,其实开始首先进行的是一些需求的分析工作,之后呢…...
DC-7 靶场学习
文章目录信息搜集账号密码获取修改密码反弹shell得到flag信息搜集 首先获取目标ip。 arp-scan -l nmap -sP 192.168.28.0/24得到目标ip为: 192.168.28.139先访问页面。 翻译一下。 欢迎来到 DC-7DC-7引入了一些“新”概念,但我会让你弄清楚它们是什么…...
深入理解JavaScript的事件冒泡与事件捕获
前言JavaScript中提供了很多操作DOM的API。事件冒泡和事件捕获是指浏览器中处理DOM元素上事件的两种不同方式。事件冒泡和事件捕获都是JavaScript事件模型中的一部分,可以用来处理事件。对于这个问题,在实际开发中,并不是非常重要,…...
格密码学习笔记(六):格中模运算
文章目录格中取模运算CVP和格的陪集致谢格中取模运算 定义(格的基本区域) P⊂Rn:{Px∣x∈L}\mathcal{P} \subset \mathbb{R}^n : \{ \mathcal{P} \bm{x} | \bm{x} \in \mathcal{L} \}P⊂Rn:{Px∣x∈L}是Rn\mathbb{R}^nRn的一种划分。 用P\mathcal{P}P对…...
【C++】非常重要的——多态
凡是面向对象的语言,都有三大特性,继承,封装和多态,但并不是只有这三个特性,是因为者三个特性是最重要的特性,那今天我们一起来看多态! 目录 1.多态的概念 1.1虚函数 1.2虚函数的重写 1.3虚…...
发票账单很多?python助你批量完成数据提取
每天面对成堆的发票,无论是税务发票还是承兑单据,抑或是其他各类公司数据要从照片、PDF等不同格式的内容中提取,我们都有必要进行快速办公的能力提升。因此,我们的目标要求就十分明显了,首先要从图片中获取数据&#x…...
[闪存2.1] NAND FLASH特性串烧 | 不了解闪存特性,你能用好闪存产品吗?
前言 为了利用好闪存, 发挥闪存的优势, 以达到更好的性能和使用寿命, 那自然要求了解闪存特性。 闪存作为一种相对较新的存储介质, 有很多特别的特性。 一.闪存的特性 凡是采用Flash Memory的存储设备,可以统称为闪存存储。我们经常谈的固态硬盘(SSD),可以由volatile/…...
WordPress版块隐藏/搜索引擎优化的含义
背景 早期互联网只是用来访问查看,不需要关心谁在访问查看。HTTP是一种无状态的协议,每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,为了标示用户,就出现了Cookie,而Cookie、Token、JWT 都是…...
wordpress 502 bad gateway/收录平台
介绍 跨多个应用程序实例的负载平衡是一种常用的技术,用于优化资源利用率,最大化吞吐量,减少延迟并确保容错配置。 可以使用nginx作为非常有效的HTTP负载平衡器,将流量分配给多个应用服务器,并通过nginx提高Web应用程…...
二手物品交换网站建设/网页制作网站
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。 算法描述: ⒈ 从第一个元素开始,该元素可以认为已经被排序 ⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描 …...
聊城网站建设哪个好/线上销售水果营销方案
近日,在开发时候发现 所有的页面都无法编译, 一查网上资料,原来使用ide的时候javase不包含 jsp-api javax.servlet 等javaee的包,所以用idea去编写jsp或者引用servlet的时候会出现红色呲字样(以idea12为例)…...
海西州商城网站建设/成都网站seo报价
Vscode中不再支持JDK8怎么办发布时间:2020-08-13 16:25:31来源:亿速云阅读:983作者:小新这篇文章主要介绍Vscode中不再支持JDK8怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们…...
珠宝店网站项目网页设计/荆州百度推广
<el-input-number v-model"num" :min"1" :max"10" label"描述文字"></el-input-number> 当num设置为 null 或者 "" 都不能将输入框的值变为空 后来发现 将num 设置为 undefined...