分布式学习第三天 nginx学习

news2024/7/4 5:08:24

目录

1. 一些基本概念

1.1 Nginx初步认识

1.2 正向/反向代理

1.3 域名和IP

2. Nginx 安装和配置

2.1 安装

2.2 配置

3. Nginx的使用

3.1 部署静态网页

3.2 反向代理和负载均衡

课外知识导读

1. URL和URI

2. DNS解析过程

复习


1. 一些基本概念

1.1 Nginx初步认识

  1. Nginx介绍

    • engine x

    • 俄罗斯

    • 开源的框架

    • c语言

    • Tengine - 淘宝基于nginx修改的

  2. Nginx能干什么?

    • 作为web服务器

      • 解析http协议

    • 反向代理服务器

      • 了解反向代理的概念

    • 邮件服务器

      • 解析邮件相关的协议: pop3/smtp/imap

  3. Nginx的优势?

    • 更快

      • 高峰期(数以万计的并发时)nginx可以比其它web服务器更快的响应请求

    • 高扩展

      • 低耦合设计的模块组成,丰富的第三方模块支持

      • 高内聚带来的依赖程度就越来越高,理想是要实现高内聚,低耦合。

      • 低耦合就是几个类之间没有关系

    • 高可靠

      • 经过大批网站检验

        • www.sina.com.cn

        • www.xunlei.com

        • www.163.com

      • 每个worker进程相对独立, 出错之后可以快速开启新的worker

        • worker进程的个数是可以控制的

        • 在后台干活的进程

        • 每个电脑的最多核心数建议是电脑内核的个数,太多也需要时间片进行轮转进行切换。

    • 低内存消耗

      • 一般情况下,10000个非活跃的HTTP Keep-Alive连接在nginx中仅消耗 2.5M内存(非活跃用户连接不发送数据)

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

      • 取决于内存,10万远未封顶

    • 热部署

      • master和worker的分离设计,可实现7x24小时不间断服务的前提下升级nginx可执行文件

      • 也就是更新的时候不需要用户暂停使用服务器

    • 最自由的BSD许可协议

      • BSD许可协议允许用户免费使用nginx, 修改nginx源码,然后再发布

        • 淘宝: tengine

1.2 正向/反向代理

  1. 正向代理

    正向代理是位于客户端和原始服务器之间的服务器,为了能够从原始服务器获取请求的内容,客户端需要将请求发送给代理服务器,然后再由代理服务器将请求转发给原始服务器,原始服务器接受到代理服务器的请求并处理,然后将处理好的数据转发给代理服务器,之后再由代理服务器转发发给客户端,完成整个请求过程。

    ==正向代理的典型用途就是为在防火墙内的局域网客户端提供访问Internet的途径==, 比如:

    • 学校的局域网(登录的是代理服务器)

    • 单位局域网访问外部资源 (屏蔽了一些网站)

    • 找代理服务器翻过中国的防火墙,这样就可以实现访问外网,也就是vpn

 

 

正向代理服务器是为用户服务的

  1. 反向代理

    反向代理方式是指代理原始服务器来接受来自Internet的链接请求,然后将请求转发给内部网络上的原始服务器,并将从原始服务器上得到的结果转发给Internet上请求数据的客户端。那么顾名思义,反向代理就是位于Internet和原始服务器之间的服务器,对于客户端来说就表现为一台服务器,客户端所发送的请求都是直接发送给反向代理服务器,然后由反向代理服务器统一调配。

 

 

  1. 客户端给服务器发送请求, 连接服务器, 用户不知道服务器地址, 只有反向代理服务器的地址是公开的

  2. 请求直接发给反向代理服务器

  3. 反向代理服务器将请求转发给后边的web服务器

    • web服务器 N 台 做了集群

    • 反向代理服务器转发请求会轮询进行

  4. web服务器收到请求进行处理, 得到结果

  5. web服务器将处理结果发送给反向代理服务器

  6. 反向代理服务器将拿到的结果转发给客户端

1.3 域名和IP

  1. 什么是域名?

    • www.baidu.com

    • jd.com

    • taobao.com(给ip地址取个别名)

  2. 什么是IP地址?

    • 点分十进制的字符串

      • 11.22.34.45

  3. 域名和IP地址的关系?

    • 域名绑定IP

      • 一个域名只能绑定一个IP

      • 一个IP地址被多个域名绑定

2. Nginx 安装和配置

2.1 安装

  1. 下载

    1. 官方地址: nginx news

    2. Nginx相关依赖:

      • OpenSSL: /index.html

        • 密码库

        • 使用https进行通信的时候使用

      • ZLib下载: zlib Home Site

        • 数据压缩

        • 安装:

          • ./configure

          • make

          • sudo make install

      • PCRE下载: http://www.pcre.org/

        • 解析正则表达式

        • 安装

          • ./configure

          • make

          • sudo make install

  2. 安装

    • nginx的安装

      # nginx工作时候需要依赖三个库 --with链接库
      # 三个参数=这三个库对应的源码安装目录
      # 根据自己的电脑的库安装包的位置进行指定
      ./configure --with-openssl=../openssl-1.0.1t --with-pcre=../pcre-8.40 --with-zlib=../zlib-1.2.11
      make
      sudo make install
      ​
      ​
      ​
      #安装nginx很容易出问题
      #如PCREmake时出问题 需要检查是否有gcc g++环境
      #法1
      yum -y install gcc-g++
      #法2
      apt-get install gcc
      apt-get install g++
      ​#nginx出问题参考以下文章
      https://blog.csdn.net/lijunliang2017/article/details/120400666

       Nginx 相关的指令

      • Nginx的默认安装目录

        /usr/local/nginx
         conf -> 存储配置文件的目录
         html -> 默认的存储网站(服务器)静态资源的目录 [图片, html, js, css]
         logs -> 存储log日志
         sbin -> 启动nginx的可执行程序

        Nginx可执行程序的路径

      • /usr/local/nginx/sbin/nginx
        # 快速启动的方式 默认是不在路径上的
        # 1. 将/usr/local/nginx/sbin/添加到环境变量PATH中
        # 2. /usr/local/nginx/sbin/nginx创建软连接, 放到PATH对应的路径中, 比如: /usr/bin
        #echo $PATH 可以看到path路径
        ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
        ​
        ps aux | grep nginx
        #查看nginx线程

        启动Nginx - 需要管理器权限                

  # 假设软连接已经创建完毕
  sudo nginx # 启动
  • 关闭Nginx

    # 第一种, 马上关闭
      sudo nginx -s stop
    # 第二种, 等nginx作为当前操作之后关闭
      sudo nginx -s quit

    测试是否安装成功

    • 知道nginx对应的主机的IP地址 - > 192.168.1.100

    • ifconfig 查看地址

 

    • 在浏览器中访问该IP地址

      看到一个welcom nginx的欢迎面

重新加载Nginx 

  •   sudo nginx -s reload  # 修改了nginx的配置文件之后, 需要执行该命令

    2.2 配置

  • Nginx配置文件的位置

/usr/local/nginx/conf/nginx.conf

 Nginx配置文件的组织格式

 

  • http -> 模块, http相关的通信设置

    • server模块 -> 每个server对应的是一台web服务器

      • location 模块

        • 处理的是客户端的请求

  • mail -> 模块, 处理邮件相关的动作

常用配置项介绍

user  nobody; # 启动之后的worker进程属于谁 nobody表示是普通用户
	- 错误提示: nginx操作xxx文件时候失败, 原因: Permission denied  
	- 将nobody -> root
worker_processes  1; # 设置worker进程的个数, 最大 == cpu的核数 (推荐)
error_log  logs/error.log; # 错误日志, /usr/local/nginx
pid        logs/nginx.pid; # pid文件, 里边是nginx的进程ID
# nginx的事件处理
events {
 	use epoll;	# 多路IO转接模型使用epoll
 	worker_connections  1024;	// 每个工作的进程的最大连接数
}
http->server -> 每个server模块可以看做一台web服务器
server{
	listen       80;  # web服务器监听的端口, http协议的默认端口 ftp21 ssh sftp 22 https 443
    server_name  localhost; # 对应一个域名, 客户端通过该域名访问服务器
    charset utf8; 	# 字符串编码
    location {	// 模块, 处理客户端的请求
}

# 客户端 (浏览器), 请求:
  http://192.168.10.100:80/login.html
# 服务器处理客户端的请求
  服务器要处理的指令如何从url中提取?
  - 去掉协议: http
  - 去掉IP/域名+端口: 192.168.10.100:80
  - 最后如果是文件名, 去掉该名字: login.html
  - 剩下的: /
  服务器要处理的location指令: 
  location /
  {
        处理动作
  }

3. Nginx的使用

3.1 部署静态网页

  1. 静态网页存储目录 静态网页是指每个人看到的都是一样的 动态网页是指不同人提交的东西是不同的

默认的存储目录:

/usr/local/nginx/html

自己创建新的目录:

应该在 /usr/local/nginx/
mkdir /usr/local/nginx/mydir

练习

在Nginx服务器上进行网页部署, 实现如下访问:

在/usr/local/nginx/创建新的目录, yundisk用来存储静态网页

  • 访问地址: http://192.168.80.254/login.html

    • login.html放到什么位置?

/ -> 服务器的资源根目录, /usr/local/nginx/yundisk
login.htm-> 放到yundisk中

服务器要处理的动作

# 对应这个请求服务器要添加一个location
location 指令(/)
{
    # 找一个静态网页
    root yundisk;  # 相对于/usr/local/nginx/来找
    # 客户端的请求是一个目录, nginx需要找一默认显示的网页 默认先找第一个 找不到就第二个
    index index.html index.htm;
}
# 配置之后重启nginx
sudo nginx -s reload

 配置文件如下;


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
		
       #http://192.168.254.128/login.html
       #  拆分之后 / yundisk 表示去寻找的根目录
        location / {
            root   yundisk;
        }
		
		#http://192.168.80.254/hello/reg.html
	 	#  拆分之后 /hello/ yundisk 表示去寻找的根目录
		location /hello/
        {
            root yundisk;
            index xx.html;
        }


		#http://192.168.80.254/upload/
		#解析 /upload/ 会访问配置的index 的upload.html
		location /upload/
        {
           root   yundisk;
           index  upload.html;
        }
		
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # 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;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

访问地址: http://192.168.80.254/hello/reg.html

  • hello是什么?

    • 目录

  • reg.html放到哪儿?

    • hello目录中

  • 如何添加location

#理论上是需要加以下路径的 但是我测试的时候不需要加也是可以的 说明可以将其进行解析
location /hello/
{
    root yundisk;
    index xx.html;
}

访问地址: http://192.168.80.254/upload/ 浏览器显示upload.html

  • 直接访问一个目录, 得到一默认网页

    • upload是一个目录, uplaod.html应该再upload目录中

location /upload/
{
    root yundisk;
    index upload.html;
}

3.2 反向代理和负载均衡

反向代理和负载均衡是两码事儿

 

准备工作:

  1. 需要客户端 - 1个

    • Window中的浏览器作为客户端

  2. 反向代理服务器 -> 1个

    • window作为反向代理服务器

  3. web服务器 -> 2个

    • ubuntu - liu: 192.168.247.135

    • ubuntu - luffy : 192.168.26.250

  1. 反向代理设置

找window上对应的nginx的配置文件
	- conf/nginx.conf
# 代理几台服务器就需要几个server模块
    # 客户端访问的url: http://192.168.1.100/login.html
    server {
        listen       80;        # 客户端访问反向代理服务器, 代理服务器监听的端口
        server_name  ubuntu.com; # 客户端访问反向代理服务器, 需要一个域名
        location / {
            # 反向代理服务器转发指令, http:// 固定 robin.test.com转发的名称 在下面进行配置
            proxy_pass http://robin.test.com;
        }

    }
    # 添加一个代理模块
    upstream robin.test.com
    {
        server 192.168.247.135:80;
    }
    # luffy
    server {
        listen       80;        # 客户端访问反向代理服务器, 代理服务器监听的端口
        server_name  hello.com; # 客户端访问反向代理服务器, 需要一个域名
        location / {
            # 反向代理服务器转发指令, http:// 固定
            proxy_pass http://luffy.test.com;
        }

    }
    # 添加一个代理模块
    upstream luffy.test.com
    {
        server 192.168.26.250:80;//80代表http的端口号
    }
}

#需要在C:\Windows\System32\drivers\etc\hosts 添加以下
# test
127.0.0.1 centos7.com
127.0.0.1 robin.com
127.0.0.1 hello.com

#那么首先访问robin.com会将其解析为127.0.0.1
#如果本地没有的话 那么就会从本地访问过的dns解析
#测试代理就是输入不同的域名 看是否可以解析到不同的虚拟机ip地址上

 负载均衡设置

 

#实现负载均衡 需要保证域名是一样的   localhost
#负载均衡是在反向代理的基础上进行的
server {
        listen       80;         # 客户端访问反向代理服务器, 代理服务器监听的端口
        server_name  localhost; # 客户端访问反向代理服务器, 需要一个域名
        location / {
            # 反向代理服务器转发指令, http:// 固定的头
            proxy_pass http://linux.com;
        }
        location /hello/ {
            # 反向代理服务器转发指令, http:// 固定的头
            proxy_pass http://linux.com;
        }
    	location /upload/ {
            # 反向代理服务器转发指令, http:// 固定的头
            proxy_pass http://linux.com;
        }

    }

	# 不写权重的话会自动进行轮询
	# weight表示权重 权重越大处理的越多
    # 添加一个代理模块
    upstream linux.com
    {
        server 192.168.247.135:80 weight=1;
        server 192.168.26.250:80 weight=3;
    }

# 上面是代理服务器做的事情 也就是会将 /hello/ /upload/等转发给配置好的web服务器
## =====================================
web服务器需要做什么?
# 192.168.247.135
location /
{
    root xxx;
    index xxx;
}
location /hello/ 
{
    root xx;
    index xxx;
}
location /upload/ 
{
    root xxx;
    index xx;
}
# 192.168.26.250
location /
{
    root xxx;
    index xxx;
}
location /hello/ 
{
    root xx;
    index xxx;
}
location /upload/ 
{
    root xxx;
    index xx;
}

课外知识导读

1. URL和URI

 概念:

- URL(Uniform Resource  Locator): 统一资源定位符

- 表示资源位置的字符串
  - 基本格式: "==协议://IP地址/路径和文件名=="
    - <ftp://ftp.is.co.za/rfc/rfc1808.txt>
    - <http://www.ietf.org/rfc/rfc2396.txt>
    - <telnet://192.0.2.16:80/>

- URN(Uniform Resource  Name): 统一资源名称
  - P2P下载中使用的磁力链接

- URI(Uniform Resource  Identifier): 统一资源标识符
  - 是一个紧凑的字符串用来标示抽象或物理资源, ==**URL是URI的一种**== 
  - 让URI能成为URL的当然就是那个“访问机制”,“网络位置”。e.g. `http://` or `ftp://`。
    - files.hp.com 
    - <tel:+1-816-555-1212>
    - <ftp://ftp.is.co.za/rfc/rfc1808.txt>               (also a URL)
    - <http://www.ietf.org/rfc/rfc2396.txt>         (also a URL)
    - <telnet://192.0.2.16:80/>                              (also a URL)
- 有协议的uri可以称作url,url不一定是uri,url都是uri

经验式理解:

  1. 从包含关系上说: URI包含URL

    字符串长度上说: URL包含URI

    UIRI可以没有协议, 没有地址(IP/域名)
URL红色字体部分+绿色字体部分
URI绿色字体部分

2. DNS解析过程

 

 

  1. DNS解析的过程

    1. 在浏览器中输入www.magedu.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

    2. 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

      • Windows和Linux系统都会在本地缓存dns解析的记录,提高速度。

    3. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

    4. 如果要查询的域名,不由本地DNS服务器区域解析,但该DNS服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

    5. 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(没有设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责 .com域的这台服务器。这台负责 .com域的服务器收到请求后,如果自己无法解析,它就会找一个管理 .com域的下一级DNS服务器地址(magedu.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找magedu.com域服务器,重复上面的动作进行查询,直至找到www.magedu.com主机。

    6. 如果用的是转发模式(设置转发器),此DNS服务器就会把请求转发至上一级ISP DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

  2. 域名解析服务器

    • Pod DNS+:

      • 首选:119.29.29.29

      • 备选:182.254.116.116

    • 114DNS:

      • 首选:114.114.114.114

      • 备选:114.114.114.115

    • 阿里 AliDNS:

      • 首选:223.5.5.5

      • 备选:223.6.6.6

  3. hosts文件

    # 存储的是域名和IP的对应关系
    -windows目录: "C:\Windows\System32\drivers\etc\hosts"

    复习

redis

  1. 是什么?

    • 非关系型数据库 - nosql

      • 数据存储在内存里边

  2. 能干什么?

    • 提高程序效率

    • 程序中频繁访问的数据, 可以存储到redis中

  3. 我们需要干什么?

    • 会安装

    • 掌握启动redis服务器和客户端的启动命令

      # 服务器
      redis-server (配置文件名)
      # 客户端
      redis-cli (-h redis服务器IP -p 端口)
    • redis中支持的数据类型 - value

      • 键值对方式存储数据

        • key - 字符串

        • value

          • 字符串 - string

          • 列表 - list

          • 集合 - set

          • 排序集合 - sortedSet

          • 哈希 - hash

      • 关于服务器使用的配置文件的修改

      • redis中持久化

        • rdb

        • aof

  4. 能够在程序中操作redis服务器

    • 需要使用以下函数接口

    • 官方地址 - > 客户端 -> 选择语言

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

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

相关文章

团体程序设计天梯赛-练习集L1篇②

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;Hello大家好呀&#xff0c;我是陈童学&#xff0c;一个与你一样正在慢慢前行的普通人。 &#x1f3c0;个人主页&#xff1a;陈童学哦CSDN &#x1f4a1;所属专栏&#xff1a;PTA &#x1f381;希望各…

在我掉入计算机的大坑并深陷其中时,一门名为“C语言”的编程语言让我沉迷

各位CSDN的uu们你们好呀&#xff0c;小雅兰好久没有更新博客啦&#xff0c;今天来小试牛刀&#xff01;&#xff01;&#xff01; 上一篇博客小雅兰是说自己原本是自动化专业的学生&#xff0c;但是因为一次偶然的机会对计算机的相关知识产生了浓厚的兴趣。那么&#xff0c;小雅…

Linux Ubuntu man文档的图文安装教程

文章目录 前言man文档的起源man文档的安装man文档的使用总结 前言 当提及"man文档"时&#xff0c;通常是指Unix和类Unix系统中的手册页&#xff08;man page&#xff09;&#xff0c;因为Linux是在Unix的基础上发展而来的操作系统&#xff0c;所以我们的Linux也有ma…

操作系统 - 内存管理

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

INDEMIND相机ROS bag包数据的回放

实验需要IMU相机&#xff0c;跑算法是在ROS下跑&#xff0c;在 ROS 系统中&#xff0c;可以使用 bag 文件来保存和恢复系统的运行状态&#xff0c;比如相机话题的 bag 包&#xff0c;然后回放用来进行联合外参标定&#xff0c;也可以使用EVO工具显示算法轨迹&#xff0c;这里记…

合宙Air724UG Cat.1模块硬件设计指南--GPIO控制

GPIO控制 简介 GPIO&#xff08;General-purpose input/output&#xff09;&#xff0c;通用型之输入输出的简称&#xff0c;可实现某时刻电平状态的输出与输入&#xff0c;即可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。 特性 共支持28个GPIO&a…

A Neural Conversational Model 读后感

目录 摘要 1、介绍 2、相关工作 3、模型 4、数据&#xff08;后面都是具体的东西&#xff0c;不赘述&#xff09; 5、总结 使用微软翻译得到的中文原文&#xff1a; 摘要 会话建模是自然语言理解和机器智能中的一项重要任务。尽管存在以前的方法&#xff0c;但它们通常仅…

MySQL数据库:数据库的约束以及数据的聚合、联合查询

目录 一.关系模型的简要概述 二.数据库的约束 2.1约束类型 2.2NULL约束 2.3 UNIQUE&#xff1a;唯一约束 2.4 默认约束 2.5 PRIMARY KEY&#xff1a;主键约束 2.6 FOREIGN KEY&#xff1a;外键约束 2.7 CHECK约束 三.高效率查询 3.1高效率查询的分类 3.2聚合查询 …

Nginx热升级到1.23.4过程指导手册

一、问题描述 因环境内部安全扫描发现CVE-2021-23017、CVE-2022-41741、CVE-2022-41742、CVE-2019-20372漏洞&#xff0c;经分析后&#xff0c;需要将nginx升级到1.23.4版本&#xff1b; 现场环境&#xff1a;centos7.4 1708、nginx 1.20.1 资料&#xff1a;软件下载、360安全…

spring框架-循环依赖问题(二)

文章目录 什么是循环依赖解决循环依赖的办法知识扩展 什么是循环依赖 两个或多个类之间存在彼此依赖的情况,形成一个循环依赖链 代码&#xff1a; 单例bean的循环依赖&#xff1a; 先了解Bean的生命周期&#xff1a;1.实例化 2.初始化、3.使用 4.销毁 详细了解Bean生命周期…

数据库高级

数据库高级&#x1f985; 文章目录 数据库高级&#x1f985;范式&#x1f98d;什么是范式&#x1f40a;第一范式——1NF&#x1f996;第二范式——2NF&#x1f41f;第三范式——3NF&#x1f409;总结&#x1f419; 五大约束&#x1f40f;主键约束&#x1f421;外键约束&#x1…

第五章 ResNeXt网络详解

系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网络详解 第七章 MobileNetv2网络详解 第八章 MobileNetv3网络详解 第九章 ShuffleNetv1网络详解 第十章…

网络套接字函数 | socket、bind、listen、accept、connect

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

CSS3-补充-结构伪类选择器

结构伪类选择器 作用&#xff1a;在HTML中定位元素 优势&#xff1a;减少对于HTML中类的依赖&#xff0c;有利于保持代码整洁 场景&#xff1a;常用于查找某父级选择器中的子元素 选择器&#xff1a; 选择器 …

SAC算法小结

算法SAC 基于动态规划的贝尔曼方城如下所示&#xff1a; 则&#xff0c;基于最大熵的软贝尔曼方程可以描述为如下的形式&#xff1a; 可以这么理解soft贝尔曼方程&#xff0c;就是在原有的贝尔曼方程的基础上添加了一个熵项。 另外一个角度理解soft-贝尔曼方程&#xff1a; …

Vue-组件自定义事件(绑定和解绑)

组件自定义事件(绑定) 像click,change这些都是js的内置事件&#xff0c;我们可以直接使用&#xff0c;本次我们学习自己根据需求打造全新的事件&#xff0c;但是js内置的是给html元素用的,本次的自定义事件是给组件用的 注意&#xff1a;组件上也可以绑定原生DOM事件&#xf…

(十一)CSharp-LINQ(1)

一、LINQ 数据库可以通过 SQL 进行访问&#xff0c;但在程序中&#xff0c;数据要被保存在差异很大的类对象或结构中。由于没有通用的查询语言来从数据结构中获取数据。所以可以使用 LINQ 可以很轻松地查询对象集合。 LINQ 高级特性&#xff1a; LINQ 代表语言集成查询。LIN…

【机器学习】信息熵和信息度量

一、说明 信息熵是概率论在信息论的应用&#xff0c;它简洁完整&#xff0c;比统计方法更具有计算优势。在机器学习中经常用到信息熵概念&#xff0c;比如决策树、逻辑回归、EM算法等。本文初略介绍一个皮毛&#xff0c;更多细节等展开继续讨论。 二、关于信息熵的概念 2.1 …

尚硅谷课程vue学习(一)

目录 data两种写法el两种写法由vue管理的函数&#xff0c;一定不要写箭头函数&#xff0c;不然this指向windows实例了MVVM模型defineProperty属性数据代理v-on: v-bind:键盘事件keyup keydowncomputed计算属性监视属性watch监视属性和计算属性区别绑定class和style属性条件渲染…

cocosCreator 3.3~6 安卓热更新官方详细示例

官方的热更新虽给出了示例和源码&#xff0c;但是一些细节的地方和步骤还是没说清楚&#xff0c;导致新手包括我死活是运行不起来&#xff0c;热更新失败&#xff01;很打击人啊。这里有必要给出新手的热更新步骤&#xff0c;前提是你安装了Node.js和python环境&#xff0c;我装…