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

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&#xff1a;engine X Tengine&#xff1a;淘宝改进维护的版本 Registry&#xff1a; 使用了libevent库&#xff1a;高性能的网络库 epoll()函数 Nginx特性&#xff1a; 模块化设计、较好的扩展性&#xff1b;&#xff08;但不支持动态加载模块功能&#…...

计算机网络的类型

目录 按覆盖范围分类 个人区域网&#xff08;PAN&#xff09; 局域网&#xff08;LAN&#xff09; 城域网&#xff08;MAN&#xff09; 4. 广域网&#xff08;WAN&#xff09; 按使用场景和性质分类 公网&#xff08;全球网络&#xff09; 外网 内网&#xff08;私有网…...

解决 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环境搭建

前言&#xff08;与搭建项目无关&#xff09;&#xff1a; 可以安装一个node管理工具&#xff0c;比如nvm&#xff0c;这样可以顺畅的切换vue2和vue3项目&#xff0c;以免出现项目跑不起来的窘境。我使用的nvm&#xff0c;当前node 22.11.0 目录 搭建项目 添加状态管理库&…...

【设计模式】【创建型模式(Creational Patterns)】之原型模式(Prototype Pattern)

1. 设计模式原理说明 原型模式&#xff08;Prototype Pattern&#xff09; 是一种创建型设计模式&#xff0c;它允许你通过复制现有对象来创建新对象&#xff0c;而无需通过构造函数来创建。这种方式可以提高性能&#xff0c;尤其是在对象初始化需要消耗大量资源或耗时较长的情…...

黄仁勋:人形机器人在内,仅有三种机器人有望实现大规模生产

11月23日&#xff0c;芯片巨头、AI时代“卖铲人”和最大受益者、全球市值最高【英伟达】创始人兼CEO黄仁勋在香港科技大学被授予工程学荣誉博士学位&#xff1b;并与香港科技大学校董会主席沈向洋展开深刻对话&#xff0c;涉及人工智能&#xff08;AI&#xff09;、计算力、领导…...

【C语言】宏定义详解

C语言中的宏定义&#xff08;#define&#xff09;详细解析 在C语言中&#xff0c;宏定义是一种预处理指令&#xff0c;使用 #define 关键字定义。它由预处理器&#xff08;Preprocessor&#xff09;在编译前处理&#xff0c;用于定义常量、代码片段或函数样式的代码替换。宏是…...

LangChain——多向量检索器

每个文档存储多个向量通常是有益的。在许多用例中&#xff0c;这是有益的。 LangChain 有一个基础 MultiVectorRetriever &#xff0c;这使得查询此类设置变得容易。很多复杂性在于如何为每个文档创建多个向量。本笔记本涵盖了创建这些向量和使用 MultiVectorRetriever 的一些常…...

《岩石学报》

本刊主要报道有关岩石学基础理论的岩石学领域各学科包括岩浆岩石学、变质岩石学、沉积岩石学、岩石大地构造学、岩石同位素年代学和同位素地球化学、岩石成矿学、造岩矿物学等方面的重要基础理论和应用研究成果&#xff0c;同时也刊载综述性文章、问题讨论、学术动态以及书评等…...

数据结构 (12)串的存储实现

一、顺序存储结构 顺序存储结构是用一组连续的存储单元来存储串中的字符序列。这种存储方式类似于线性表的顺序存储结构&#xff0c;但串的存储对象仅限于字符。顺序存储结构又可以分为定长顺序存储和堆分配存储两种方式。 定长顺序存储&#xff1a; 使用静态数组存储&#xff…...

职场发展陷阱

一、只有执行&#xff0c;没有思考 二、只有过程&#xff0c;没有结果 三、只有重复&#xff0c;没有精进 四、不懂向上管理 五、定期汇报 六、不要憋大招 七、多同步信息...

Xcode15(iOS17.4)打包的项目在 iOS12 系统上启动崩溃

0x00 启动崩溃 崩溃日志&#xff0c;只有 2 行&#xff0c;看不出啥来。 0x01 默认配置 由于我开发时&#xff0c;使用的 Xcode 14.1&#xff0c;打包在另外一台电脑 Xcode 15.3 Xcode 14.1 Build Settings -> Asset Catalog Compliter - Options Xcode 15.3 Build S…...

极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【二】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…...

PVE相关名词通俗表述方式———多处细节实验(方便理解)

PVE设置初期&#xff0c;对CIDR、 网关、 LinuxBridge、VLAN等很有困惑的朋友一定很需要一篇能够全面通俗易懂的方式去理解PVE 中Linux网桥的工作方式&#xff0c;就像操作一个英雄&#xff0c;多个技能&#xff0c;还是需要一点点去学习理解的&#xff0c;如果你上来就对着别人…...

Ansible--自动化运维工具

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

微信小程序学习指南从入门到精通

&#x1f5fd;微信小程序学习指南从入门到精通&#x1f5fd; &#x1f51d;微信小程序学习指南从入门到精通&#x1f51d;✍前言✍&#x1f4bb;微信小程序学习指南前言&#x1f4bb;一、&#x1f680;文章列表&#x1f680;二、&#x1f52f;教程文章的好处&#x1f52f;1. ✅…...

微服务篇-深入了解使用 RestTemplate 远程调用、Nacos 注册中心基本原理与使用、OpenFeign 的基本使用

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 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

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

【后端面试总结】MySQL索引

数据库索引不只一种实现方法&#xff0c;但是其中最具代表性&#xff0c;也是我们面试中遇到最多的无疑是B树。 索引为什么选择B树 数据量很大的查找&#xff0c;是不能直接放入内存的&#xff0c;而是需要什么数据就通过磁盘IO去获得。 红黑树&#xff0c;AVL树等二叉查找树…...

[蓝桥杯 2021 省 AB2] 小平方

题目描述 小蓝发现&#xff0c;对于一个正整数 nn 和一个小于 nn 的正整数 vv&#xff0c;将 vv 平方后对 nn 取余可能小于 nn 的一半&#xff0c;也可能大于等于 nn 的一半。 请问&#xff0c;在 11 到 n−1n−1 中, 有多少个数平方后除以 nn 的余数小于 nn 的一半。 例如&…...

Jmeter测试工具的安装和使用,mac版本,jmeter版本5.2.1

Jmeter测试工具的安装和使用JSON格式请求 一、安装1、安装jdk包和设置java环境2、去官网下载Jmeter3、解压后&#xff0c;打开mac终端&#xff0c;进入apache-jmeter的bin文件开启jmeter 二、使用jmeter1、添加线程2、添加HTTP请求3、配置请求的协议、IP地址、端口号、请求方法…...

kmeans 最佳聚类个数 | 轮廓系数(越大越好)

轮廓系数越大&#xff0c;表示簇内实例之间紧凑&#xff0c;簇间距离大&#xff0c;这正是聚类的标准概念。 簇内的样本应该尽可能相似。不同簇之间应该尽可能不相似。 目的&#xff1a;鸢尾花数据进行kmeans聚类&#xff0c;最佳聚类个数是多少&#xff1f; plot(iris[,1:4…...

【纪念365天】我的创作纪念日

过去的一年 没有注意加入csdn已经有一年了。 这几天翻看小猴儿的通知才发现时间来到了一年的纪念日。稍稍思索想要将这一段时间的学习到的知识以及偶然遇到的机遇做一下总结。 上一次写纪念日是来到csdn128天的时候&#xff0c; 200天前我的学习状态是非常疯狂的。 只记得我当时…...

Opencv+ROS实现颜色识别应用

目录 一、工具 二、原理 概念 本质 三、实践 添加发布话题 主要代码 四、成果 五、总结 一、工具 opencvros ubuntu18.04 摄像头 二、原理 概念 彩色图像&#xff1a;RGB&#xff08;红&#xff0c;绿&#xff0c;蓝&#xff09; HSV图像&#xff1a;H&#xff0…...

蓝桥杯c++算法秒杀【6】之动态规划【下】(数字三角形、砝码称重(背包问题)、括号序列、异或三角:::非常典型的必刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01;! ! ! ! &#xff01; 关注博主&#xff0c;更多蓝桥杯nice题目静待更新:) 动态规划 三、括号序列 【问题描述】 给定一个括号序列&#xff0c;要求尽可能少地添加若干括号使得括号序列变得合…...

C++设计模式(单例模式)

一、介绍 1.动机 在软件系统中&#xff0c;经常有这样一些特殊的类&#xff0c;必须保证它们在系统中只存在一个实例&#xff0c;才能确保它们的逻辑正确性、以及良好的效率。 如何绕过常规的构造器&#xff0c;提供一种机制来保证一个类只有一个实例? 这应该是类设计者的…...

前端---CSS(部分用法)

HTML画页面--》这个页面就是页面上需要的元素罗列起来&#xff0c;但是页面效果很差&#xff0c;不好看&#xff0c;为了让页面好看&#xff0c;为了修饰页面---》CSS CSS的作用&#xff1a;修饰HTML页面 用了CSS之后&#xff0c;样式和元素本身做到了分离的效果。---》降低了代…...

2024年最新版Java八股文复习

最新版本Java八股文复习&#xff0c;每天更新一篇&#xff0c;博主正在持续努力更新中~~~ 一、Java基础篇1、怎么理解面向对象&#xff1f;简单说说封装、继承、多态三大特性&#xff1f;2、多态体现在哪几个方面&#xff1f;3、面向对象的设计原则你知道有哪些吗&#xff1f;4…...

中交路桥建设网站/腾讯朋友圈广告怎么投放

分支预测 在stackoverflow上有一个非常有名的问题&#xff1a; 为什么处理有序数组要比非有序数组快&#xff0c;可见分支预测对代码运行效率有非常大的影响。 现代CPU都支持分支预测(branch prediction)和指令流水线(instruction pipeline)&#xff0c;这两个结合可以极大提高…...

柚子皮wordpress/友好链接

今年不少人都体验了一把在家办公的感觉&#xff0c;然而&#xff0c;有不少朋友反应家里没有wifi&#xff0c;还需要重新接根网线感觉很麻烦&#xff0c;而且很不划算&#xff0c;这时候大家都想到买张流量卡使用&#xff0c;那么&#xff0c;物联网卡可以当上网卡放在笔记本上…...

网站制作 青岛/各大网站域名大全

常用的sql语句&#xff0c;sql使用大全我工作中常用到的sql插入查询更新介绍其他的sqlSQL分类基本的sql语句高级查询运算词我工作中常用到的sql 下面是我工作中常用的sql&#xff0c;每次都是修修改改多次使用 插入 insert into 库名.表名 (co,po,date,type,name,tuser)(字段…...

动漫游戏制作专业是本科专业吗/seo优化或网站编辑

一、作业描述  编写Java程序&#xff0c;模拟简单的计算器。 定义名为Number的类&#xff0c;其中有两个整型数据成员n1和n2&#xff0c;应声明为私有。编写构造方法&#xff0c;赋予n1和n2初始值&#xff0c;再为该类定义加&#xff08;addition&#xff09;、减&#xff08;…...

海外公司注册在哪里比较好/我是seo关键词

print([x*11 for x in range(10)]) 转载于:https://www.cnblogs.com/sea-stream/p/11192554.html...

深圳微信网站建设报价/网站建设与管理

版权声明&#xff1a; 专注于"GIS"前沿技术的研究与交流&#xff0c;将云计算技术、大数据技术、容器技术、物联网与GIS进行深度融合&#xff0c;探讨"GIS"技术和行业解决方案&#xff1b;文章允许转载&#xff0c;但必须以链接方式注明源地址&#xff0c;…...