02. Nginx入门-Nginx安装

Nginx安装

yum安装

编辑yum环境

cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF

安装Nginx

yum list | grep nginx
yum -y install nginx
nginx -v

常用命令

#Nginx状态
systemctl status nginx
#关闭Nginx
systemctl stop nginx
#启动Nginx
systemctl statrt nginx
#重载Nginx
systemctl daemon-reload
#设置开机启动
systemctl enable nginx
#查看版本
nginx -v
nginx -V

源码安装

解决依赖环境

yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel wget vim

安装Nginx

useradd nginx
wget https://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz -C /usr/local/
cd /usr/local/nginx-1.24.0
./configure --prefix=/usr/local/nginx \
--user=nginx --group=nginx \
--with-http_realip_module \
--with-http_v2_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-stream \
--with-stream_ssl_module \
--with-http_sub_module
echo $?
make install
echo $?
/usr/local/nginx/sbin/nginx -v

常用命令

#启动Nginx
/usr/local/nginx/sbin/nginx
#检查配置文件
/usr/local/nginx/sbin/nginx -t
#关闭Nginx
/usr/local/nginx/sbin/nginx -s stop
#重载Nginx
/usr/local/nginx/sbin/nginx -s reload
#查看版本
/usr/local/nginx/sbin/nginx -v
/usr/local/nginx/sbin/nginx -V

启动文件

cat > /usr/lib/systemd/system/nginx.service << EOF
[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
EOF

编译模块详解

查看编译模块命令

nginx -V

编译模块详解

--prefix=/etc/nginx																					#指定Nginx安装目录
--sbin-path=/usr/sbin/nginx																	#指定Nginx执行文件目录
--modules-path=/usr/lib64/nginx/modules											#指定Nginx模块路径
--conf-path=/etc/nginx/nginx.conf														#指定Nginx配置文件路径
--error-log-path=/var/log/nginx/error.log										#指定Nginx错误日志路径
--http-log-path=/var/log/nginx/access.log										#指定Nginx访问日志路径
--pid-path=/var/run/nginx.pid																#指定Nginx进程号存放路径
--lock-path=/var/run/nginx.lock															#指定Nginx启动锁定文件路径
--http-client-body-temp-path=/var/cache/nginx/client_temp		#指定Nginx客户端缓存路径
--http-proxy-temp-path=/var/cache/nginx/proxy_temp					#指定Nginx代理缓存路径
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp			#指定Nginx php缓存路径
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp					#指定Nginx python缓存路径
--http-scgi-temp-path=/var/cache/nginx/scgi_temp						#指定Nginx
--user=nginx																								#指定Nginx程序的用户
--group=nginx																								#指定Nginx进程的用户组
--with-compat																								#启动Nginx动态模块兼容性
--with-file-aio																							#启动Nginx aio使处理效率、处理大量IO性能大大提高
--with-threads																							#启动Nginx的多线程模块(根据CPU核数来启动,单核没必要启动)
--with-http_addition_module																	#启动Nginx的追加模块
--with-http_auth_request_module															#启动Nginx的认证模块
--with-http_dav_module																			#启动Nginx的上传下载模块
--with-http_flv_module																			#启动Nginx的播放视频模块
--with-http_gunzip_module																		#启动Nginx的压缩模块
--with-http_gzip_static_module															#启动Nginx的压缩模块
--with-http_mp4_module															        #启动Nginx的多媒体模块
--with-http_random_index_module											        #启动Nginx的随机主页模块
--with-http_realip_module											              #启动Nginx的用户真实IP模块
--with-http_secure_link_module											        #启动Nginx的安全连接模块
--with-http_slice_module											              #启动Nginx的中文文档模块
--with-http_ssl_module											                #启动Nginx的安全模块
--with-http_stub_status_module											        #启动Nginx的访问状态模块
--with-http_sub_module											                #启动Nginx的替换网站响应模块
--with-http_v2_module												                #启动Nginx的http v2模块
--with-mail																									#启动Nginx的邮件模块
--with-mail_ssl_module																			#启动Nginx的邮件安全模块
--with-stream																								#启动Nginx的负载均衡模块
--with-stream_realip_module																	#启动Nginx的负载均衡真实IP模块
--with-stream_ssl_module																		#启动Nginx的负载均衡安全模块
--with-stream_ssl_preread_module														#启动Nginx的负载均衡预读取模块
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong		#CPU优化参数
--param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC'												#CPU优化参数
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'																											#CPU优化参数

简单访问

查看IP地址

ip addr

浏览器访问IP

如果访问IP地址无法访问,需要检查是否服务器开启了防火墙,如开启需要关闭

systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld

注意:安装没有错误的前提下,如果扔无法访问Nginx,绝大部分情况是没有开放防火墙上的Nginx端口,简单处理方式即关闭防火墙。

访问展示

image.png

Nginx文件

yum安装文件路径

目录及文件

rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d																							#Nginx的子配置文件目录
/etc/nginx/conf.d/default.conf																#Nginx的默认子配置文件
/etc/nginx/fastcgi_params
/etc/nginx/mime.types
/etc/nginx/modules
/etc/nginx/nginx.conf																					#Nginx的主配置文件
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.25.3
/usr/share/doc/nginx-1.25.3/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html																						#Nginx的项目默认路径
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx																									#Nginx的默认日志路径

源码安装文件路径

所有目录

ll /usr/local/nginx
total 4
drwx------. 2 nginx root    6 Jan  4 01:49 client_body_temp
drwxr-xr-x. 2 root  root 4096 Jan  4 01:43 conf								#Nginx配置文件路径
drwx------. 2 nginx root    6 Jan  4 01:49 fastcgi_temp
drwxr-xr-x. 2 root  root   40 Jan  4 01:43 html								#Nginx项目默认路径
drwxr-xr-x. 2 root  root   58 Jan  4 01:49 logs								#Nginx默认日志路径
drwx------. 2 nginx root    6 Jan  4 01:49 proxy_temp
drwxr-xr-x. 2 root  root   19 Jan  4 01:43 sbin								#Nginx进程路径
drwx------. 2 nginx root    6 Jan  4 01:49 scgi_temp
drwx------. 2 nginx root    6 Jan  4 01:49 uwsgi_temp

关键文件

/usr/local/nginx/conf/nginx.conf					#Nginx配置文件
/usr/local/nginx/conf/nginx.conf.default	#Nginx配置文件模板
/usr/local/nginx/logs/access.log					#Nginx访问日志
/usr/local/nginx/logs/error.log						#Nginx错误日志

配置文件详解

Nginx配置文件三大模块

  1. 核心模块(CoreModule):进程数等配置;
  2. 事件驱动模块(EventsModule):工作模式等配置;
  3. http内核模块(HttpCoreModule):文档程序类型、配置文件等配置;

配置文件

主配置文件

user  nginx;																																		#全局设置,指定Nginx的启动用户
worker_processes  auto;																													#全局设置,指定Nginx的启动进程个数error_log  /var/log/nginx/error.log notice;																			#全局设置,指定Nginx的错误日志存放路径
pid        /var/run/nginx.pid;																									#全局设置,指定Nginx的进程号存放路径events {worker_connections  1024;																											#事件设置,指定Nginx的每个worker进程的最大连接数
}http {include       /etc/nginx/mime.types;																					#HTTP设置,指定Nginx包含的媒体访问类型文件default_type  application/octet-stream;																				#HTTP设置,指定Nginx的流处理方式,默认为字节流处理方式log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '			#HTTP设置,指定Nginx的日志的记录格式'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;																	#HTTP设置,指定Nginx的日志路径及使用的日志格式sendfile        on;																														#HTTP设置,加速Nginx访问#tcp_nopush     on;																														#HTTP设置,优化Nginx访问keepalive_timeout  65;																												#HTTP设置,指定Nginx的保持连接时长#gzip  on;																																		#HTTP设置,指定Nginx的gzip压缩include /etc/nginx/conf.d/*.conf;																							#HTTP设置,指定Nginx的子配置文件路径
}

子配置文件

server {listen       80;																								#网站配置,设置网站的Nginx监听端口server_name  localhost;																					#网站配置,设置网站的Nginx监听域名#charset koi8-r;																								#网站配置,设置网站的字符集,默认使用UTF-8#access_log  /var/log/nginx/host.access.log  main;							#网站配置,设置网站访问日志的路径及日志的记录格式location / {root   /usr/share/nginx/html;																#网站网页配置,指定网站的根目录路径index  index.html index.htm;                                #网站网页配置,指定网站默认主页的文件名称}#error_page  404              /404.html;												#网站配置,指定网站的404错误页面# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;												#网站配置,指定网站的500系列的错误页面的显示内容location = /50x.html {root   /usr/share/nginx/html;																#网站网页配置,指定网站的500系列错误页面存放路径}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}
}

日志文件详解

日志格式解释

  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;	

log_format:声明日志格式;
main:定义这个日志格式的名称;
$remote_addr:远程地址,记录客户端IP地址;
r e m o t e u s e r :远程用户,记录客户端访问用户名(有身份验证的前提下记录); [ remote_user:远程用户,记录客户端访问用户名(有身份验证的前提下记录); [ remoteuser:远程用户,记录客户端访问用户名(有身份验证的前提下记录);[time_local]:本地时间,服务器的自身时间(客户端访问时间);
“$request”:请求,记录请求的方式、请求的URL和请求的HTTP协议;
$status:请求状态码,记录请求的状态码;
b o d y b y t e s s e n t :发送给客户端的字节数,不包括响应头的大小; " body_bytes_sent:发送给客户端的字节数,不包括响应头的大小; " bodybytessent:发送给客户端的字节数,不包括响应头的大小;"http_referer":记录从哪个页面链接过来的访问(如果直接访问过来的则记录“-”);
h t t p u s e r a g e n t " :记录客户端浏览器相关信息; " http_user_agent":记录客户端浏览器相关信息; " httpuseragent":记录客户端浏览器相关信息;"http_x_forwarded_for”:记录代理IP
$request_length:记录请求的长度(包含请求行、请求头、请求正文);
$request_time:记录请求处理的时间,单位秒,精度是毫秒;
$time_iso8601:ISO8601标准格式下的本地时间;
$bytes_sent:记录发送给客户端的总字节数;
$msec:记录日志写入时间,单位秒,精度是毫秒;
$http_x_real_ip:记录真实客户端的ip,windows客户端ip;
$remote_addr:当无代理时候,是直接真实客户端的ip;
-:在日志中有两种情况,一表示占位符(如果没有记录使用占位符表示),二表示分隔符(没有特殊含义);

访问日志文件

192.169.1.101 - - [05/Jan/2024:23:45:59 +0800] "GET / HTTP/1.1" 200 17 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0" "-"

$remote_addr --> 192.169.1.101
r e m o t e u s e r − − > − [ remote_user --> - [ remoteuser>[time_local] --> [05/Jan/2024:23:19:56 +0800]
“$request” --> “GET / HTTP/1.1”
$status --> 200
b o d y b y t e s s e n t − − > 17 " body_bytes_sent --> 17 " bodybytessent>17"http_referer" --> “-”
h t t p u s e r a g e n t " − − > " M o z i l l a / 5.0 ( W i n d o w s N T 10.0 ; W i n 64 ; x 64 ; r v : 121.0 ) G e c k o / 20100101 F i r e f o x / 121.0 " " http_user_agent" --> "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0" " httpuseragent">"Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:121.0)Gecko/20100101Firefox/121.0""http_x_forwarded_for” --> “-”

错误日志文件

  • 日志格式
error_log logs/error.log error;
  • 日志解释
  1. error_log:是记录错误日志的关键字,不能任意修改;
  2. logs/error.log:是记录错误日志的路径及文件名;
  3. error:指定错误日志记录的级别;
  4. 默认使用error级别,常见级别有:debug,info,notice,wam,error,crit,alert,emerg;
  5. 注意:级别越高记录的信息越少,一般常用的三个级别:wam,error,crit;
  6. 注意:不要配置info等低级别,会带来巨大的磁盘I/O消耗;
2024/01/06 00:43:35 [error] 15794#15794: *8 open() "/usr/share/nginx/html/adb" failed (2: No such file or directory), client: 192.169.1.101, server: localhost, request: "GET /adb HTTP/1.1", host: "192.169.1.133"

日志缓存

日志缓存可以配置在http/server/location下

http {open_log_file_cache max=1000 inactive=20s min_uses=3 valid=1m;......server {......}
}
  1. 默认情况下open_log_file_cache是关闭的,即open_log_file_cache off;
  2. max=1000:指定日志文件的FD,最大的缓存数量为1000;
  3. inactive=20s min_uses=3:在20秒内小于3次访问的FD,就会清理掉;
  4. valid=1m:检查周期为1分钟;
  5. 总结:缓存多个1000个,到了极限每分钟开始清除掉,20秒内小于3次的文件FD;
  6. 生成环境下不建议开启,因为会占用内存资源;

日志切割轮转

日志轮转切割可以使用linux的自带logrotate工具

  • 日志切割文件
cat /etc/logrotate.d/nginx/var/log/nginx/*.log {daily													#每天轮转一次missingok											#日志丢失不提示rotate 52											#日志文件备份保留52份compress											#压缩日志文件,默认后缀.gzdelaycompress									#延迟压缩notifempty										#空文件,不轮转create 640 nginx adm					#日志轮转后创建一个新文件,并授权size 10M											#日志文件大小超过10M时,启动日志轮转sharedscripts									#日志轮转后执行的脚本,开始标识postrotateif [ -f /var/run/nginx.pid ]; thenkill -USR1 `cat /var/run/nginx.pid` #重启nginxfiendscript											#日志轮转后执行的脚本,结束标识
}
  • 测试日志轮转
logrotate -vf /etc/logrotate.d/nginx

日志分析

  1. 统计2023年9月5日,这一天内的PV量
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | wc -l
grep '05/Sep/2023:08' /var/log/nginx/access_zzx_log.log | wc -l		#(8点-9点直接的PV量)
  1. 统计2023年9月5日,这一天内的访问最多的10个IP
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | awk '{ips[$1]++}END{for(i in ips){print "IP地址:"i,"数量:"ips[i]}}' | sort -k2 -rn | head -n 10
  1. 统计2023年9月5日,这一天内的访问大于100次的IP
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | awk '{ips[$1]++}END{for(i in ips){if(ips[i]>100){print "IP地址:"i,"数量:"ips[i]}}}'
  1. 统计2023年9月5日,这一天内的访问最多的10个页面
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | awk '{urls[$7]++}END{for(i in urls){print "URL地址:"urls[i],"数量:"i}}' | sort -k1 -rn | head -n 10
  1. 统计2023年9月5日,这一天内的每个URL访问内容总量大小
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | awk '{urls[$7]++;size[$7]+=$10}END{for(i in urls){print "URL地址:"urls[i],"大小:"size[i]}}'
  1. 统计2023年9月5日,这一天内的每个IP访问状态码数量
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | awk '{ip_code[$1" "$9]++}END{for(i in ip_code){print "IP地址和状态码:"i,"数量:"ip_code[i]}}'
  1. 统计2023年9月5日,这一天内的每个IP访问状态码为404及出现次数
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | awk '{if($9="404"){ip_code[$1" "$9]++}}END{for(i in ip_code){print "IP地址和状态码:"i,"数量:"ip_code[i]}}'
  1. 统计2023年9月5日,这一天8:30-9:30时间段每个IP出现404状态码的数量
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | awk '$4>="[05/Sep/2023:08:30:00" && $4<="[05/Sep/2023:09:00:00"{if($9="404"){ip_code[$1" "$9]++}}END{for(i in ip_code){print i,ip_code[i]}}'
  1. 统计2023年9月5日,这一天内的各种状态码数量
grep '05/Sep/2023' /var/log/nginx/access_zzx_log.log | awk '{code[$9]++}END{for(i in code){print i,code[i]}}'
  1. 统计前一分钟的PV量
date=$(date -d '-1 minute' +%Y:%H:%M); awk -v date=$date '$0 ~ date{i++}END{print i}' /var/log/nginx/access_zzx_log.log

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker容器与虚拟化技术:OpenEuler 使用 docker-compose 部署 LNMP

目录 一、实验 1.环境 2.OpenEuler 部署 docker-compose 3.docker-compose 部署 LNMP 二、问题 1.ntpdate未找到命令 2.timedatectl 如何设置时区与时间同步 3.php网页显示时区不对 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统架构版本IP备注Lin…

计算机网络实验一 网线制作

实验目的与要求&#xff1a; 实验目的 了解以太网网线&#xff08;双绞线&#xff09;和制作方法 实验内容 了解网线和水晶头 学习网线制作方法 实验环境和要求 网线 水晶头 压线钳 剥线钳 网线测试器 方法、步骤&#xff1a; 步骤一 准备工具和材料 步骤二 剥掉双绞线的外…

CorelDRAW Technical Suite(CDR) 2023 v24.4.0.636 中文免费版(附注册机+教程)

CorelDRAW&#xff08;简称CDR&#xff09;是一款专业的图形设计软件。该软件是加拿大Corel公司开发的一款功能强大的专业平面设计软件、矢量设计软件、矢量绘图软件。这款矢量图形制作工具软件广泛应用于商标设计、标志制作、封面设计、CIS设计、产品包装造型设计、模型绘制、…

1.3 vue ui框架-element-ui框架

1 前言 ElementUI是一套基于VUE2.0的桌面端组件库&#xff0c;ElementUI提供了丰富的组件帮助开发人员快速构建功能强大、风格统一的页面。 ElementUI官网 https://element.eleme.io 2 安装 运行命令 cnpm i element-ui -S -S表示只在该项目下安装&#xff0c;不是全局安…

堆和二叉树的动态实现(C语言实现)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1…

解锁AI大模型秘籍:未来科技的前沿探索

在当今这个技术高速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为了我们生活中不可或缺的一部分。从简单的个人助手到复杂的数据分析和决策制定&#xff0c;AI的应用范围日益扩大&#xff0c;其目的是为了让我们的生活变得更加智能化。本文旨在探讨AI如何…

C++ 基础知识

一. 预备知识 1. C的编程方式 过程性语言 (结构化、自顶向下)、面向对象语言、泛型编程 (创建独立于类型的代码) 2. 创建源代码文件的技巧 扩展名&#xff1a;.cpp 二. 第一个程序 - HelloWorld main() 入口点 返回 int 标准库 iostream std: 标准库的缩写 Statement…

苹果电脑免费释放磁盘空间软件CleanMyMac X2024

CleanMyMac X通过以下方式帮助用户释放磁盘空间&#xff1a; 智能扫描和清理&#xff1a;CleanMyMac X拥有强大的智能扫描功能&#xff0c;可以深入系统底层&#xff0c;快速识别并清理各类无用文件和垃圾&#xff0c;如缓存、日志、临时文件等。这些文件通常会占用大量的磁盘…

C语言回顾学习

一、数据类型 1.常量 2.float浮点表示 3.字符型 4.char&#xff08;大小写&#xff09; #include <stdio.h> //根据数字输出字符--int值可以直接输出为char int main() {int value;while (1){scanf("%d",&value);if(value<65||value>122){printf(&…

STM32CubeIDE基础学习-新建STM32CubeIDE基础工程

STM32CubeIDE基础学习-新建STM32CubeIDE基础工程 前言 有开发过程序的朋友都清楚&#xff0c;后面开发是不需要再新建工程的&#xff0c;一般都是在初学时或者有特殊需要的时候才需要新建项目工程的。 后面开发都是可以在这种已有的工程上添加相关功能就行&#xff0c;只要前…

构造pop链

反序列化视频笔记 第一步&#xff1a;找到目标触发echo调用$flag 第二步&#xff1a;触发_invoke函数调用appeng函数$varflag.php&#xff08;把对象当成函数&#xff09; 第三步&#xff1a;给$p赋值为对象&#xff0c;即function成为对象Modifier却被当成函数调用&#xff…

Stable Diffusion 模型分享:CG texture light and shadow(CG纹理光影)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 一个拥有cg质感和光影的融合模型&#xff0c;偏2.5D 条目内容类型大模型基础模型SD 1.5来…

java 正则表达式介绍

Java正则表达式是一种强大的文本处理工具&#xff0c;它允许你进行模式匹配、搜索和文本操作。正则表达式提供了一种简洁、灵活的方式来处理字符串&#xff0c;可以用于各种应用场景&#xff0c;如数据验证、文本解析、搜索和替换等。 正则表达式的基础知识 正则表达式…

[HackMyVM] 靶场 Wave

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Un…

2024最新软件测试面试题(带答案)

1. 请自我介绍一下(需简单清楚的表述自已的基本情况&#xff0c;在这过程中要展现出自信&#xff0c;对工作有激情&#xff0c;上进&#xff0c;好学) 面试官您好&#xff0c;我叫###&#xff0c;今年26岁&#xff0c;来自江西九江&#xff0c;就读专业是电子商务&#xff0c;毕…

平衡搜索二叉树—AVL树

一、定义&#xff1a; 为了避免搜索二叉树的高度增长过快&#xff0c;降低二叉树的性能&#xff0c;规定在插入和删除二叉树的结点的时候&#xff0c;任何结点左右子树的高度差绝对值不超过1&#xff0c;这样的二叉树被称为平衡二叉树&#xff08;balanced Binary Tree&#xf…

Java并发编程-进程和线程

一、进程和线程 1. 进程 什么是进程&#xff1f; 简单来说&#xff0c;进程就是程序的一次启动和执行。进程是操作系统中的一个概念&#xff0c;它代表正在运行的程序的实例。每个进程都有自己的内存空间、代码和数据&#xff0c;以及其他操作系统资源&#xff0c;如文件和设备…

Python:关于数据服务中的Web API的设计

搭建类似joinquant、tushare类似的私有数据服务应用&#xff0c;有以下一些点需要注意&#xff1a; 需要说明的是&#xff0c;这里讨论的是web api前后端&#xff0c;当然还有其它方案&#xff0c;thrift&#xff0c;grpc等。因为要考虑到一鱼两吃&#xff0c;本文只探讨web ap…

FreeRTOS学习笔记-基于stm32f103(1)基础知识

一、裸机与RTOS 我们使用的32板子是裸机&#xff0c;又称前后台系统。裸机有如下缺点&#xff1a; 1、实时性差。只能一步一步执行任务&#xff0c;比如在一个while循环中&#xff0c;要想执行上一个任务&#xff0c;就必须把下面的任务执行完&#xff0c;循环一遍后才能执行…

服务器后端是学习java还是php

没有绝对的"最好"语言&#xff0c;每种后端语言都有其适用的场景和特点。以下是几种常用的后端语言&#xff1a; 1. Java&#xff1a;Java是一种通用且强大的语言&#xff0c;广泛用于企业级应用和大型系统。它有很好的性能和可靠性&#xff0c;并且具有优秀的生态系…