nginx的基本使用与其日志
文章目录
- 1.nginx编译安装脚本
- 2.nginx平滑升级,以及其步骤
- 3.nginx核心配置,及实现nginx多虚拟主机
- 4.nginx日志格式定制
- 5.nginx反向代理及https安全加密
- 6.基于LNMP和Redis的phpmyadmin的会话保持,以及其完整步骤
1.nginx编译安装脚本
#编译安装脚本
#!/bin/bash
nginx_version=1.20.2
nginx_file=nginx-${nginx_version}.tar.gz
cpu=`lscpu | grep "^CPU(s):" | tr -d ' '|awk -F':' '{ print $2 }'`
install_dir=/data/web
user=nginx
group=nginx
url=https://nginx.org/download
. /etc/os-release
if [[ $ID =~ rhel|rocky|centos ]];thensystemctl disable --now firewalldyum install gcc make gcc-c++ wget pcre-devel openssl-devel zlib-devel -y
elif [[ $ID =~ 'ubuntu' ]];thenapt updateapt install gcc make gcc-c++ wget pcre-devel openssl-devel zlib-devel -y
else echo "不支持此系统,退出!"exit
fi
if [ ! -f ${nginx_file} ];thenwget ${url}/${nginx_file} #下载nginx
fi
useradd -s /sbin/nologin ${user}
mkdir -p ${install_dir}
chown ${user}.${group} -R ${install_dir}
tar zxf ${nginx_file} -C /usr/local/src #解压缩下载的nginx
cd /usr/local/src/nginx-${nginx_version} #进入下载的nginx目录
./configure --prefix=${install_dir} --without-http_rewrite_module --without-http_gzip_module --user=${user} --group=${group} --pid-path=${install_dir}/run/nginx.pid --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module #检查当前的环境是否满足要安装软件的依赖关系
make -j ${cpu}&& make install #编译&&安装
echo "PATH=${install_dir}/sbin:${PATH}" > /etc/profile.d/nginx.sh
ln -s ${install_dir}/sbin/nginx /usr/sbin
echo "`hostname -I | cut -d ' ' -f1`" > ${install_dir}/html/index.html #创建web站点到初始页面
cat > /usr/lib/systemd/system/nginx.service <<EOF
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target[Service]
Type=forking
PIDFile=${install_dir}/run/nginx.pid
ExecStartPre=/usr/bin/rm -f ${install_dir}/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now nginx &> /dev/null
echo "安装成功!,并启动服务"
echo "请访问:http://`hostname -I | cut -d ' ' -f1`"
2.nginx平滑升级,以及其步骤
#平滑升级脚本
#!/bin/bash
old_version=1.20.1
new_version=1.22.1
nginx_file=nginx-${new_version}.tar.gz
cpu=`lscpu | grep "^CPU(s):" | tr -d ' '|awk -F':' '{ print $2 }'`
install_dir=/data/web
user=nginx
group=nginx
url=https://nginx.org/download/
if [ ! -f ${nginx_file} ];thenwget ${url}${nginx_file} #下载nginx
fi
tar zxf ${nginx_file} -C /usr/local/src #解压缩下载的nginx
cd /usr/local/src/nginx-${new_version} #进入下载的nginx目录
./configure --prefix=${install_dir} --without-http_rewrite_module --without-http_gzip_module --user=${user} --group=${group} --pid-path=${install_dir}/run/nginx.pid --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module #检查当前的环境是否满足要安装软件的依赖关系
make -j ${cpu}
mv ${install_dir}/sbin/nginx ${install_dir}/sbin/nginx.old
cp /usr/local/src/nginx-${new_version}/objs/nginx ${install_dir}/sbin/
kill -s USR2 `cat ${install_dir}/run/nginx.pid`
kill -s WINCH `cat ${install_dir}/run/nginx.pid.oldbin`
kill -s QUIT `cat ${install_dir}/run/nginx.pid.oldbin`
步骤
- 将旧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
3.nginx核心配置,及实现nginx多虚拟主机
[root@server ~]# vim /etc/nginx/nginx.conf
user nginx nginx; #nginx的启动用户/组
worker_processes auto; #启动工作进程数数量
error_log /var/log/nginx/error.log; #nginx的错误日志路径
pid /run/nginx.pid; #Nginx的PID路径
include /usr/share/nginx/modules/*.conf;
#events设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连接,使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的网络连接进行序列化等。
events {worker_connections 1024; #设置单个nginx工作进程可以接受的最大并发,作为web服务器的时候最大并发数为worker_connections * worker_processes,作为反向代理的时候为(worker_connections * worker_processes)/2
}
#http块是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模块都可以在这设置,http块可以包含多个server块,而一个server块中又可以包含多个location块,server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链接的请求上限等。
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; ##nginx的成功日志路径以及其使用的日志格式sendfile on;#作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用sendfile系统调用来传输文件,sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝,硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈。tcp_nopush on;tcp_nodelay on;keepalive_timeout 65; #长连接超时时间,单位是秒types_hash_max_size 2048;include /etc/nginx/mime.types;default_type application/octet-stream;include /etc/nginx/conf.d/*.conf;
#设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个location模块。比如本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口,比如都使用80端口提供web服务server {listen 80 default_server; #配置ipv4格式server监听的端口listen [::]:80 default_server; #配置ipv6格式server监听的端口server_name _; #本server的名称,当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配。root /usr/share/nginx/html; #相当于默认页面的目录名称,默认是安装目录的相对路径,可以使用绝对路径配置。include /etc/nginx/default.d/*.conf; #导入其他路径的配置文件location / {#location其实是server的一个指令,为nginx服务器提供比较多而且灵活的指令,都是在location中体现的,主要是基于nginx接受到的请求字符串,对用户请求的UIL进行匹配,并对特定的指令进行处理,包括地址重定向、数据缓存和应答控制等功能都是在这部分实现,另外很多第三方模块的配置也是在location模块中配置。}error_page 404 /404.html; #错误页面的文件名称location = /40x.html { #location处理对应的不同错误码的页面定义到/40x.html}error_page 500 502 503 504 /50x.html; #错误页面的文件名称location = /50x.html { #location处理对应的不同错误码的页面定义到/50x.html}}
#加密相关
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# 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 PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
#和邮件相关的配置
#mail {
# ...
# } mail 协议相关配置段
#stream {
# ...
# } stream 服务器相关配置段
多虚拟主机配置:
[root@server~]# vim conf.sh
#!/bin/bash
port=80
root_dir=/data/html
yum install nginx -y
cat > /etc/nginx/conf.d/web.conf << EOF
server{listen ${port};server_name www.web.com;root ${root_dir}/web/;
}
EOF
cat > /etc/nginx/conf.d/app.conf << EOF
server {listen ${port};server_name www.app.com;root ${root_dir}/app/;
}
EOF
mkdir -p ${root_dir}/{web,app}
chown -R nginx.nginx ${root_dir}
echo " this is website" > /data/html/web/index.html
echo " this is appsite" > /data/html/app/index.html
[root@server~]# nginx -s reload
[root@client ~]# echo "10.0.0.6 www.app.com" >> /etc/hosts
[root@client ~]# echo "10.0.0.6 www.web.com" >> /etc/hosts
[root@client ~]# curl www.app.comthis is appsite
[root@client ~]# curl www.web.comthis is website
4.nginx日志格式定制
log_format json '{"@timestamp":"$time_iso8601",''"server_host":"$server_addr",''"client_host":"$remote_addr",''"size":$body_bytes_sent,''"responsetime":$request_time,' '"upstreamtime":"$upstream_response_time",''"upstreamhost":"$upstream_addr",' '"http_url":"$host$uri",''"xff":"$http_x_forwarded_for",''"referer":"$http_referer",''"tcp_xff":"$proxy_protocol_addr",''"http_user_agent":"$http_user_agent",''"status":"$status"}';
主配置文件定义日志类型
在/etc/nginx/conf.d/web.conf中进行引用该日志文件格式
[root@server ~]# cat /etc/nginx/conf.d/web.conf
server{listen 80;server_name www.web.com;root /data/html/web/;access_log /var/log/nginx/web.log json;
}
在客户端进行触发访问操作,并在服务器端观察日志生成情况
[root@client ~]# curl www.web.com
[root@server ~]# tail -f /var/log/nginx/web.log
5.nginx反向代理及https安全加密
https加密实现
创建证书脚本:
#!/bin/bash
CA_SUBJECT="/O=lll/CN=ca.lll.com"
SUBJECT="/C=CN/ST=HB/L=HB/O=lll/CN=www.lll.com"
SERIAL=34
EXPIRE=203006
FILE=lll.com
openssl req -x509 -newkey rsa:2048 -subj $CA_SUBJECT -keyout ca.key -nodes -days 365 -out ca.crt
openssl req -newkey rsa:2048 -nodes -keyout ${FILE}.key -subj $SUBJECT -out ${FILE}.csr
openssl x509 -req -in ${FILE}.csr -CA ca.crt -CAkey ca.key -set_serial $SERIAL -days $EXPIRE -out ${FILE}.crt
chmod 600 ${FILE}.key ca.key
[root@centos8 pki]# cat lll.com.crt ca.crt > www.lll.com.crt
[root@centos8 pki]# mv lll.com.key www.lll.com.key
[root@centos8 pki]# cat /etc/nginx/conf.d/web.conf
server{listen 80;listen 443;ssl_certificate /etc/ssl/pki/www.lll.com.crt;ssl_certificate_key /etc/ssl/pki/www.lll.com.key;ssl_session_cache shared:sslcache:20m;ssl_session_timeout 10m;server_name www.web.com;root /data/html/web/;access_log /data/html/web/log/access_web.log json;}
在本机电脑更改hosts文件指向该server的地址,并用浏览器进行访问即可
nginx反向代理简单实现
反向代理:reverse proxy,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。
[root@proxy_server ~]# vim /etc/nginx/conf.d/web.conf
server{listen 80;server_name www.web.com;location /{proxy_pass http://10.0.0.4;}
}
[root@proxy_server ~]# nginx -s reload
[root@server ~]# yum install httpd -y
[root@server ~]# echo `hostnamectl` > /var/www/html/index.html
[root@client ~]# echo "10.0.0.6 www.web.com" >> /etc/hosts
[root@client ~]# curl www.web.com
6.基于LNMP和Redis的phpmyadmin的会话保持,以及其完整步骤
使用的环境为Ubuntu22.04
[root@ubuntu2004 ~]# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
1.安装包
[root@ubuntu2004 ~]#apt install nginx mysql-server php8.1-fpm php8.1-mysql php8.1-curl php8.1-gd php8.1-intl php8.1-xml php8.1-zip php-redis redis-server -y
2.对php.ini进行配置
[root@ubuntu2004 ~]#vim /etc/php/8.1/fpm/php.inidate.timezone = Asia/Shanghaipost_max_size = 8Mupload_max_filesize = 100Mdisplay_errors = Onerror_log = syslog
extension=redis.so
3.对www.conf进行配置
[root@ubuntu2004 ~]#vim /etc/php/8.1/fpm/pool.d/www.conf
user = www-data
group = www-data
listen = 127.0.0.1:9000
pm.status_path = /php-status
ping.path = /ping
access.log = log/$pool.access.log
slowlog = log/$pool.log.slow
php_value[session.save_handler] = redis
php_value[session.save_path] = "tcp://127.0.0.1:6379" #指定Redis地址
4.创建日志文件配置并授权
[root@ubuntu2004 ~]# mkdir -p /usr/log
[root@ubuntu2004 ~]# touch /usr/log/www.access.log
[root@ubuntu2004 ~]# chmod 644 /usr/log/www.access.log
[root@ubuntu2004 ~]# chown www-data:www-data /usr/log/www.access.log
5.配置数据库创建用户
[root@ubuntu2004 ~]# mysql
mysql> create user admin@'127.0.0.1' identified with mysql_native_password by '123456';
mysql> grant all on *.* to admin@'127.0.0.1';
mysql> quit;
6.创建nginx文件
[root@ubuntu2004 ~]# vim /etc/nginx/conf.d/test.conf
server{listen 80;server_name 10.0.0.5;root /data/www;index index.php;client_max_body_size 20m;location ~ \.php$|/ping|/status {root /data/www;fastcgi_pass 127.0.0.1:9000;fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;include fastcgi_params;}}
7.启动服务
[root@ubuntu2004 ~]# systemctl restart nginx.service redis-server.service mysql.service php8.1-fpm.service
8.进行验证
9.下载phpmyadmin
[root@ubuntu2004 ~]# wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-all-languages.zip
[root@ubuntu2004 ~]# unzip phpMyAdmin-5.2.0-all-languages.zip
[root@ubuntu2004 ~]# mv phpMyAdmin-5.2.0-all-languages/* /data/www
[root@ubuntu2004 ~]# cp /data/www/config.sample.inc.php config.inc.php
[root@ubuntu2004 ~]# vim /data/www/config.inc.php
$cfg['Servers'][$i]['host'] = '127.0.0.1';
10.测试网站是否注销
[root@ubuntu2004 ~]# redis-cli
127.0.0.1:6379> keys *
1) "PHPREDIS_SESSION:i5m1ikcn641d7f3mvpo3mnh1i7"
127.0.0.1:6379> type "PHPREDIS_SESSION:i5m1ikcn641d7f3mvpo3mnh1i7"
string#删除session然后刷新浏览器看是否注销
127.0.0.1:6379> flushall
OK
相关文章:

nginx的基本使用与其日志
文章目录 1.nginx编译安装脚本2.nginx平滑升级,以及其步骤3.nginx核心配置,及实现nginx多虚拟主机4.nginx日志格式定制5.nginx反向代理及https安全加密6.基于LNMP和Redis的phpmyadmin的会话保持,以及其完整步骤 1.nginx编译安装脚本 #编译安…...

linux | 苹果OpenCL(提高应用软件如游戏、娱乐以及科研和医疗软件的运行速度和响应)
点击上方"蓝字"关注我们 01、引言 >>> OpenCL 1.0 于 2008 年 11 月发布。 OpenCL 是为个人电脑、服务器、移动设备以及嵌入式设备的多核系统提供并行编程开发的底层 API。OpenCL 的编程语言类似于 C 语言。其可以用于包含 CPU、GPU 以及来自主流制造商如 …...
算法-UKF中Sigma点生成
void UKF::MakeSigmaPoints() {Eigen::VectorXd x_aug_ Eigen::VectorXd(n_x_);x_aug_.head(n_x_) x_;Eigen::MatrixXd P_aug Eigen::MatrixXd::Zero(n_x_, n_x_);// 转成正定矩阵P_aug pdefinite_svd(P_);// LLT分解Eigen::MatrixXd L P_aug.llt().matrixL();sigma_point…...

精选五款热门骨传导耳机分享,让你避免踩坑的陷阱
因为骨传导耳机独特的佩戴方式和声音的传播方式,受到了小耳、油耳以及运动爱好者的的喜爱,但也由于市面上的骨传导耳机品牌越来越多,很多朋友不知道该怎么选择,今天我挑选出市面上体验感较好,各方面比较出色的骨传导给…...

「字符串」前缀函数|KMP匹配:规范化next数组 / LeetCode 28(C++)
概述 为什么大家总觉得KMP难?难的根本就不是这个算法本身。 在互联网上你可以见到八十种KMP算法的next数组定义和模式串回滚策略,把一切都懂得特别混乱。很多时候初学者的难点根本不在于这个算法本身,而是它令人痛苦的百花齐放的定义。 有…...

python人工智能002:jupyter基本使用
小知识:将jupyter修改为中文,修改用户变量, 注意是用户变量,不是系统变量 新增用户变量 变量名:LANG 变量值:zh_CN.UTF8 然后重启jupyter 上一章的软件安装完成之后,就可以创建文件夹来学习写…...
Linux使用 firewalld管理防火墙命令
Linux 发行版中使用的动态防火墙管理工具。使用 firewalld,你可以查看防火墙状态、当前配置的规则以及开放的端口。以下是一些常用的 firewalld 命令来管理和查看防火墙状态及端口配置。 1. 查看防火墙状态 检查 firewalld 是否正在运行 sudo systemctl status f…...

二叉树(三)
一、二叉树的遍历 二叉树遍历是按照某种特定的规则,依次对二叉树中的结点进行相应的操作,并且每个结点只操作一次。 1.前序遍历(先根遍历) 前序遍历(Preorder Traversal也叫先序遍历)——根、左子树、右…...

05--kubernetes组件与安装
前言:终于写到kubernetes(k8s),容器编排工具不止k8s一个,它的优势在于搭建集群,也是传统运维和云计算运维的第一道门槛,这里会列出两种安装方式,详细步骤会在下文列出,文…...
EmguCV学习笔记 VB.Net和C# 下的OpenCv开发 C# 目录
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…...
探索TensorFlow:深度学习的未来
标题:探索TensorFlow:深度学习的未来 在当今快速发展的人工智能领域,TensorFlow无疑是最耀眼的明珠之一。TensorFlow是由Google Brain团队开发的一个开源机器学习框架,它以其强大的灵活性、易用性和高效的性能,迅速成…...

探索地理空间分析的新世界:Geopandas的魔力
文章目录 探索地理空间分析的新世界:Geopandas的魔力背景:为何选择Geopandas?这个库是什么?如何安装这个库?五个简单的库函数使用方法场景应用:Geopandas在实际工作中的应用常见bug及解决方案总结 探索地理…...

如何为网站申请免费SSL证书?
一、准备阶段 确定证书类型: 对于大多数个人博客和小型企业网站,DV(域名验证)SSL证书已足够使用,因为它仅验证域名所有权,成本较低且验证快速。准备域名: 确保你拥有一个有效的域名,…...

Java项目集成RocketMQ
文章目录 1.调整MQ的配置1.进入bin目录2.关闭broker和namesrv3.查看进程确认关闭4.编辑配置文件broker.conf,配置brokerIP15.开放端口109116.重新启动1.进入bin目录2.启动mqnamesrv和mqbroker1.启动 NameServer 并将输出重定向到 mqnamesrv.log2.**启动 Broker 并将…...
如何将 Bamboo agent 能力迁移到极狐GitLab tag 上?
极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…...
正则表达式入门:Python ‘ re ‘ 模块详解
正则表达式(Regular Expression,简称 re)是一种强大而灵活的工具,广泛用于字符串匹配、替换和分割等操作,尤其在处理网页爬虫数据时非常有用。Python 提供了 " re " 模块来支持正则表达式的使用,…...
thinkphp8.0+aliapy(支付宝)pc网站支付
环境:宝塔-centOS8.5,php8.3 第一步:安装alipay v3版本的安装依赖包; composer require alipaysdk/openapi:dev第二步:根据官方文档,把支付相关的类引用进来; <?php declare (strict_types 1);namespace app\p…...

高速信号的眼图、加重、均衡
目录 高速信号的眼图、加重、均衡眼图加重均衡线性均衡器CTLE判决反馈均衡器DFE 高速信号的眼图、加重、均衡 眼图 通常用示波器观察接收信号波形的眼图来分析码间串扰和噪声对系统性能的影响,从而估计系统优劣程度,因而眼图分析是高速互连系统信号完整…...

2024年PMP考前冲刺必背的学习笔记,整理好给你!
项目的四大特点:临时性、独特性、变革驱动性和创造商业价值。 项目管理:将知识、技能、工具与技术应用于项目活动,以满足项目的要求 Pestle:P政治,E经济,S社会,T技术,L法律,E环境 …...
增加服务器带宽可以提高资源加载速度吗?
答案是可以的 ,增加服务器带宽通常能够提高资源加速速度。带宽是服务器与互联网之间传输数据的速率,它决定了在单位时间内可以传输的数据量。以下是增加带宽如何提高资源加速速度的几个方面: 1.更快的数据传输:带宽增加后…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...