当前位置: 首页 > news >正文

NGINX相关配置

全局配置

NGINX配置信息

nginx 官方帮助文档:http://nginx.org/en/docs/Nginx的配置文件的组成部分:
主配置文件:/conf/nginx.conf(/nginx/conf/nginx.conf)
子配置文件: include conf.d/*.conf

#事件驱动相关的配置   同步
event {
worker_connections 1024; #一次允许1024个执行...
} #http/https 协议相关配置段
http {
server{
location{}
}...
}#默认配置文件不包括下面两个块
#mail 协议相关配置段
mail {...
}#stream 服务器相关配置段
stream {负载均衡...
}

修改启动进程数

lscpu |grep -i cpu  #查看cup核数
[root@localhost ~]vim /apps/nginx/conf/nginx.conf
#开启 两核
#user  nobody;
worker_processes  4;  #根据CPU核数修改
worker_processes auto;  #如果设置为auto  就是你真实的cpu数量
关闭或修改版本
关闭版本
vim /apps/nginx/conf/nginx.conf
#修改配置文件  放在   http语句中
http {server_tokens  off; }nginx -s reload
修改版本
#在安装包中
[root@localhost core] vim /opt/nginx-1.18.0/src/core/nginx.h
#define NGINX_VERSION      "9527"
#define NGINX_VER          "http/" NGINX_VERSION[root@localhost core] vim /opt/nginx-1.18.0/src/http/ngx_http_header_filter_module.c 
static u_char ngx_http_server_string[] = "Server: beijing " CRLF;[root@localhost nginx-1.18.0]./configure --prefix=/apps/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
[root@localhost nginx-1.18.0]make && make install
修改pid文件路径
mkdir /apps/nginx/run/ #创建目录
vim /apps/nginx/conf/nginx.conf #修改配置文件
pid   /apps/nginx/run/nginx.pid; #找到 pid的位置修改 
[root@localhost ~]#nginx -s reload 
CPU与work进程绑定

默认Nginx是不进行进程绑定的,但是绑定了以后可以可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。

CPU序号:
CPU MASK: 00000001:0号CPU00000010:1号CPU................10000000:7号CPUps axo pid,cmd,psr,ni|grep -v grep |grep nginx|sort -n  #这个命令可以查看每个进程占用的是那个CPU
[root@localhost ~]vim /apps/nginx/conf/nginx.conf
worker_cpu_affinity 00000001 00000010 00000100 00001000;
[root@localhost ~]nginx -s reload 
进程的优先级
nice的优先级范围是:-20~19[root@localhost ~] ps axo pid,cmd,psr,ni|grep nginx|sort -n #查看优先级
[root@localhost ~]vim /apps/nginx/conf/nginx.conf
worker_priority -20; #将优先级调为-20
[root@localhost ~]nginx -s reload 
调试work进程打开的文件个数
[root@localhost ~]vim /apps/nginx/conf/nginx.conf
worker_rlimit_nofile 65536; #一次允许65536访问
events {worker_connections  20000;  #最大连接数
}
[root@localhost security]#nginx -s reload临时修改
[root@localhost ~]#ulimit -n 60000  #只修改当前窗口
永久修改
[root@localhost security]#vim /etc/security/limits.conf #将下面内容直接写在文件末尾
*                soft    core            unlimited
*                hard    core            unlimited
*                soft    nproc           1000000
*                hard    nproc           1000000
*                soft    nofile          1000000
*                hard    nofile          1000000
*                soft    memlock         32000
*                hard    memlock         32000
*                soft    msgqueue        8192000
*                hard    msgqueue        8192000永久修改后需要重启reboot,才能生效,临时的不用重启[root@localhost security]ulimit -a #可以查看
服务前后台运行
一般都是后台运行,前台运行容器中会用到
[root@localhost ~]vim /apps/nginx/conf/nginx.conf
daemon off;  #关闭后台运行
root@localhost security]nginx -s reload
ecent部分

在Nginx的主配置文件中,events部分用于配置Nginx服务器的事件模块相关参数,控制Nginx服务器在处理连接请求时的行为。

常见的events配置参数:

worker_connections:指定每个工作进程可以同时处理的最大连接数。

multi_accept:指定是否一次接受多个连接。默认情况下,Nginx在每个循环中只接受一个连接,但设置multi_accept为"on"后可以同时接受多个连接。

use:指定Nginx使用的事件模块。常见的事件模块有"epoll"、"kqueue"和"eventport"等。

events {worker_connections 1024;multi_accept on;use epoll;
}
#指定了每个工作进程可以处理的最大连接数为1024,启用了多个连接同时接受,以及使用了epoll事件模块

以下内容是在yum安装下NGINX的相关配置

HTTP设置
http协议配置说明
include mime.types; #导入支持的文件类型,是相对于/apps/nginx/conf的目录
sendfile on;#自定义优化参数
gzip on; #开启文件压缩
listen 80; #设置监听地址和端口
server_name localhost; #设置server name
charset koi8-r; #设置编码格式,默认是俄语格式,建议改为utf-8
error_page   500 502 503 504 /50x.html; #定义错误页面
mime

在Nginx中,“mime” 是一种配置指令,用于设置 MIME 类型与文件扩展名的映射关系。
此项为支持的 文件格式,如果不支持的格式 会自动帮你下载,如果支持 就会显示在网页上

vim  /etc/nginx/mime.types
#查看当前Nginx服务器配置的MIME类型列表
server下的root指令

在Nginx配置中,"root"指令用于设置服务器块的根目录,即指明软件的根目录。
通常,"root"指令位于Nginx配置文件中的服务器块中。

server {listen 80;server_name example.com;root /var/www/html;#指定了服务器块的根目录为/var/www/htmllocation / {...}  ...
}
server块构建虚拟主机
基于域名
[root@localhost ~] vim /etc/nginx/nginx.conf
#修改配置文件 要放在  http 模块里include             /etc/nginx/mime.types;include             /apps/nginx/conf.d/*.conf;[root@localhost ~] cd /etc/nginx/conf.d[root@localhost conf.d] vim test1.conf #编写子配置文件server {listen 80;server_name www.test1.com; #域名root /data/nginx/html/test1/; #网页目录位置
}
[root@localhost conf.d] vim test2.conf
server {listen 80;server_name www.test2.com;root /data/nginx/html/test2/;
}构建数据文件夹
[root@localhost ~] mkdir -p /data/nginx/html/test1
[root@localhost ~] mkdir -p /data/nginx/html/test2
构建数据文件
[root@localhost ~] echo test1 > /data/nginx/html/test1/index.html
[root@localhost ~] echo test2 > /data/nginx/html/test2/index.html[root@localhost conf.d] nginx -s reload去第二台机器修改/etc/hosts 文件
[root@localhost ~] vim /etc/hosts
192.168.65.110   www.test1.com
192.168.65.110   www.test2.com
[root@localhost ~] curl www.test1.com
test1
[root@localhost ~] curl www.test2.com
test2
基于端口
[root@localhost conf.d] vim test1.confserver {listen 80;server_name www.test1.com; #域名root /data/nginx/html/test1/; #网页目录位置
}
[root@localhost conf.d] vim test2.conf
server {listen 8080;server_name www.test2.com;root /data/nginx/html/test2/;
}
[root@localhost conf.d] nginx -s reload第二台机器
[root@localhost ~] curl 192.168.65.110
test1
[root@localhost ~] curl 192.168.65.110:8080
test2
基于ip地址
[root@localhost conf.d] vim test1.confserver {listen 129.168.65.110;server_name www.test1.com; #域名root /data/nginx/html/test1/; #网页目录位置
}
[root@localhost conf.d] vim test2.conf
server {listen 192.168.65.103;server_name www.test2.com;root /data/nginx/html/test2/;
}
[root@localhost conf.d]#nginx -s reload[root@localhost conf.d]#ifconfig ens33:0 192.168.65.103/24  #添加虚拟网卡第二台机器
[root@localhost ~]#curl 192.168.65.110
test1
[root@localhost ~]#curl 192.168.65.103
test2
alias别名
server {listen 80;server_name www.test.com;location /nwes {root /data/nginx/html/ag/;#相当于追加  将 文件夹news追加到/data/nginx/html/ag/news}location /study{alias /mnt/nginx/sports/;#相当于替换 你访问 study  就是访问/mnt/nginx/sports}
}
location
http://nginx.org/en/docs/http/ngx_http_core_module.html#location   #官方文档#匹配优先级从高到低:
=, ^~, ~/~*, 不带符号=              	#用于标准url前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立即处理请求
^~            	#用于标准url前,表示包含正则表达式,并且匹配以指定的正则表达式开头,对URI的最左边部分做匹配检查,不区分字符大小写
~              	#用于标准url前,表示包含正则表达式,并且区分大小写
~*            	#用于标准url前,表示包含正则表达式,并且不区分大写
不带符号   	  	 #匹配起始于此url的所有的url\             	#用于标准url前,表示包含正则表达式并且转义字符。可以将 . * ?等转义为普通符号正则表达式匹配:location ~* /A.?\.jpg { #匹配 包含A后面一个或没有字符,已.jpg结尾的图片root /opt/nginx/html/image;}这个例子是区分大小写的,一般将大写或小写文件复制一次,避免出现问题
access模块
http://nginx.org/en/docs/http/ngx_http_access_module.html #官方文档[root@localhost nginx-1.18.0] ./configure --help |grep access
# 可以去源码包中 过滤  access模块  自带 不想要可以 without 去掉 --without-http_access_module       disable ngx_http_access_module--http-log-path=PATH               set http access log pathname--without-stream_access_module     disable ngx_stream_access_module

子配置文件谁优先级高谁设置的生效,按开头字母前后优先生效

配置文件修改(在server内)
server {listen 80;server_name www.test.com;allow 192.168.65.0/24; #允许这个网段访问deny 192.168.65.101;  #不允许这个地址访问location / {root /data/nginx/html/ag;}
}配置文件修改(在location内)
server {listen 80;server_name www.test.com;location / {root /data/nginx/html/ag;allow 192.168.91.0/24;deny 192.168.91.101;}
}
验证模块

火狐浏览器有,谷歌没有

yum -y install httpd tools.x86_64 #安装这个包,这个模块在这个包内
htpasswd
-c  代表新建用户名和密码对应的文件
-b  将密码跟在用户名后
[root@localhost conf.d] htpasswd -bc /data/.httpuser ag 123456 #第一次创建加c 
[root@localhost conf.d] htpasswd -b /data/.httpuser ttg 123456 #非第一次创建
cd /data/nginx/html
mkdir admin
cd admin 
touch index.html
server {listen 80;server_name www.test.com;root /data/nginx/html;location /admin {auth_basic "welcome to ag";auth_basic_user-file /data/.httpuser;}
}

自定义错误页面

格式
error_page code   ... [=[response]]   uri;响应码 					  访问链接
server {listen 80;server_name www.test.com;root /data/nginx/html;error_page 404 /index.html;#出了错  直接跳转到显示主站点}
server {listen 80;server_name www.test.com;root /data/nginx/html;error_page 404 =301 /index.html;}#把错误码 404 指定成302  并跳到主页面:/index.html
日志

自定义日志位置

yum安装的日志文件位置 /var/log/nginx
error_log    file        [level];
固定格式  	  文件路径     日志级别[root@localhost error] vim /etc/nginx/conf.d/test.conf
server {listen 80;server_name www.test.com;root /data/nginx/html;error_page 404 =301 /index.html;access_log /data/nginx/logs/rz-access.log;
}#生成了新的存放日志文件[root@localhost conf.d] nginx -s reload

自定义日志格式

vim /etc/nginx/nginx.conf
log_format access_json '{"@timestamp":"$time_iso8601",''"host":"$server_addr",''"clientip":"$remote_addr",''"size":$body_bytes_sent,''"responsetime":$request_time,''"upstreamtime":"$upstream_response_time",''"upstreamhost":"$upstream_addr",'  '"http_host":"$host",''"uri":"$uri",''"xff":"$http_x_forwarded_for",''"referer":"$http_referer",''"tcp_xff":"$proxy_protocol_addr",''"http_user_agent":"$http_user_agent",''"status":"$status"}';

日志分离

[root@localhost ~] cd /var/log/nginx/
[root@localhost nginx]mv access.log access-old.log
[root@localhost nginx]touch access-new.log
[root@localhost nginx]nginx -s reopen 将两个网站的日志分离
[root@localhost ~] vim/etc/nginx/conf.d/a.conf
server{listen 80;server_name  www.a.com;root /data/nginx/a/;error_log    /data/logs/a_error.log;access_log  /data/logs/a_access.log;
}
[root@localhost ~] vim/etc/nginx/conf.d/b.conf
server{listen 80;server_name  www.b.com;root /data/nginx/b/;error_log    /data/logs/b_error.log;access_log  /data/logs/b_access.log;
}
[root@localhost ~] mkdir /data/logs -p
[root@localhost ~] nginx -t
[root@localhost ~] nginx -s reload
检测文件是否存在
location / {root /data/nginx/html/pc;try_files $uri  $uri.html $uri/index.html /about/default.html;}#你如果 访问一个路径 /kgc   如果没有这个页面   先去找kgc  kgc.html  然后再去找 kgc/index.html    最后再                           找/about/default.html         
长连接
keepalive_timeout timeout [header_timeout];  
#设定保持连接超时时长,0表示禁止长连接,默认为75s,通常配置在http字段作为站点全局配置
keepalive_requests number;  
#在一次长连接上所允许请求的资源的最大数量,默认为100次,建议适当调大,比如:500
可以加在全局或者 server 
作为下载服务器配置
http://nginx.org/en/docs/http/ngx_http_autoindex_module.html #官方文档[root@localhost nginx]# cd conf.d/
[root@localhost conf.d]# vim test.conf
location /download {autoindex on; #开启下载服务器autoindex_exact_size on; #开启确切大小不建议开启autoindex_localtime on;  #使用当地时间limit_rate 1024k; #所有人限速1024k,默认单位是字节数 alias /opt/download;}[root@localhost conf.d]# cd /opt
[root@localhost opt]# mkdir download
[root@localhost opt]# nginx -s reload
[root@localhost opt]# mount /dev/sr0 /opt/download/
mount: /dev/sr0 写保护,将以只读方式挂载

用户上传资料

上传需要借助开发小的程序, 并且程序 5M 和 nginx  10M 都会限制。 两者取最小
client_max_body_size 1m; 
#设置允许客户端上传单个文件的最大值,默认值为1m,上传文件超过此值会出413错误
client_body_buffer_size size; 
#用于接收每个客户端请求报文的body部分的缓冲区大小;默认16k;超出此大小时,其将被暂存到磁盘上的由下面client_body_temp_path指令所定义的位置
client_body_temp_path path [level1 [level2 [level3]]];
#设定存储客户端请求报文的body部分的临时存储路径及子目录结构和数量,目录名为16进制的数字,使用hash之后的值从后往前截取1位、2位、2位作为目录名上传文件大于限制  错误代码413
高级配置

网页的状态页

[root@localhost html]# vim /etc/nginx/conf.d/test.conf
location /status {stub_status;
}
[root@localhost html]# nginx -s reload

Active connections:
当前处于活动状态的客户端连接数,包括连接等待空闲连接数=reading+writing+waiting
accepts:
统计总值,Nginx自启动后已经接受的客户端请求的总数。
handled:
统计总值,Nginx自启动后已经处理完成的客户端请求总数,通常等于accepts,除非有因worker_connections限制等被拒绝的连接
requests:
统计总值,Nginx自启动后客户端发来的总的请求数。
Reading:
当前状态,正在读取客户端请求报文首部的连接的连接数,数值越大,说明排队现象严重,性能不足
Writing:
当前状态,正在向客户端发送响应报文过程中的连接数,数值越大,说明访问量很大
Waiting:
当前状态,正在等待客户端发出请求的空闲连接数,开启 keep-alive的情况下,这个值等于active – (reading+writing)
 

nginx第三方模块
echo模块 https://github.com/openresty/echo-nginx-module编译安装下添加的方法
下载安装包
unzip echo-nginx-module-master.zip  #解压
./configure --prefix=/apps/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 --add-module=/opt/echo-nginx-module-master #到nginx源代码下编译,在编译安装nginx的位置
make && make install
[root@localhost html]# vim /etc/nginx/conf.d/test.conf
location  /hello {echo "hello world ";
}
curl    192.168.65.106/hello
会直接出来,不用添加新网页
变量

内置变量

$remote_addr;  #存放了客户端的地址,注意是客户端的公网IP
$proxy_add_x_forwarded_for # 代理中所有经过的服务器的ip
$args;   #变量中存放了URL中的参数
如:http://www.kgc.org/main/index.do?id=20190221&partner=search
#返回结果为: id=20190221&partner=search    存放的就是这个
$document_root; #保存了针对当前资源的请求的系统根目录
例如:/apps/nginx/html。
$document_uri;  #保存了当前请求中不包含参数的URI
如:http://www.kgc.org/main/index.do?id=20190221&partner=search会被定义为/main/index.do 
#返回结果为:/main/index.do
$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请求生成的文件绝对路径
如:/apps/nginx/html/main/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的对应的首部字段名需要为小写,如果有横线需要替换为下划线

自定义模块

[root@localhost data]# vim /etc/nginx/conf.d/test.conf
location /test {set $name  test;echo $name;set $my_port $server_port;echo $my_port;}
[root@localhost data]# nginx -s reload
[root@localhost data]#curl 192.168.65.106/tset
test
80
nginx压缩功能

太小的文件没必要压缩,压缩可能会变大

官方文档: https://nginx.org/en/docs/http/ngx_http_gzip_module.htmlgzip on | off;  #启用或禁用gzip压缩,默认关闭
gzip_comp_level level;#压缩比由低到高从1到9,默认为1
gzip_min_length 1k; #gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_http_version 1.0 | 1.1; #启用压缩功能时,协议的最小版本,默认HTTP/1.1
gzip_buffers number size;  #指定Nginx服务需要向服务器申请的缓存空间的个数和大小,平台不同,默认:32 4k或者16 8k;
gzip_types mime-type ...; #指明仅对哪些类型的资源执行压缩操作;默认为gzip_types text/html,不用显示指定,否则出错
gzip_vary on | off;#如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”,一般建议打开
gzip_static on | off;#预压缩server {root         /usr/share/nginx/html;gzip on;gzip_comp_level 9;gzip_min_length 1k;gzip_vary on;}

https功能

官方文档https://nginx.org/en/docs/http/ngx_http_ssl_module.htmllisten 443 ssl; #为指定的虚拟主机配置启用ssl功能
ssl_certificate /path/to/file;
#指向包含当前虚拟主机和CA的两个证书信息的文件,一般是crt文件
ssl_certificate_key /path/to/file;
#当前虚拟主机使用的私钥文件,一般是key文件
ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2]; 
#支持ssl协议版本,早期为ssl现在是TLS,默认为后三个

自定义图标

#方法一:服务器不记录访问日志:
location = /favicon.ico {log_not_found off;access_log off;
}
#方法二:将图标保存到指定目录访问:
#location ~ ^/favicon\.ico$ {
location = /favicon.ico {root   /data/nginx/html/pc/images;expires 365d;  #设置文件过期时间
}

相关文章:

NGINX相关配置

全局配置 NGINX配置信息 nginx 官方帮助文档&#xff1a;http://nginx.org/en/docs/Nginx的配置文件的组成部分&#xff1a; 主配置文件&#xff1a;/conf/nginx.conf(/nginx/conf/nginx.conf) 子配置文件: include conf.d/*.conf#事件驱动相关的配置 同步 event { worker_…...

如何将idea中导入的文件夹中的项目识别为maven项目

问题描述 大家经常遇到导入某个文件夹的时候&#xff0c;需要将某个子文件夹识别为maven项目 解决方案...

CleanMyMac4.16中文最新版本下载

当很多人还在为电脑运行缓慢、工作问题不能快速得到解决而烦恼的时候&#xff0c;我已经使用过了多款系统清理工具&#xff0c;并找到了最适合我的那一款。我的电脑是超耐用的Mac book&#xff0c;接下来给大家介绍三种在众多苹果电脑清理软件的排名较高的软件。 一、Maintena…...

谷歌正式发布最强 AI 模型 Gemini

2023年12月6日&#xff0c;谷歌公司宣布推出其被认为是规模最大、功能最强大的人工智能模型 Gemini。 Gemini将分为三个不同的套件&#xff1a;Gemini Ultra、Gemini Pro和Gemini Nano。 Gemini Ultra被认为具备最强大的能力&#xff0c;Gemini Pro则可扩展至多任务&#x…...

无人机语音中继电台 U-ATC118

简介 甚高频无线电中继通讯系统使用经过适航认证的机载电台连接数字网络传输模块&#xff0c;通过网络远程控制无缝实现无人机操作员与塔台直接语音通话。无人机操作员可以从地面控制站远程操作机载电台进行频率切换、静噪开关、PTT按钮&#xff0c;电台虚拟面板与真实面板布局…...

两种测量方式的自适应卡尔曼滤波数据融合

文章目录 测试效果代码CMakeLists.txt参考测试效果 代码 #include <iostream> #include <Eigen/Dense> #include...

.Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)

机缘 不知不觉,.NET8都已经面世,而我们一直还停留在.netframework4.5开发阶段,最近准备抽空研究一下.Net6,一是为了提高技术积累,一方面想着通过这次的学习,看有没有可能将老的FX版本替换到.Net6开发上,经过查找官方资料,对.Net6支持的系统版本做一个分享,方便大家后期…...

CopyOnWriteArraySet怎么用

简介 CopyOnWriteArraySet是一个线程安全的无序集合&#xff0c;它基于“写时复制”的思想实现。它继承自AbstractSet&#xff0c;可以将其理解成线程安全的HashSet。 CopyOnWriteArraySet在读取操作比较频繁、写入操作相对较少的情况下可以提高程序的性能和可靠性。它的线程…...

uniapp得app云打包问题

获取appid&#xff0c;具体可以查看详情 也可以配置图标&#xff0c;获取直接生成即可 发行 打包配置 自有证书测试使用时候不需要使用 编译打包 最后找到安装包apk安装到手机 打包前&#xff0c;图片命名使用要非中文&#xff0c;否则无法打包成功会报错...

Linux bin包生成

需求背景&#xff1a; 在实际项目时我们很少把源码用个tar给到客户&#xff0c;这样显得很不专业&#xff0c;且有的时候我们提供补丁&#xff0c;那么这个时候我们提供一个补丁的bin包可以直接安装运行就显得很高大上了。 物料准备 准备一台liunx&#xff0c;虚拟机亦可&am…...

Java多人聊天

服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…...

自动驾驶:传感器初始标定

手眼标定 机器人手眼标定AxxB&#xff08;eye to hand和eye in hand&#xff09;及平面九点法标定 Ax xB问题求解&#xff0c;旋转和平移分步求解法 手眼标定AXXB求解方法&#xff08;文献总结&#xff09; 基于靶的方法 相机标定 (1) ApriTag (2) 棋盘格&#xff1a;cv::f…...

如何将 MySQL 数据库转换为 SQL Server

本文解释了为什么组织希望将其 MySQL 数据库转换为 Microsoft SQL 数据库。本文接着详细介绍了尝试转换之前需要记住的事项以及所涉及的方法。专业的数据库转换器工具将帮助您快速将 MySQL 数据库记录转换为 MS SQL Server。 在继续之前&#xff0c;我们先讨论一下 MySQL 到 M…...

【开源】基于Vue+SpringBoot的河南软件客服系统

文末获取源码&#xff0c;项目编号&#xff1a; S 067 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S067。} 文末获取源码&#xff0c;项目编号&#xff1a;S067。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统管理人员2.2 业务操作人员 三、…...

《算法面试宝典》--深度学习常见问题汇总

第三章 深度学习基础 3.1 基本概念 3.1.1 神经网络组成? 神经网络类型众多,其中最为重要的是多层感知机。为了详细地描述神经网络,我们先从最简单的神经网络说起。 感知机 多层感知机中的特征神经元模型称为感知机,由Frank Rosenblatt于1957年发明。 其中 x 1 x_1 x...

【计算机网络实验】实验三 IP网络规划与路由设计(头歌)

目录 一、知识点 二、实验任务 三、头歌测试 一、知识点 IP子网掩码的两种表示方法 32位IP子网掩码&#xff0c;特点是从高位开始连续都是1&#xff0c;后面是连续的0&#xff0c;它有以下两种表示方法&#xff1a; 传统表示法&#xff0c;如&#xff1a;255.255.255.0IP前…...

CodeBlocks添加头文件,解决fatal error: ui.h No such file or directory

问题描述 在使用codeblocks工具进行LVGL仿真过程中报错&#xff0c;找不到头文件 原因分析&#xff1a; 没有将头文件加入编辑器搜索的目录中&#xff0c;编译时找不到头文件。 解决方案&#xff1a; 将要包含的头文件的目录加进去就可以了...

鸿蒙开发:UIAbility组件与UI的数据同步-使用EventHub进行数据通信【鸿蒙专栏-21】

文章目录 ArkTS应用模型中UIAbility组件与UI的数据同步使用EventHub进行数据通信使用globalThis进行数据同步1. UIAbility和Page之间使用globalThis2. UIAbility和UIAbility之间使用globalThis3. 使用globalThis的注意事项4. 使用globalThis的注意事项同名对象覆盖导致问题的场…...

云架构的思考3--云上开发

目录 1 DevOps--简单灵活性高2 服务化&#xff08;微服务&#xff09;--弹性&#xff08;可扩展&#xff09;、按需自主服务3 无状态&#xff08;Serverless&#xff09;--弹性&#xff08;可扩展&#xff09;4 日志--安全5 配置中心--安全6 设计模式6.1 使用“适配器模式”调用…...

vue3日常知识点学习归纳

1&#xff0c;父子组件传递&#xff1a; 父组件传递参数 <template><div><!-- 子组件 参数&#xff1a;num 、nums --><child :num"nums.num" :doubleNum"nums.doubleNum" increase"handleIncrease"></child>&l…...

策略模式终极解决方案之策略机

我们在开发时经常会遇到一堆的if else …, 或者switch, 比如我们常见的全局异常处理等, 像类似这种很多if else 或者多场景模式下, 策略模式是非常受欢迎的一种设计模式, 然而, 一个好的策略模式却不是那么容易写出来. 我在工作中也因为写烦了switch,if else 觉得很不优雅, 因…...

linux 常用指令目录大纲

Linux下的Signal信号处理及详解&#xff0c;test ok-CSDN博客 Linux下怎样判断一个binary是否可以debug//test ok_感知算法工程师的博客-CSDN博客 linux file命令的用法//test ok-CSDN博客 linux下生成core dump方法与gdb解析core dump文件//test ok-CSDN博客 linux readel…...

webpack该如何打包

1.我们先创建一个空的大文件夹 2.打开该文件夹的终端 输入npm init -y 2.1.打开该文件夹的终端 2.2在该终端运行 npm init -y 3.安装webpack 3.1打开webpack网址 点击“中文文档” 3.2点击“指南”在点击“起步” 3.3复制基本安装图片画线的代码 4.在一开始的文件夹下在创建一…...

【STM32】TIM定时器输入捕获

1 输入捕获 1.1 输入捕获简介 IC&#xff08;Input Capture&#xff09;输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变时&#xff08;上升沿/下降沿&#xff09;&#xff0c;当前CNT的值将被锁存到CCR中&#xff08;把CNT的值读出来&#xff0c;写入到…...

webrtc 设置不获取鼠标 启用回声消除

数 getDisplayMedia()(属于 navigator.mediaDevices 的一部分)与 getUserMedia() 类似,用于打开显示内容(或部分内容,如窗口)。返回的 MediaStream 与使用 getUserMedia() 时相同。 显示鼠标与否 getDisplayMedia() 的约束条件与常规视频或音频输入资源的限制不同。 {…...

JVM虚拟机:如何查看JVM初始和最终的参数?

本文重点 在前面的课程中&#xff0c;我们学习了如何查看当前程序所处于的xx参数&#xff0c;本文再介绍一种如何参看JVM的xx参数&#xff1f; 查看JVM的所有初始化参数 方式一&#xff1a;java -XX:PrintFlagsInitial 方式二&#xff1a;java -XX:PrintFlagsInitial -versio…...

JVM Optimization Learning(五)

目录 一、JVM Optimization 1、G1 1、G1内存模型 2、基础概念 3、G1特点&#xff1a; 4、CMS日志分析 5、G1日志分析 2、GC参数 2.1、GC常用参数 2.2、Parallel常用参数 2.3、CMS常用参数 2.4、G1常用参数 一、JVM Optimization 1、G1 G1官网说明&#xff1a;Gar…...

Java项目学生管理系统一前后端环境搭建

在现代的软件开发中&#xff0c;学生管理系统是一个常见的应用场景。通过学生管理系统&#xff0c;学校能够方便地管理学生的信息、课程安排和成绩等数据。本文将介绍如何使用Java语言搭建一个学生管理系统的前后端环境&#xff0c;并提供一个简单的示例。 1.环境搭建 学生管…...

LeetCode:169.多数元素(哈希表)

题目 第一版 思路 直接开个哈希表&#xff0c;存储每个数组中的数字和对应出现的次数。然后排序后找出对应最大value值的key。 代码 class Solution {public int majorityElement(int[] nums) {Map<Integer,Integer>map new HashMap<Integer,Integer>();for(…...

Linux指令学习

目录 1.ls指令 2.pwd命令 3.cd 指令 4. touch指令 5.mkdir指令 6.rmdir指令 && rm 指令 7.man指令 8.cp指令 9.mv指令 10.cat指令 11.more指令 12.less指令 13.head指令 14.find指令&#xff1a; -name 15.grep指令 16.zip/unzip指令&#xff1a; 17.tar…...

vue2+datav可视化数据大屏(1)

开始 &#x1f4d3; 最近打算出一个前端可视化数据大屏的系列专栏&#xff0c;这次将很全面的教大家设计可视化大屏&#xff0c;从开始到打包结束&#xff0c;其中&#xff0c;包括如何设计框架&#xff0c;如何封装axios&#xff0c;等等&#xff0c;本次使用的数据均为mock数…...

Linux 多进程并发设计-进程对核的亲缘设置

1设计结构 2 设计优点 1 充分利用多核系统的并发处理能力2 负载均衡3 职责明确&#xff0c;管理进程仅负责管理&#xff0c;工作进程仅负责处理业务逻辑 3 演示代码: //main.cpp #define _GNU_SOURCE #include<sys/types.h> #include<sys/wait.h> #include <…...

Javascript 函数介绍

Javascript 函数介绍 很多教程书一上来就讲解一堆语法&#xff0c;例如函数定义、函数调用什么。等读者看完了函数这一章都没搞懂什么是函数。 在讲解什么叫函数之前&#xff0c;我们先看下面一段代码&#xff1a; <!DOCTYPE html> <html xmlns"http://www.w3.…...

php 粉丝关注功能实现

实现粉丝关注功能的步骤如下&#xff1a; 创建用户表&#xff08;user&#xff09;和关注表&#xff08;follow&#xff09;&#xff1a; CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,username varchar(255) NOT NULL,email varchar(255) NOT NULL,password varc…...

深入浅出理解kafka ---- 万字总结

1.Kafka简介 Kafka 本质上是一个 MQ&#xff08;Message Queue&#xff09;&#xff0c;使用消息队列的优点&#xff1a; 解耦&#xff1a;允许独立的扩展或修改队列两边的处理过程。可恢复性&#xff1a;即使一个处理消息的进程挂掉&#xff0c;加入队列中的消息仍然可以在系…...

一对一聊天

服务端 package 一对一用户;import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector;…...

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Mybatis查询中返回值四种情况

第一章 Mybatis查询中返回值四种情况 1.1 查询单行数据返回单个对象 /*** 通过id获取员工信息*/ public Employee selectEmpById(int empId);<select id"selectEmpById" resultType"employee">SELECTid,last_name,email,salaryFROMtbl_employeeWHE…...

华为云安全组规则

初始发布cce,快被安全组搞死了。现在把自己的研究成果综合一下,在这里给自己留痕,希望对迷惑的朋友有帮助。 先搞懂安全组是个啥东东: 安全组规则 操作场景 安全组实际是网络流量访问策略,通过访问策略可以控制流量入方向规则和出方向规则,通过这些规则可以为加入安全组…...

MySQL之binlog文件过多处理方法

背景 MySQL由于大量读写&#xff0c;导致binlog文件特别的多。从而导致服务器disk空间不足问题。 先备份binlog文件 tar -zcvf mysql.tar.gz mysql/data/mysql-bin.00* 修改MySQL配置 binlog过期时间 show variables like expire_logs_days; 这里 0 表示 永不过期 如果为 n…...

力扣面试150题 | 88.合并两个有序数组

力扣面试150题 &#xff5c; 88.合并两个有序数组 题目描述解题思路代码实现复杂度分析 题目描述 88.合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并…...

Spring Cache快速入门教程及案例

1. Spring Cache介绍 Spring Cache提供了一组注解&#xff0c;使开发者能够轻松地在方法上定义缓存行为 Spring Cache抽象了缓存的底层实现&#xff0c;允许开发者选择使用不同的缓存提供者&#xff08;如 Ehcache、Redis、Caffeine 等&#xff09;。通过配置相应的缓存管理器…...

pycharm中debug,py文件

1、先把需要的实参传入 2、在合适位置打上断点 3、在小三角旁边右键调用调试 4.步进/步出查看 5.选择单步执行&#xff0c;走的更慢...

虚拟化之指令的Trap和仿真

有时,虚拟机监控程序需要在虚拟机(VM)中模拟操作。例如,VM内的软件可能尝试配置与功耗管理或缓存一致性相关的低级处理器控件。通常,您不希望将VM直接访问这些控件,因为它们可能被用于突破隔离,或影响系统中的其他VM。 trap在执行给定操作(例如读取寄存器)时引发异常…...

Python函数默认参数设置

在某些情况下&#xff0c;程序需要在定义函数时为一个或多个形参指定默认值&#xff0c;这样在调用函数时就可以省略为该形参传入参数值&#xff0c;而是直接使用该形参的默认值。 为形参指定默认值的语法格式如下&#xff1a; 形参名 默认值 从上面的语法格式可以看出&…...

js moment计算当前时间到24:00:00的剩余时间

2023.12.7今天我学习了如何计算当前的时间到24:00:00剩下的时间&#xff0c;https://momentjs.cn/ const now moment(); // 获取当前时间const endOfDay moment().endOf(day); // 设置当天的 23:59:59const duration moment.duration(endOfDay.diff(now)); // 计算剩余时间的…...

【UE5】瞬移+马赛克过渡效果

效果 步骤 1. 新建一个工程&#xff0c;创建一个Basic关卡 2. 添加第三人称游戏资源到内容浏览器 3. 新建一个材质&#xff0c;这里命名为“M_Pixel” 打开“M_Pixel”&#xff0c;设置材质域为“后期处理” 在材质图表中添加如下节点 此时效果如下&#xff0c;已经有马赛克的…...

【Skynet 入门实战练习】分布式 ID | 雪花算法 | 缓存设计 | LRU算法 | 数据库

文章目录 前言雪花算法LRU 算法缓存模块数据库测试逻辑 前言 本节实现了 分布式 ID 生成系统&#xff0c;采用雪花算法实现唯一 ID&#xff1b;实现缓存架构&#xff0c;采用 LRU &#xff08;最近最少使用&#xff09;算法。 雪花算法 分布式 ID 生成算法的有很多种&#x…...

ArcGIS Pro中怎么设置标注换行

在ArcGIS Pro中进行文字标注的时候&#xff0c;如果标注的字段内容太长&#xff0c;直接标注的话会不美观&#xff0c;而且还会影响旁边的标注显示&#xff0c;这里为大家介绍一下在ArcGIS Pro中设置文字换行的方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的…...

MAX26——快速人物毛发插片工具 Hair cards tool

一提到毛发插件&#xff0c;我们一般想起的就是maya的 xgrn 或者max的ox。但是这些都是我们做影视级数字人用的。比较费性能也比较费面 下面分享一个干货 Hair cards tool 这个插件操作不像xgen与ox那么复杂。基本上0基础上手5分钟不到。就能插片出不错的效果。比较适用于&…...

一天一个设计模式---原型模式

基本概念 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;其主要目的是通过复制现有对象来创建新对象&#xff0c;而不是通过实例化类。原型模式允许在运行时动态创建对象&#xff0c;同时避免了耦合与子类化。 在原型模式中&#xff0…...