从零开始的nginx学习世界

news2024/9/20 13:18:15

一:nginx概述

1.1 nginx是什么

1:Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日。
2:Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
3:Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。
4:Nginx支持热部署,启动简单,可以做到7*24不间断运行。几个月都不需要重新启动。

1.2:为什么使用nginx

1. 更快

单次请求更快,高峰期也更快

2. 高扩展性

极具扩展性,它由多个不同功能、不同层次、不同类型且耦合度极高的模块组成,这种低耦合的设计,造就了它庞大的第三方模块

3. 高可靠性

每个worker进程相对独立,master进程在某个worker进程出错时能迅速拉起新的worker进程

nginx的可靠性来源于其核心框架代码的优秀设计、模块设计的简单性。

官方提供的常用模块都很稳定。

4. 低内存消耗

一般情况下10000个非活跃的keep-alive连接仅消耗2.5M的内存

5. 单机支持10万以上的并发连接

nginx支持的并发连接上限取决于内存,10万远没封顶

6. 热部署

master管理进程

worker工作进程

7. 最自由的BSD许可协议

1.3 nginx功能介绍

静态的web资源服务器html,图片,js,css,txt等静态资源

http/https协议的反向代理

结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求

tcp/udp协议的请求转发(反向代理)

imap4/pop3协议的反向代理

1.4 基础特性

模块化设计,较好的扩展性 高可靠性

支持热部署:不停机更新配置文件,升级版本,更换日志文件

低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存

event-driven,aio,mmap,sendfil

1.5 web服务相关功能

虚拟主机(server)

支持 keep-alive 和管道连接(利用一个连接做多次请求)

访问日志(支持基于日志缓冲提高其性能)

url rewirte

路径别名

基于IP及用户的访问控制

支持速率限制及并发数限制

重新配置和在线升级而无须中断客户的工作进程

二: nginx架构和进程

2.1 主要特性

  • 高并发处理能力:Nginx 使用异步、非阻塞事件驱动架构,能够高效地处理大量并发连接。
  • 低资源消耗:相对于传统的进程或线程模型,Nginx 使用更少的内存和 CPU 资源。
  • 模块化设计:Nginx 的功能通过模块实现,用户可以根据需求加载不同的模块。
  • 高可扩展性:通过第三方模块和 Lua 脚本,Nginx 能够轻松扩展其功能。
  • 丰富的功能:支持 HTTP/2、反向代理、负载均衡、缓存、SSL/TLS、WebSocket 等

2.2 核心架构

Nginx 的核心架构设计是其高性能和高可用性的关键。核心架构包括模块化设计、事件驱动模型、Master-Worker 进程模型和高效的请求处理流程。

2.3 nginx进程结构

web请求处理机制

       多进程方式:服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直 到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务 器资源耗尽而无法提供请求

       多线程方式:与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程和此客 户端进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了web服务器 对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可 以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作 了,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定。

       Nginx是多进程组织模型,而且是一个由Master主进程和Worker工作进程组成。

2.4 nginx进程角色

  Nginx在内存中运行多个进程,一个master进程和多个worker进程。同时还有一些特殊用途的进程,例如缓存加载和缓存管理进程。在nginx 1.x版本,所有进程都是单线程的,使用共享内存作为进程间通信机制。Master进程使用root用户权限运行,其他进程使用非特权用户权限运行。

  master进程负责下列工作:

  • 读取和校验配置文件
  • 创建、绑定、关闭套接字
  • 启动、终止、维护所配置的worker进程数目
  • 不中断服务刷新配置文件
  • 不中断服务升级程序(启动新程序或在需要时回滚)
  • 重新打开日志文件
  • 编译嵌入Perl脚本

  Worker进程接受、处理来自客户端的连接,提供反向代理和过滤功能以及其他nginx所具有的所有功能。由于worker进程是web服务器每日操作的实际执行者,所以对于监控nginx实例行为,系统管理员应该保持关注worker进程。

  缓存加载进程负责检查磁盘上的缓存数据并且在内存中维护缓存元数据的数据库。基本上,缓存加载进程使用特定分配好的目录结构来管理已经存储在磁盘上的文件,为nginx提供准备,它会遍历目录,检查缓存内容元数据,当所有数据可用时就更新相关的共享内存项。

       缓存管理进程主要负责缓存过期和失效。它在nginx正常工作时常驻内存中,当有异常则由master进程重启

主进程(master process)的功能:

1.对外接口:接收外部的操作(信号)

2.对内转发:根据外部的操作的不同,通过信号管理 Worker

3.监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程

4.读取Nginx 配置文件并验证其有效性和正确性

5.建立、绑定和关闭socket连接

6.按照配置生成、管理和结束工作进程

7.接受外界指令,比如重启、升级及退出服务器等指令

8.不中断服务,实现平滑升级,重启服务并应用新的配置

9.开启日志文件,获取文件描述符

10.不中断服务,实现平滑升级,升级失败进行回滚处理

11.编译和处理perl脚本

工作进程(worker process)的功能:

1.所有 Worker 进程都是平等的

2.实际处理:网络请求,由 Worker 进程处理 Worker进程数量:一般设置为核心数,充分利用CPU资源,同时避免进程数量过多,导致进程竞争 CPU资源

3.增加上下文切换的损耗

4.接受处理客户的请求 将请求依次送入各个功能模块进行处理

5.I/O调用,获取响应数据 与后端服务器通信,接收后端服务器的处理结果

6.缓存数据,访问缓存索引,查询和调用缓存数据

7.发送请求结果,响应客户的请求

8.接收主程序指令,比如重启、升级和退出等

2.4 nginx缓存简介

      Nginx在文件系统上使用分层数据存储实现缓存。缓存主键可配置,并且可使用不同特定请求参数来控制缓存内容。缓存主键和元数据存储在共享内存段中,缓存加载进程、缓存管理进程和worker进程都能访问。目前不支持在内存中缓存文件,但可以用操作系统的虚拟文件系统机制进行优化。每个缓存的响应存储到文件系统上的不同文件,Nginx配置指令控制存储的层级(分几级和命名方式)。如果响应需要缓存到缓存目录,就从URL的MD5哈希值中获取缓存的路径和文件名。

  将响应内容缓存到磁盘的过程如下:当nginx从后端服务器读取响应时,响应内容先写到缓存目录之外的一个临时文件。nginx完成请求处理后,就将这个临时文件重命名并移到缓存目录。如果用于代理功能的临时目录位于另外一个文件系统,则临时文件会被拷贝一次,所以建议将临时目录和缓存目录放到同一个文件系统上。如果需要清除缓存目录,也可以很安全地删除文件。一些第三方扩展可以远程控制缓存内容,而且整合这些功能到主发布版的工作已经列入计划。

三 : nginx

3.1 正向反向代理

正向代理: 我们平时需要访问国外的浏览器是不是很慢,比如我们要看推特,看GitHub等等。我们直接用国内的服务器无法访问国外的服务器,或者是访问很慢。所以我们需要在本地搭建一个服务器来帮助我们去访问。那这种就是正向代理。(浏览器中配置代理服务器)

反向代理: 那什么是反向代理呢。比如:我们访问淘宝的时候,淘宝内部肯定不是只有一台服务器,它的内部有很多台服务器,那我们进行访问的时候,因为服务器中间session不共享,那我们是不是在服务器之间访问需要频繁登录,那这个时候淘宝搭建一个过渡服务器,对我们是没有任何影响的,我们是登录一次,但是访问所有,这种情况就是 反向代理。对我们来说,客户端对代理是无感知的,客户端不需要任何配置就可以访问,我们只需要把请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的地址。(在服务器中配置代理服务器)

3.2 nginx的负载均衡

什么是负载均衡:

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

简单来说就是:现有的请求使服务器压力太大无法承受,所有我们需要搭建一个服务器集群,去分担原先一个服务器所承受的压力,那现在我们有ABCD等等多台服务器,我们需要把请求分给这些服务器,但是服务器可能大小也有自己的不同,所以怎么分?如何分配更好?又是一个问题。

Nginx给出来三种关于负载均衡的方式:

轮询法(默认方法):
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。
weight权重模式(加权轮询):
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的
情况。
这种方式比较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源。weight和访问比率成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大
ip_hash:
上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。
我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

3.3 动静分离

3.4 零拷贝技术

3.4.1 什么是零拷贝

零拷贝就是上述问题的一个解决方案,通过尽量避免拷贝操作来缓解 CPU 的压力。零拷贝并没有真正做 到“0”拷贝,它更多是一种思想,很多的零拷贝技术都是基于这个思想去做的优化

3.4.2 零拷贝基础

零拷贝
从一个存储区域到另一个存储区域的 copy 任务没有 CPU 参与。零拷贝通常用于网络文件传输,以减少 CPU 消耗和内存带宽占用,减少用户空间与 CPU 内核空间的拷贝过程,减少用户上下文与 CPU 内核上下文间的切换,提高系统效率。

用户空间:
用户可操作的内存缓存区域,CPU 内核空间是指仅 CPU 可以操作的寄 存器缓存及内存缓存区域。

用户上下文:
指的是用户状态环境,CPU内核上下文指的是CPU内核状态环境。 零拷贝需要 DMA 控制器的协助。DMA,Direct Memory Access,直接内存存取,是 CPU的组成部分,其可以在 CPU 内核(算术逻辑运算器 ALU 等)不参与运算的情况下将数据从一个地址空间拷贝到另一个地址空间。

3.4.3 零拷贝方式

该拷贝方式共进行了 2 次用户空间与内核空间的上下文切换,以及 3 次数据拷贝,但整 个拷贝过程均没有CPU 的参与,这就是零拷贝

3.5 nginx的并发处理机制

一般情况下并发处理机制有三种:多进程、多线程,与异步机制。 Nginx 对于并发的处 理同时采用了三种机制。当然,其异步机制使用的是异步非阻塞方式。

我们知道 Nginx 的进程分为两类:master 进程与 worker 进程。
master进程负责worker进程的生命周期、接收外部命令、解析Perl脚本。
worker进程用于接收和处理客户端的请求。
每个 master 进程可以生 成多个 worker 进程,所以其是多进程的。
每个 worker 进程可以同时处理多个用户请求,每 个用户请求会由一个线程来处理,所以其是多线程的。

那么,如何解释其“异步非阻塞”并发处理机制呢?
worker 进程采用的就是 epoll 多路复用机制来对后端服务器进行处理的。当后端服务器返回结果后,后端服务器就会回调 epoll 多路复用器,由多路复用器对相应的 worker 进程进行通知。此时,worker 进程就会挂起当前正在处理的事务,拿 IO 返回结果去响应客户端请求。响应完毕后,会再继续执行挂起的事务。这个过程就是“异步非阻塞”的。

四:nginx模块介绍

4.1  nginx模块

1. 核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件驱动机制 、进程管理等核心功能
2. 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应头设置等
3. 可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如:Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等
4. 邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持
5. Stream服务模块: 实现反向代理功能,包括TCP协议代理 反向
6. 第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支持等

7. 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等

nginx高度模块化,但其模块早期不支持DSO机制;1.9.11 版本支持动态装载和卸载

4.2 模块分类

核心模块:core module

标准模块:

HTTP 模块: ngx_http_* HTTP Core modules   #默认功能

HTTP Optional modules #需编译时指定

Mail 模块: ngx_mail_*

Stream 模块 ngx_stream_*

第三方模块

ngx_http_core_module         核心模块
ngx_http_access_module       访问控制模块
ngx_http_auth_basic_module   身份验证模块
ngx_http_gzip_module         压缩模块
ngx_http_log_module          日志模块
ngx_http_proxy_module        代理模块
ngx_http_rewrite_module      重写模块
ngx_http_stub_status_module  状态页
ngx_http_upstream_module     反向代理模块

五:实验环节

 5.1 nginx的源码编译

解压1.23.0压缩包

生成文件

关闭debug模式

[root@nginx nginx-1.24.0]# vim auto/cc/gcc

[root@nginx nginx-1.24.0]# ./configure --prefix=/usr/local/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

[root@nginx nginx-1.24.0]# make && make install

export PATH=$PATH:/usr/local/nginx/sbin

测试

5.2  nginx的平滑升级与回滚:基于源码编译

解压echo文件和1.26.2版本

要添加--add-moudle=/root/echo-nginx-module-0.63

[root@nginx nginx-1.26.2]# make      !!!直接make不可以install

回收work进程

测试

回滚版本

[root@nginx sbin]# kill -HUP 44563

[root@nginx sbin]# kill -WINCH 44615
[root@nginx sbin]# kill -9 44615

5.3  nginx命令参数

-V  :show version and configure options then exit #显示版本和编译参数  

-t    : test configuration and exit #测试配置文件是否异

-T   : test configuration, dump it and exit #测试并打印  

-q   : suppress non-error messages during configuration testing #静默 模式  

-s signal   : send signal to a master process: stop, quit, reopen, reload # 发送信号,reload信号 会生成新的worker,但master不会重新生成  

-p prefix   : set prefix path (default: /etc/nginx/) #指定Nginx 目录  

-c filename   : set configuration file (default: /etc/nginx/nginx.conf) # 配置文件路径  

-g directives : set global directives out of configuration file #设置全局指令,注意和 配置文件不要同时配置,否则冲突

例如-V -T

5.4  nginx启动文件编写

[root@nginx sbin]# vim  /lib/systemd/system/nginx.service

[root@nginx sbin]# systemctl daemon-reload     !!必须要daemon-reload!!
[root@nginx sbin]# nginx -s stop
[root@nginx sbin]# ps aux | grep nginx
root       44749  0.0  0.1 221680  2328 pts/1    S+   13:42   0:00 grep --color=auto nginx

5.5  nginx全局参数优化

修改配置文件

[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf

[root@nginx ~]# vim /etc/security/limits.conf

nginx            -      nofile          100000

下载httpd-tools测试

[root@nginx ~]# dnf install httpd-tools -y

 5.6 nginx下的root和alias

建立文件并编辑

[root@nginx ~]# mkdir -p /usr/local/nginx/conf.d

[root@nginx ~]# vim /usr/local/nginx/conf.d/vhost.conf
[root@nginx ~]# cat /usr/local/nginx/conf.d/vhost.conf
server {
     listen 80;
         server_name www.timinglee.org;
         root /data/web/html;
         index index.html;

         location /test1/ {
             root /datda/web;
         }
     location /test2 {
          alias /datda/web/test1;
     }
}
[root@nginx ~]# mkdir -p /data/web/html
[root@nginx ~]# echo www.timinglee.org > /data/web/html/index.html

[root@nginx ~]# mkdir -p /datda/web/test1
[root@nginx ~]# echo /datda/web/test1 > /datda/web/test1/index.html

 5.7 nginx的用户认证

设置密码为123

[root@nginx ~]# htpasswd -cm /usr/local/nginx/.htpasswd admin
New password:
Re-type new password:
Adding password for user admin
[root@nginx ~]# cat /usr/local/nginx/.htpasswd
admin:$apr1$TCpfGsZF$XxhVq0cRxahNpzWoweTq50

[root@nginx ~]# cat  /usr/local/nginx/conf.d/vhost.conf
server {
     listen 80;
         server_name www.timinglee.org;
         root /data/web/html;
         index index.html;

         location /lee {
                 root /data/web;
                         auth_basic "login passwd !!";
                         auth_basic_user_file "usr/local/nginx/.thpasswd";
         }
}

5.8 自定义日志

[root@nginx ~]# vim /usr/local/nginx/conf.d/vhost.conf

[root@nginx ~]# mkdir /var/log/timinglee.org

[root@nginx ~]# nginx -s reload

 5.9 nginx的文件检测

[root@nginx ~]# vim /usr/local/nginx/conf.d/vhost.conf
server {
     listen 80;
     server_name www.timinglee.org;
     root /data/web/html;
     index index.html;
     error_log /var/log/timinglee.org/error.log;
     access_log /var/log/timinglee.org/access.log;
     try_files $uri $uri.html $uri/index.html /error/default.html;
 

[root@nginx ~]# mkdir /data/web/html
[root@nginx ~]# echo error default > /data/web/html/error/default.html

5.10 nginx中的长连接管理

[root@nginx ~]# dnf install telnet -y    ###安装长连接测试工具
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf


修改可看时间为60

5.11 下载服务器的设定以及优化

[root@nginx ~]# mkdir /data/web/download
[root@nginx ~]# dd if=/dev/zero of=/data/web/download/leefile bs=1M count=100
记录了100+0 的读入
记录了100+0 的写出
104857600字节(105 MB,100 MiB)已复制,0.176053 s,596 MB/s

[root@nginx ~]# vim /usr/local/nginx/conf.d/vhost.conf

     location /download {
             root /data/web;
             autoindex on;
     }

显示本地时间

[root@nginx ~]# vim /usr/local/nginx/conf.d/vhost.conf

     location /download {
             root /data/web;
             autoindex on;
             autoindex_localtime on;
     }

显示文件粗略大小

[root@nginx ~]# vim /usr/local/nginx/conf.d/vhost.conf

     location /download {
             root /data/web;
             autoindex on;
             autoindex_localtime on;
             autoindex_exact_size off;

5.12 nginx状态页

[root@nginx conf.d]# vim status.conf

[root@nginx conf.d]# nginx -s reload

5.13 源码编译php

重新编译nginx1.26

[root@nginx nginx-1.26.2]# make && make install

编译php

[root@nginx ~]# tar zxf php-8.3.9.tar.gz

[root@Nginx ~]# yum install -y bzip2 systemd-devel libxml2-devel sqlite-devel libpng-devel libcurl-devel oniguruma-devel(需要在阿里云找)

[root@nginx php-8.3.9]# make && make install

编译成功!!!这个是真的慢啊(OvO)

5.14 php配置方法

[root@nginx ~]# cd /usr/local/php/etc/
[root@nginx etc]# cp -p php-fpm.conf.default php-fpm.conf

[root@nginx etc]# vim php-fpm.conf

[root@nginx etc]# cd php-fpm.d/
[root@nginx php-fpm.d]#  cp www.conf.default www.conf -p
[root@nginx php-fpm.d]# cd /root/php-8.3.9/
[root@nginx php-8.3.9]# cp php.ini-production /usr/local/php/etc/php.ini
更改时区

[root@nginx etc]# vim php.ini

生成启动脚本

[root@nginx etc]# cd /root/php-8.3.9/
[root@nginx php-8.3.9]# cd sapi/
[root@nginx sapi]# cd fpm/
[root@nginx fpm]# cp php-fpm.service /lib/systemd/system/
[root@nginx fpm]# pwd
/root/php-8.3.9/sapi/fpm
[root@nginx fpm]# vim /lib/systemd/system/php-fpm.service

将ProtectSystem注释掉

更改端口

[root@nginx php]# ls
bin  etc  include  lib  php  sbin  var
[root@nginx php]# cd etc/php-fpm.d/
[root@nginx php-fpm.d]# ls
www.conf  www.conf.default
[root@nginx php-fpm.d]# vim www.conf

[root@nginx php-fpm.d]# systemctl restart php-fpm.service

5.15 nginx和php的整合

[root@nginx bin]# vim ~/.bash_profile
[root@nginx bin]# cat ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs
export PATH=$PATH:/usr/local/nginx/sbin:/usr/local/php/bin:/usr/local/php/sbin

[root@nginx bin]# source  ~/.bash_profile

[root@nginx bin]# cd /data/web/php
[root@nginx php]# ls
index.php
[root@nginx php]# cat index.php
<?php
  phpinfo();
>

[root@nginx nginx]# mkdir conf.d
[root@nginx nginx]# vim conf/nginx.conf

[root@nginx conf.d]# vim vhosts.conf
[root@nginx conf.d]# cat vhosts.conf
server {
     listen 80;
         server_name www.timinglee.org;
         root /data/web/html;
         index index.html;

         location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                include fastcgi.conf;

         }
}

成功出现php页面

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux ubuntu 24.04 运行《文明5》游戏,解决游戏中文设置的问题!

Linux ubuntu 24.04 运行《文明5》游戏&#xff0c;解决游戏中文设置的问题&#xff01; 《文明5》是一款回合制经营策略游戏&#xff0c;拼的就是科技发展速度&#xff0c;点的是科技树&#xff0c;抢的就是科技制高点&#xff0c;但是真的是时间漫长&#xff0c;可能需要好几…

解密高可靠分布式锁:优化策略与技术实现指南

随着系统架构逐渐从单机走向分布式&#xff0c;如何在分布式环境下保证线程同步执行成为一个不可忽视的问题。分布式锁作为解决这一问题的关键技术&#xff0c;为分布式系统中的资源共享和任务协调提供了重要支持。选择合适的分布式锁实现方式&#xff0c;可以有效提高系统的可…

重塑“上海我店模式”的创新生态与绿色消费浪潮

在数字经济的浪潮中&#xff0c;一个名为“上海我店模式”的平台迅速崛起&#xff0c;短短三年内便实现了流水破百亿的壮举。该平台巧妙地将绿色消费积分机制融入本地生活与异业联盟商圈&#xff0c;不仅激活了庞大的私域流量&#xff0c;更以其独特的商业模式引领了消费新风尚…

hyper-v ubuntu下连接嵌入式linux板卡

用hyper-v非常的方便&#xff0c;不用装vm也不会那么臃肿&#xff0c;但如何在hyper-v和嵌入式板卡之间进行通讯呢&#xff1f; 1.环境 采用的是100ask-imx6ull板卡&#xff0c;hyper-v装的是ubuntu22系统。 hyper-v根据文章hyper-v上外网已经配置了一个虚拟网卡。 2.物理连…

vue2 proxy 代理配置报错 ValidationError: webpack Dev Server Invalid Options

vue/cli3&#xff08;本文实际使用的是vue/cli4&#xff09;代理配置如下&#xff1a; vue/cli4使用vue/cli3的代理配置会出现异常&#xff0c;本文解决办法为解决方法二处理&#xff0c;运行正常。 vue 启动项目 yarn serve 或者 npm run dev 或者 npm run serve 时&#x…

and design vue表格列宽度拖拽,vue-draggable-resizable插件使用

and design vue2版的table表格不能拖拽列的宽度&#xff0c;通过vue-draggable-resizable插件实现 我用的是and design 1.7.8的版本&#xff0c;先下插件 yarn add vue-draggable-resizable2.1.0我这版本的and design用最新3.0.0以上的插件会有问题&#xff0c;实现不了效果&a…

EmguCV学习笔记 VB.Net 5.3 透视变换

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

微分方程(Blanchard Differential Equations 4th)中文版Section2.2

动力系统的几何分析 捕食者-猎物系统的向量场 在第2.1节中&#xff0c;我们展示了两个不同捕食者-猎物系统的 R ( t ) R(t) R(t) 和 F ( t ) F(t) F(t) 图形&#xff0c;但没有描述我们是如何生成这些图形的。我们将在第2.5节中解决这个问题&#xff0c;采用欧拉方法推广到…

Java | Leetcode Java题解之第355题设计推特

题目&#xff1a; 题解&#xff1a; class Twitter {private class Node {// 哈希表存储关注人的 IdSet<Integer> followee;// 用链表存储 tweetIdLinkedList<Integer> tweet;Node() {followee new HashSet<Integer>();tweet new LinkedList<Integer&g…

《深入浅出WPF》读书笔记.6binding系统(上)

《深入浅出WPF》读书笔记.6binding系统(上) 背景 这一章是核心内容。databinding可以理解为实现逻辑层和展示层的桥梁。 binding基础 如何理解binding <Window x:Class"BindingSysDemo.BindingSysDemo1"xmlns"http://schemas.microsoft.com/winfx/2006/…

【pyqt5】QLineEdit中的文本输入限制方式,输入校验规则的应用详解

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

从0到1学会nginx分布式框架

nginx 项目地址晓智科技晓智科技晓智文档晓智文档源码地址源码地址文档源码文档源码 yum 安装 nginx 安装 yum-utils sudo yum install -y yum-utils添加 yum 源文件 # 新建文件 vim /etc/yum.repos.d/nginx.repo # 添加文件源 [nginx-stable] namenginx stable repo ba…

点击展开详细说明网站html引导页源码

点击展开详细说明网站html引导页源码,源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 https://download.csdn.net/download/huayula/89…

开箱即用,使用极空间搭建小清新的自托管个人仪表板『honey』

开箱即用&#xff0c;使用极空间搭建小清新的自托管个人仪表板『honey』 哈喽小伙伴们好&#xff0c;我是Stark-C~ 说到可以在NAS部署的自托管仪表板呀&#xff0c;导航栏呀简直不要太多&#xff0c;光是我之前分享的譬如Sun-Panel &#xff0c;Dashy&#xff0c;HomePage&am…

【Linux】1.Linux环境搭建

文章目录 1.Linux环境安装2.云服务器选择2.1 3个云服务器平台2.2阿里云平台租借云服务器教程 3.Xshell安装4.Xshell配置连接云服务器5.如何多人共享一台Linux云服务器&#xff1f;6.如何更改他人访问云服务器的密码呢&#xff1f;7.如何阻止你共享的人访问云服务器呢&#xff1…

<数据集>RSOD数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;936张 标注数量(xml文件个数)&#xff1a;936 标注数量(txt文件个数)&#xff1a;936 标注类别数&#xff1a;4 标注类别名称&#xff1a;[aircraft, oiltank, overpass, playground] 序号类别名称图片数框数1air…

【轨物推荐】数字化时代的企业技术创新方法论

原创 郭朝晖 蝈蝈创新随笔 2024年08月03日 18:29 上海 数字化转型的一个重要特点&#xff0c;是用数字化技术手段解决企业的技术、运营和管理问题。于是我发现&#xff1a;数字化项目往往既有技术项目的特点、又有工程项目管理的特点&#xff0e;还有创新项目的特点。但换个角…

鲲鹏服务器安装Kafka

由于项目需求&#xff0c;需要在鲲鹏云主机上安装Kafka&#xff0c;并且要求安装的版本为2.3.X。下面主要从以下几个步骤说明如何安装&#xff1a; 1、下载kafka的安装文件 2、上传到服务器 3、修改配置 4、启动 5、使用工具测试 服务器信息 CPU信息 [rootecs02 ~]# lscpu A…

[数据集][目标检测]瞳孔虹膜检测数据集VOC+YOLO格式8768张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8768 标注数量(xml文件个数)&#xff1a;8768 标注数量(txt文件个数)&#xff1a;8768 标注…

24款保时捷帕拉梅拉升级原厂360全景影像案例

24款保时捷帕拉梅拉升级原厂360全景影像后&#xff0c;车辆的前后左右都能被清晰地拍摄下来&#xff0c;并通过车载屏幕实时显示。这可以帮助驾驶员更好地了解车辆周围的环境&#xff0c;从而提高驾驶安全性和便利性。以下是一些可能的效果展示&#xff1a; • 全景视图&#…