Linux入门攻坚——39、Nginx入门
Nginx:engine X
Tengine:淘宝改进维护的版本
Registry:
使用了libevent库:高性能的网络库
epoll()函数
Nginx特性:
模块化设计、较好的扩展性;(但不支持动态加载模块功能,淘宝的版本支持)
高可靠性:一个主控进程master,多个子进程worker
master --> worker
低内存消耗:
10K个keep-alive模式下的connection,仅需2.5MB的内存;
支持热部署:配置文件等更新,无需重启,就可以更新,即不停机而更新配置文件、日志文件滚动、升级程序版本;
支持事件驱动、AIO(异步IO)、mmap;
Nginx基本功能:
静态资源的web服务器,能缓存打开的文件描述符;
http、smtp、pop3协议的反向代理服务器;
缓存加速、负载均衡;
支持FastCGI(fpm,LNMP),uWSGI(Python)等;
模块化(非DSO机制)、过滤器zio、SSI及图像的大小调整;
支持SSL;
反向代理服务器:反向代理服务器位于用户与目标服务器之间,但对用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。
● 正向代理和代理服务器
正向代理即通常所说的代理,用于代表内部网络用户向Internet上的服务器(或称外部服务器,通常为Web服务器)发出连接请求,并接收响应结果,执行该代理功能的服务器称为代理服务器。使用代理服务器访问外部网络时,客户端必须在局域网设置中指明代理服务器的地址以及要代理的服务的端口号。
● 反向代理和代理服务器
反向代理的方向与正向代理相反,指代表外部网络用户向内部服务器发出请求,即接收来自Internet上用户的连接请求,并将这些请求转发给内部网络上的服务器,然后将从内部服务器上得到的响应返回给Internet上请求连接的客户:执行反向代理服务的服务器称为反向代理服务器,反向代理服务器对外部用户表现为一个服务器。
反向代理服务器具有负载均衡功能和缓存加速功能。
Nginx扩展功能:
基于名称和IP的虚拟主机;
支持keepalive
支持平滑升级
定制访问日志、支持使用日志缓冲区提供日志存储性能;
支持url rewrite
支持路径别名
支持基于IP及用户的访问控制
支持速率限制,支持并发数限制
Nginx的基本架构:
一个master进程,生成一个或多个worker进程
事件驱动:epoll(边缘触发)、kqueue、/dev/poll
复用器支持:select,poll,rt signal
支持sendfile,sendfile64
支持AIO,mmap
sendfile:对一个客户端请求的资源的读写过程基本如下:用户空间进程-->read系统调用-->磁盘IO将文件从磁盘DMA到内核空间缓存-->内存拷贝到用户空间缓存-->打包为响应报文 -->send系统调用 --> 用户空间缓存拷贝到内核写缓存-->网络IO,通过网卡发送。sendfile则是从磁盘-->内核缓存 --> 内核网络缓存,减少了数据拷贝,加快速度。
Nginx的工作模式:非阻塞、事件驱动、由一个master进程生成多个worker线程,每个worker响应n个请求;worker * n
Nginx的模块类型:
核心模块
Standard HTTP modules
Optional HTTP modules
Mail modules
3rd party modules
Nginx的安装方法:
源码:编译安装
制作好的程序包:rpm包
Nginx的编译安装:
1)下载一个源码包:nginx-1.6.3.tar.gz
2)编译需要的程序包:pcre-devel,pcre-devel是一个开发工具包,包含了用于编写和编译使用Perl兼容正则表达式(PCRE——Perl Compatible Regular Expressions)的程序的库文件和头文件。PCRE库提供了一系列函数,用于文本匹配和处理,广泛应用于各种编程语言和软件工具中。
yum install pcre-devel
3)执行./configure,可以使用 --help查看帮助:
--with开头的一般是默认没有启动,需要配置启动的,--without开头的一般是默认启动,如不需要需要配置关闭。
编译参数可能会根据版本的不同进行变化,./configure --help查看编译参数列表,常见的选项如下:
--prefix=<path> - 安装路径,如果没有指定,默认为/usr/local/nginx。
--sbin-path=<path> - nginx可执行命令的文件,如果没有指定,默认为<prefix>/sbin/nginx。
--conf-path=<path> - 在没有使用-c参数指定的情况下nginx.conf的默认位置,如果没有指定,默认为<prefix>/conf/nginx.conf。
--pid-path=<path> - nginx.pid的路径,如果没有在nginx.conf中通过“pid”指令指定,默认为<prefix>/logs/nginx.pid。
--lock-path=<path> - nginx.lock文件路径,如果没有指定,默认为<prefix>/logs/nginx.lock。
--error-log-path=<path> - 当没有在nginx.conf中使用“error_log”指令指定时的错误日志位置,如果没有指定,默认为<prefix>/logs/error.log。
--http-log-path=<path> - 当没有在nginx.conf中使用“access_log”指令指定时的访问日志位置,如果没有指定,默认为<prefix>/logs/access.log。
--user=<user> - 当没有在nginx.conf中使用“user”指令指定时nginx运行的用户,如果没有指定,默认为“nobody”。
--group=<group> - 当没有在nginx.conf中使用“user”指令指定时nginx运行的组,如果没有指定,默认为“nobody”。
--builddir=DIR - 设置构建目录。
--with-rtsig_module - 启用rtsig模块。
--with-select_module –without-select_module - 如果在configure的时候没有发现kqueue, epoll, rtsig或/dev/poll其中之一,select模块始终为启用状态。
--with-poll_module –without-poll_module - 如果在configure的时候没有发现kqueue, epoll, rtsig或/dev/poll其中之一,poll模块始终为启用状态。
--with-http_ssl_module - 启用ngx_http_ssl_module,启用SSL支持并且能够处理HTTPS请求。需要OpenSSL,在Debian系统中,对应的包为libssl-dev。
--with-http_realip_module - 启用ngx_http_realip_module
--with-http_addition_module - 启用ngx_http_addition_module
--with-http_sub_module - 启用ngx_http_sub_module
--with-http_dav_module - 启用ngx_http_dav_module
--with-http_flv_module - 启用ngx_http_flv_module
--with-http_stub_status_module - 启用”server status”(服务状态)页
--without-http_charset_module - 禁用ngx_http_charset_module
--without-http_gzip_module - 禁用ngx_http_gzip_module,如果启用,需要zlib包。
--without-http_ssi_module - 禁用ngx_http_ssi_module
--without-http_userid_module - 禁用ngx_http_userid_module
--without-http_access_module - 禁用ngx_http_access_module
--without-http_auth_basic_module - 禁用ngx_http_auth_basic_module
--without-http_autoindex_module - 禁用ngx_http_autoindex_module
--without-http_geo_module - 禁用ngx_http_geo_module
--without-http_map_module - 禁用ngx_http_map_module
--without-http_referer_module - 禁用ngx_http_referer_module
--without-http_rewrite_module - 禁用ngx_http_rewrite_module。如果启用,需要PCRE包。
--without-http_proxy_module - 禁用ngx_http_proxy_module
--without-http_fastcgi_module - 禁用ngx_http_fastcgi_module
--without-http_memcached_module - 禁用ngx_http_memcached_module
--without-http_limit_zone_module - 禁用ngx_http_limit_zone_module
--without-http_empty_gif_module - 禁用ngx_http_empty_gif_module
--without-http_browser_module - 禁用ngx_http_browser_module
--without-http_upstream_ip_hash_module - 禁用ngx_http_upstream_ip_hash_module
--with-http_perl_module - 启用ngx_http_perl_module
--with-perl_modules_path=PATH - 为perl模块设置路径
--with-perl=PATH - 为perl库设置路径
--http-client-body-temp-path=PATH - 为http连接的请求实体临时文件设置路径,如果没有指定,默认为<prefix>/client_body_temp
--http-proxy-temp-path=PATH - 为http代理临时文件设置路径,如果没有指定,默认为<prefix>/proxy_temp
--http-fastcgi-temp-path=PATH - 为http fastcgi临时文件设置路径,如果没有指定,默认为<prefix>/fastcgi_temp
--without-http - 禁用HTTP服务
--with-mail - 启用IMAP4/POP3/SMTP代理模块
--with-mail_ssl_module - 启用ngx_mail_ssl_module
--with-cc=PATH - 设置C编译器路径
--with-cpp=PATH - 设置C预处理器路径
--with-cc-opt=OPTIONS - 变量CFLAGS中附加的参数,用于FreeBSD中的PCRE库,同样需要指定–with-cc-opt=”-I /usr/local/include”,如果我们使用select()函数则需要同时增加文件描述符数量,可以通过–with-cc-opt=”-D FD_SETSIZE=2048”指定。
--with-ld-opt=OPTIONS - 通过连接器的附加参数,用于FreeBSD中的PCRE库,同样需要指定–with-ld-opt=”-L /usr/local/lib”。
--with-cpu-opt=CPU - 指定编译的CPU,可用的值为: pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64
--without-pcre - 禁用PCRE库文件,同时将禁用HTTP rewrite 模块,如果要在”location”指令中使用正则表达式,同样需要PCRE库。
--with-pcre=DIR - 设置PCRE库源文件路径。
--with-pcre-opt=OPTIONS - 在编译时为PCRE设置附加参数。
--with-md5=DIR - 设置md5库源文件路径。
--with-md5-opt=OPTIONS - 在编译时为md5设置附加参数。
--with-md5-asm - 使用md5汇编源。
--with-sha1=DIR - 设置sha1库源文件路径。
--with-sha1-opt=OPTIONS - 在编译时为sha1设置附加参数。
--with-sha1-asm - 使用sha1汇编源。
--with-zlib=DIR - 设置zlib库源文件路径。
--with-zlib-opt=OPTIONS - 在编译时为zlib设置附加参数。
--with-zlib-asm=CPU - 为指定的CPU使用zlib汇编源进行优化,可用值为: pentium, pentiumpro。
--with-openssl=DIR - 设置openssl库源文件路径。
--with-openssl-opt=OPTIONS - 在编译时为openssl设置附加参数。
--with-debug - 启用debug记录。
--add-module=PATH - 增加一个在PATH中的第三方模块。
--user 和--group指定运行使用的用户和组,先建立:
groupadd -r nginx
useradd -g niginx -r nginx
./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
make && make install
mkdir -pv /var/tmp/nginx/{client,fastcgi,proxy,uwsgi}
启动nginx:/usr/local/nginx/sbin/nginx
查看启动结果:ss -tnlp
80端口是nginx在监听。使用ps aux查看进程:
一个master process,一个worker process。
4)访问测试:http://192.168.147.133
5)在配置文件/etc/nginx/nginx.conf中,能看到配置项:worker_processes 1,所以在ps中看到worker进程只有一个。
Nginx配置文件:
main配置段:全局配置段
event:定义event模型工作特性
http {} :定义http协议相关配置
配置指令:要以分号结尾
语法格式:directive value1 [value2...]
支持使用变量:
内置变量:模块会提供自带内建变量定义
自定义变量:set var_name value
主配置段的指令:
用于调试、定位问题
正常运行必备的配置
优化性能的配置
事件相关的配置
Niginx的I/O模型:
non-blocking、event-driven、aio
主配置段的指令:
正常运行的必备配置:
1、user USERNAME [GROUPNAME],指定运行worker的用户和组:user nginx nginx
2、pid /path/to/pid_file,指定nginx守护进程的pid文件:pid /var/run/nginx/nginx.pid
3、worker_rlimit_nofile #,指定所有worker进程所能打开的最大文件句柄数
4、worker_rlimit_core #,
性能优化相关的配置:
1、worker_processes #,worker进程的打开个数,通常应略少于CPU物理核心数;
2、worker_cpu_affinity cpumask...,
优点:提升缓存的命中率;
context switch:会产生CPU的不必要的消耗;
cpumask:使用8位:0000 0001等
3、timer_resolution,计时器解析度,降低此值,可减少gettimeofday()系统调用次数;
4、worker_priority number,指明worker进程的nice值:-20,19 --> 100,139
事件相关的配置:
1、accept_mutex {off | on},master调度用户请求至各worker进程时使用的负载均衡锁,on表示能让多个worker轮流地、序列化地去响应新请求;
2、lock_file file,accept_mutex用到的锁文件路径;
3、use [epoll | rssig | select | poll],指明使用的事件模型,建议让Nginx自行选择;
4、worker_connections #,设定单个worker进程所能处理的最大并发连接数量;
用于调试、定位问题的配置:
1、daemon {on | off},是否以守护进程方式运行nginx,调试时应该设置为off;
2、master_process {on | off},是否以master/worker模型来运行nginx;调试时可以设置为off;
3、error_log 位置 级别,若要使用debug级别,需要在编译nginx时使用了--with_debug选项;
总结:常需要进行调整的参数
worker_processes,worker_connections,worker_cpu_affinity,worker_priority
新改动配置生效的方式:
nginx -s reload 或者:stop,quit,reopen
Nginx作为Web服务器时使用的配置:
http { }:由ngc_http_core_module模块所引入;
配置框架:
http{
upstream{}
server{
location URL{
root “/path/to/somedir”;
...
} # 类似于httpd中的<Location>,用于定义URL与本地文件系统的映射关系;
location URL {
if ... {
...
}
}
} # 每个server类似于httpd中的一个<VirtualHost>;
server{ ... }
}
注意:与http相关的指令仅能够放置于http、server、location、upstream、if上下文,但有些指令仅应用于这5种上下文中的某些种;
配置指令:
1、server {},定义一个虚拟主机。
2、listen ,指定监听地址和端口
listen address[:port]、listen port 、listen unix:path
3、server_name NAME [。。。];后可跟多个主机,名称还可使用正则表达式(~)或通配符;
(1)先做精确匹配检查;
(2)左侧通配符匹配检查:*.ceshi.com
(3)右侧通配符检查:mail.*
(4)正则表达式匹配检查:~^.*\.ceshi\.com$
(5)default_server;
4、root path;设置资源;路径映射,用于指明请求的URL所对应的资源所在的文件系统上的起始路径;
5、location [ = | ~ | ~* | ^~] uri {...}
location @name {...}
功能:允许根据用户请求的URI来匹配定义的各location:匹配到时,此请求将被相应的location配置块中的配置所处理,例如做访问控制等功能。
=:精确匹配检查
~:正则表达式模式匹配检查,区分字符大小写;
~*:正则表达式模式匹配检查,不区分字符大小写;
^~:URI的前半部分匹配,不支持正则表达式;
匹配的优先级:精确匹配(=)、^~、~、~*、不带任何符号的location;
6、alias path;用于location配置段,定义路径别名
注意:root表示指明路径为对应的location "/" URL;alias表示路径映射,即location指令后定义的URL是相对于alias所指明的路径而言;
location /images/ {
root /vhosts/web1;
}
http://www.ceshi.com/images/a.jpg <-- /vhosts/web1/images/a.jpg
location /images/ {
alias /www/pic;
}
http://www.ceshi.com/images/a.jpg <-- /www/pic/a.jpg
7、index file,默认主页面:index index.php index.html;
8、error_page,错误页面:error_page code [...] [ =code ] URI | @name
根据http响应状态码来指明特定的错误页面;
error_page 404 /404_customed.html
[ = code ]:以指定的响应码进行响应,而不是默认的原来的响应,默认表示以新资源的响应码为其响应码;
=号的使用效果:
9、基于IP的访问控制机制
allow IP/Network;
deny IP/Network;
只放行一个网段:
10、基于用户的访问控制
basic,digest
auth_basic “”;
auth_basic_user_file /PATH/TO/PASSWD_FILE; 账号密码文件建议使用htpasswd来创建。
提示信息好像没有显示出来。
11、https服务器
生成私钥,生成证书签署请求,并获得证书;
在私有CA目录下生成CA的私钥,放置在private子目录中:
(umask 077;openssl genrsa -out private/cakey-nginx.pem 2048)
生成自签证书,位于CA目录:
openssl req -new -x509 -key private/cakey-nginx.pem -out cacert-nginx.pem -days 365
以上是创建私有CA的步骤,以下是为nginx服务器生成证书:
nginx服务器自身生成私钥:
(umask 077;openssl genrsa -out nginx.key 1024)
nginx服务器生成证书签发申请文件:
openssl req -new -key nginx.key -out nginx.csr
注意这一步中的CN要写准确网址,这个网址是对外服务的网址,如这里使用www.myngx.com
CA签发证书:
openssl ca -in nginx.csr -out nginx.crt -days 365
配置nginx的配置文件:
nginx重新加载配置后:
客户端修改一下hosts文件:
客户端可以以www.myngx.com访问:
因为私有CA证书没有导入浏览器,浏览器无法验证服务器证书,选择继续访问,可以https访问网站了。
12、stub_status {on | off},仅能用于location上下文
13、rewrite regex replacement flag,URL重写(重定向),如:
rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;
http://www.myngx.com/images/a/b/c/1.jpg --> /imgs/a/b/c/1.jpg
flag:
last:一旦此rewrite规则重写完成后,不再被后面其他的rewrite规则进行处理,而是由User Agent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程。
break:一旦此rewrite规则重写完成后,由UserAgent对新的URL重新发起请求,且不再被当前location内的任何rewrite规则所检查。
redirect:以302响应码(临时重定向)返回新的URL。
permanent:以301响应码(永久重定向)返回新的URL。
14、if,语法:if (condition) {...}
应用环境:server,location
condition:
(1)变量名:变量值为空串,或者以“0”开始,则为false,其他均为true;
(2)以变量为操作数构成的比较表达式,可使用=,!=等比较操作符进行测试;
(3)正则表达式的模式匹配操作:
~:区分大小写的模式匹配检查;
~*:不区分大小写的模式匹配检查;
!~和!~*:对上面两种测试取反;
(4)测试路径为文件可能性:-f,!-f
(5)测试指定路径为目录的可能性:-d,!-d
(6)测试文件的存在性:-e,!-e
(7)检查文件是否有执行权限:-x,!-x
例如:if ($http_user_agent ~* MSIE){
rewrite ^(.*)$ /msie/$1 break;
}
15、防盗链
location ~* \.(jpg|gif|jpeg|png)$ {
valid_referer none blocked www.myngx.com;
if ($invalid_referer) {
rewrite ^/ http://www.myngx.com/xxx.html;
}
}
16、定制访问日志格式
log_format
注意:此处可用变量为nginx各模块内建变量。
网络连接相关的配置:
1、keepalive_timeout # :长连接的超时时长,默认75s;
2、keepalive_requests #:在一个长连接上所能够允许请求的最大资源数;
3、keepalive_disable [msie6|safari|none] :为指定类型的User Agent禁用长连接
4、tcp_nodelay on|off :是否对长连接使用TCP_NODELAY选项;
5、client_header_timeout #:读取http请求报文首部的超时时长;
6、client_body_timeout # :读取http请求报文body部分的超时时长;
7、send_timeout #:发送响应报文的超时时长;
fastcgi的相关配置:
LNMP:php启用fpm模型;
相关文章:

Linux入门攻坚——39、Nginx入门
Nginx:engine X Tengine:淘宝改进维护的版本 Registry: 使用了libevent库:高性能的网络库 epoll()函数 Nginx特性: 模块化设计、较好的扩展性;(但不支持动态加载模块功能&#…...

计算机网络的类型
目录 按覆盖范围分类 个人区域网(PAN) 局域网(LAN) 城域网(MAN) 4. 广域网(WAN) 按使用场景和性质分类 公网(全球网络) 外网 内网(私有网…...

解决 MySQL 5.7 安装中的常见问题及解决方案
目录 前言1. 安装MySQL 5.7时的常见错误分析1.1 错误原因及表现1.2 错误的根源 2. 解决方案2.1 修改YUM仓库配置2.2 重新尝试安装2.3 处理GPG密钥错误2.4 解决依赖包问题 3. 安装成功后的配置3.1 启动MySQL服务3.2 获取临时密码3.3 修改root密码 4. 结语 前言 在Linux服务器上…...

VITE+VUE3+TS环境搭建
前言(与搭建项目无关): 可以安装一个node管理工具,比如nvm,这样可以顺畅的切换vue2和vue3项目,以免出现项目跑不起来的窘境。我使用的nvm,当前node 22.11.0 目录 搭建项目 添加状态管理库&…...
【设计模式】【创建型模式(Creational Patterns)】之原型模式(Prototype Pattern)
1. 设计模式原理说明 原型模式(Prototype Pattern) 是一种创建型设计模式,它允许你通过复制现有对象来创建新对象,而无需通过构造函数来创建。这种方式可以提高性能,尤其是在对象初始化需要消耗大量资源或耗时较长的情…...

黄仁勋:人形机器人在内,仅有三种机器人有望实现大规模生产
11月23日,芯片巨头、AI时代“卖铲人”和最大受益者、全球市值最高【英伟达】创始人兼CEO黄仁勋在香港科技大学被授予工程学荣誉博士学位;并与香港科技大学校董会主席沈向洋展开深刻对话,涉及人工智能(AI)、计算力、领导…...

【C语言】宏定义详解
C语言中的宏定义(#define)详细解析 在C语言中,宏定义是一种预处理指令,使用 #define 关键字定义。它由预处理器(Preprocessor)在编译前处理,用于定义常量、代码片段或函数样式的代码替换。宏是…...
LangChain——多向量检索器
每个文档存储多个向量通常是有益的。在许多用例中,这是有益的。 LangChain 有一个基础 MultiVectorRetriever ,这使得查询此类设置变得容易。很多复杂性在于如何为每个文档创建多个向量。本笔记本涵盖了创建这些向量和使用 MultiVectorRetriever 的一些常…...
《岩石学报》
本刊主要报道有关岩石学基础理论的岩石学领域各学科包括岩浆岩石学、变质岩石学、沉积岩石学、岩石大地构造学、岩石同位素年代学和同位素地球化学、岩石成矿学、造岩矿物学等方面的重要基础理论和应用研究成果,同时也刊载综述性文章、问题讨论、学术动态以及书评等…...

数据结构 (12)串的存储实现
一、顺序存储结构 顺序存储结构是用一组连续的存储单元来存储串中的字符序列。这种存储方式类似于线性表的顺序存储结构,但串的存储对象仅限于字符。顺序存储结构又可以分为定长顺序存储和堆分配存储两种方式。 定长顺序存储: 使用静态数组存储ÿ…...

职场发展陷阱
一、只有执行,没有思考 二、只有过程,没有结果 三、只有重复,没有精进 四、不懂向上管理 五、定期汇报 六、不要憋大招 七、多同步信息...

Xcode15(iOS17.4)打包的项目在 iOS12 系统上启动崩溃
0x00 启动崩溃 崩溃日志,只有 2 行,看不出啥来。 0x01 默认配置 由于我开发时,使用的 Xcode 14.1,打包在另外一台电脑 Xcode 15.3 Xcode 14.1 Build Settings -> Asset Catalog Compliter - Options Xcode 15.3 Build S…...
极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【二】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...

PVE相关名词通俗表述方式———多处细节实验(方便理解)
PVE设置初期,对CIDR、 网关、 LinuxBridge、VLAN等很有困惑的朋友一定很需要一篇能够全面通俗易懂的方式去理解PVE 中Linux网桥的工作方式,就像操作一个英雄,多个技能,还是需要一点点去学习理解的,如果你上来就对着别人…...

Ansible--自动化运维工具
Ansible自动化运维工具介绍 1.Ansible介绍 Ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。…...

微信小程序学习指南从入门到精通
🗽微信小程序学习指南从入门到精通🗽 🔝微信小程序学习指南从入门到精通🔝✍前言✍💻微信小程序学习指南前言💻一、🚀文章列表🚀二、🔯教程文章的好处🔯1. ✅…...

微服务篇-深入了解使用 RestTemplate 远程调用、Nacos 注册中心基本原理与使用、OpenFeign 的基本使用
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 认识微服务 1.1 单体架构 1.2 微服务 1.3 SpringCloud 框架 2.0 服务调用 2.1 RestTemplate 远程调用 3.0 服务注册和发现 3.1 注册中心原理 3.2 Nacos 注册中心 …...
使用 Django 构建支持 Kubernetes API 测试连接的 POST 接口
文章目录 使用 Django 构建支持 Kubernetes API 测试连接的 POST 接口功能需求使用 kubectl 获取 Token命令解析输出示例 完整代码实现Kubernetes API 客户端类功能说明 Django 接口视图关键点解析 路由配置 接口测试请求示例响应结果成功错误 优化建议1. 安全性2. 错误处理3. …...
十二、正则表达式、元字符、替换修饰符、手势和对话框插件
1. 正则表达式 1.1 基本使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&g…...

计算机毕业设计Python+大模型美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...