Nginx使用指南

news2024/11/24 6:09:17

文章目录

  • 前言
  • 一、源码编译
    • 1.1 编译
    • 1.2 第三方模块编译
  • 二、配置文件
    • 2.1 配置语法
    • 2.2 location语法
    • 2.3 配置文件块
    • 2.4 全局变量
  • 三、HTTP 服务器
    • 3.1 基本
    • 3.2 反向代理
    • 3.3 压缩
    • 3.4 负载均衡
    • 3.5 HTTPS 支持
    • 3.6 UrlRewrite
    • 3.7 防盗链配置
    • 3.8 跨域
    • 3.9 静态服务
    • 3.10 PC/手机端分离
    • 3.11 黑白名单
    • 3.12 静态文件缓存
  • 参考

前言

Nginx 是一款高性能的开源 Web 服务器软件,也可以用作反向代理服务器、负载均衡器和 HTTP 缓存服务器。由 Igor Sysoev 于 2002 年创建,2004年公开,并且在开源社区得到广泛的支持和贡献。

Nginx 的设计目标是解决 C10K(Concurrency 10,000) 问题,即同时处理成千上万个并发连接的能力。相比传统的Web服务器,如 Apache,Nginx 使用了异步非阻塞的事件驱动架构,更高效地处理大量的并发请求,提供更快的响应速度和更低的资源消耗。

以下是 Nginx 的一些主要特点:

  1. 高性能: Nginx 通过使用事件驱动的方式处理请求,可以高效地处理大量并发连接,减少了服务器的资源消耗。它具有良好的吞吐能力和低的内存占用。
  2. 负载均衡和反向代理: Nginx 可以作为反向代理来分发客户端请求到后端的多个服务器,实现负载均衡和高可用性。它还支持基于算法和会话的策略来调度请求。
  3. 静态文件服务和缓存: Nginx 可以直接提供静态文件服务,无需将请求转发给其他服务器。同时,它还能够在内存中缓存文件,减少磁盘 I/O 操作,提高访问速度。
  4. 可扩展性: Nginx 支持模块化的架构,可以根据需要编译和加载各种功能模块。这使得它可以灵活地满足不同场景的需求,并且方便扩展功能。
  5. 强大的配置选项: Nginx 提供了一个简单而灵活的配置语言,通过配置文件可以实现对服务器行为的精细控制。它支持各种HTTP特性和协议,如 SSL/TLS 加密、HTTP/2、WebSocket 等。
  6. 可靠稳定: Nginx经过长时间的生产环境验证,被广泛用于一些高流量和重要的网站。它具有出色的稳定性和可靠性,能够保持长时间的运行而不中断服务。

总之,Nginx 是一个高性能、可靠稳定的 Web 服务器软件,适用于处理大量并发连接和高流量的场景。无论是作为一个独立的 Web 服务器,还是配合其他服务一起工作,Nginx 都是一个非常强大和有价值的工具。

下载地址:https://nginx.org/en/download.html

一、源码编译

1.1 编译

先下载源码

curl -O http://nginx.org/download/nginx-1.24.0.tar.gz

解压

tar -zxvf nginx-1.24.0.tar.gz

在编译之前,需要确保系统中已安装了一些必要的依赖项,如gcc编译器、PCRE库(用于支持正则表达式)、zlib库(用于支持HTTP压缩)和OpenSSL库(用于支持SSL加密)。可以通过包管理器来安装这些依赖项,例如在Centos上可以使用yum命令:

yum install -y gcc-c++
yum install -y gcc automake autoconf libtool make
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel

配置configure

./configure --prefix=/usr/local/nginx --with-pcre --with-zlib --with-openssl

编译make安装

make && make install

1.2 第三方模块编译

先下载好第三方源码,解压,重新配置nginx,编译

./configure --prefix=/usr/local/nginx --add-module=/path/to/module

二、配置文件

2.1 配置语法

一个 Nginx 配置文件的结构就像 nginx.conf 显示的那样,配置文件的语法规则如下:

  1. 配置文件由指令与指令块构成
  2. 每条指令以 ; 分号结尾,指令与参数间以空格符号分隔
  3. 指令块以 {} 大括号将多条指令组织在一起
  4. include 语句允许组合多个配置文件以提升可维护性
  5. 使用 # 符号添加注释,提高可读性
  6. 使用 $ 符号使用变量
  7. 部分指令如 location 的参数支持正则表达式

所有指令文档查询:https://nginx.org/en/docs/dirindex.html

2.2 location语法

官方文档:https://nginx.org/en/docs/http/ngx_http_core_module.html#location

location 后面可以跟下面几种符号,再跟前缀字符串或正则表达式

  1. = 精确匹配路径,后面跟不含正则表达式的 uri ,如果匹配成功,不再进行后续的查找
  2. ~ 正则匹配路径,后面跟正则,区分大小写
  3. ~* 正则匹配路径,后面跟正则,不区分大小写
  4. ^~ 前缀匹配 uri,后面跟前缀字符串,这是默认匹配项

location 配置优先级文档:https://docs.nginx.com/nginx/admin-guide/web-server/web-server/#location_priority

  1. 对所有前缀字符串测试URI
  2. = 定义了 URI 和前缀字符串的精确匹配。如果找到了精确的匹配项,则搜索将停止
  3. 如果 ^~ 放在最长匹配前缀字符串的前面,则不检查正则表达式
  4. 存储最长的匹配前缀字符串
  5. 对正则表达式测试 URI
  6. 当找到第一个匹配的正则表达式时,将停止处理,并使用对应的 location
  7. 如果没有正则表达式匹配,使用之前存储的前缀字符串对应的 location

示例

server {
        listen       8081;
        server_name  localhost;

        location  /i/ {
            root html;
        }

        location /i/js {
            root html/js;
        }

       
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }   
}

访问http://localhost:8081/i/js/js.html, 前缀匹配最长的,对应 windows 文件夹路径 html\js\i\js\js.html

2.3 配置文件块

配置文件包含以下几块:

  1. 全局块

    • 配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

      指令名语法默认值说明
      daemondaemon on | off;daemon on;是否成为一个守护进程
      debug_pointsdebug_points abort | stop;用于debug, 当检测到内部错误时,核心文件的创建中止(abort )或停止进程(stop)
      envenv variable[=value];env TZ;环境变量
      error_logerror_log file [level];error_log logs/error.log error;配置日志
      lock_filelock_file filelock_file logs/nginx.lock;锁文件位置
      master_processmaster_process on | off;master_process on;确定是否已启动工作进程。本指令适用于nginx开发人员
      pcre_jitpcre_jit on | off;pcre_jit off;1.1.12新增,启用或禁用对配置解析时已知的正则表达式使用“即时编译”
      pidpid file;pid logs/nginx.pid;pid 文件位置
      ssl_enginessl_engine device;定义硬件SSL加速器的名称
      thread_poolthread_pool name threads=number [max_queue=number];thread_pool default threads=32 max_queue=65536;1.7.11新增,定义线程池的名称和参数,用于多线程读取和发送文件,而不阻塞工作进程。
      timer_resolutiontimer_resolution interval;降低工作进程中的计时器频率,从而减少每天进行系统调用的次数。
      useruser user [group];user nobody nobody;定义工作进程使用的用户和组。
      worker_cpu_affinityworker_cpu_affinity cpumask …;
      worker_cpu_affinity auto [cpumask];
      将工作进程绑定到cpu中,1.9.10新增auto,可自动绑定。指令只在FreeBSD和 Linux可用
      worker_priorityworker_priority number;worker_priority 0;定义工作进程的调度优先级,负数意味着更高的优先级。允许的范围通常从-20到20
      worker_processesworker_processes number | auto;worker_processes 1;定义工作进程的数量,auto从1.3.8和 1.2.5开始支持
      worker_rlimit_coreworker_rlimit_core size;更改工作进程的核心文件(RLIMIT_CORE)的限制。用于增加限制,而不重新启动主进程。
      worker_rlimit_nofileworker_rlimit_nofile number;更改对工作进程的最大打开文件数量(RLIMIT_NOFILE)的限制。用于增加限制,而不重新启动主进程。
      worker_shutdown_timeoutworker_shutdown_timeout time;1.11.11新增,为工作进程的正常关闭配置了一个超时时间。当时间到期时,nginx将尝试关闭当前打开的所有连接,以方便关闭,
      working_directoryworking_directory directory;定义工作进程的当前工作目录。它主要用于写入核心文件时,在这种情况下,工作进程应该具有对指定目录的写权限
  2. events块

    • 配置影响nginx服务器或与用户的网络连接。有是否允许同时接受多个网路连接,选取哪种事件驱动模型处理连接请求,,每个进程的最大连接数,开启多个网络连接序列化等

    • 常用指令

      指令名语法默认值说明
      multi_acceptmulti_accept on | off;multi_accept off;如果为off,则一个工作进程将一次接受一个新的连接。否则一次接受所有新的连接。
      useuse method;指定要使用的连接处理方法。通常不需要显式地指定它,因为nginx将默认使用最有效的方法。
      worker_aio_requestsworker_aio_requests number;worker_aio_requests 32;当使用aio和epoll 时,为单个工作进程设置未完成的异步I/O操作的最大数量。
      worker_connectionsworker_connections number;worker_connections 512;设置工作进程可以打开的最大同时连接数。不能超过当前对最大打开文件数量的限制.
  3. http块

    • 可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

    • 文档:https://nginx.org/en/docs/http/ngx_http_core_module.html

    • 常用指令

      指令名文档地址默认值说明
      default_typedefulat_typedefault_type text/plain;默认相应类型
      error_pageerror_page定义将为指定的错误显示的URI。uri值可以包含一些变量。
      includeinclude在配置中包含另一个文件,或与指定的掩码相匹配的文件
  4. server块

    • 配置虚拟主机的相关参数,一个http中可以有多个server。

    • 常用指令

      指令名文档地址默认值说明
      listenlistenlisten *:80 | *:8000;监听端口
      locationlocation设置uri匹配
      server_nameserver_nameserver_name “”;设置虚拟服务器的名称
  5. location块

    • 配置请求的路由,以及各种页面的处理情况。

    • 文档:https://nginx.org/en/docs/http/ngx_http_core_module.html#location

    • 常用指令

      指令名语法默认值说明
      aliasalias path;
      error_pageerror_page code … [=[response]] uri;
      proxy_passproxy_pass URL;设置代理服务器的协议和地址,以及位置应该映射到的可选URI
      rootroot path;root html;
      try_filestry_files fileuri; try_files file … =code;检查按指定顺序排列的文件是否存在,并使用第一个找到的文件进行请求处理

2.4 全局变量

官方文档:https://nginx.org/en/docs/http/ngx_http_core_module.html#variables

下面是一些常用的全局变量:

全局变量名功能
$args请求中的参数
$body_bytes_sent客户端发送的字节数
$content_length请求头中的 Content-length 字段
$host请求头中的 Host,如果请求中没有 Host 行,则等于设置的服务器名,不包含端口
$http_cookie客户端cookie信息
$http_referer对应请求头的referer
$http_user_agent客户端agent信息
$http_x_forwarded_for请求头的x-forwarded-for
$request请求的URL与HTTP协议(如GET /index HTTP/1.0
$request_method客户端请求类型(如 GETPOST
$remote_addr客户端的 IP 地址
$remote_user客户端用户的名称
$remote_port客户端的端口
$server_protocol请求使用的协议(如 HTTP/1.0HTTP/1.1
$server_addr服务器地址
$server_name服务器名称
$server_port服务器的端口号
$schemeHTTP 方法(如http, https)
$statusHTTP响应代码(如 200, 404)
$uri请求 uri

三、HTTP 服务器

3.1 基本

默认配置

# 可以使用的 worker 进程数
worker_processes  1;

# 全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

events {
	# 单个进程最大连接数(最大连接数=连接数*进程数)
    worker_connections  1024;
    # 事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]
    # Linux 2.6以上版本内核中的高性能网络I/O模型,linux建议epoll,如果跑在FreeBSD上面,就用kqueue模型。
    # use epoll;
}

http {
    include       mime.types;
    # 默认文件类型, 未指定默认 text/plain; 当文件类型未定义时使用这种方式
    default_type  application/octet-stream;
    # 零拷贝,开启文件高效传输模式
    sendfile        on;
    # 连接超时时间
    keepalive_timeout  65;
    # 编码
    # charset utf-8;

    server {
        # 监听端口
        listen       80;
        # 主机域名
        server_name  localhost;
		# 配置请求的路由,以及各种页面的处理情况。
        location / {
        	# 网站根目录
            root   html;
            # 默认首页文件
            index  index.html index.htm;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

3.2 反向代理

官方文档:https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/

关于正向代理与反向代理

  • 客户端通过代理访问服务器,就是正向代理
  • 服务器通过代理与客户端保持连接,就是反向代理

两者区别就是正向代理,客户端是知道的,而反向代理,客户端是感知不到的

server {
	listen       80;
	location /api2/ {
		proxy_pass http://localhost:8080/;
	}
	location /api3/ {
		proxy_pass http://localhost:8081/;
	}
    location / {
        proxy_pass http://localhost:8082/;
    }
}

当访问http://localhost/api2/index.html时,反向代理访问 http://localhost:8080/index.html,注意8080后面的/,如果不加,那就访问http://localhost:8080/api2/index.html

3.3 压缩

开启压缩能够将传输的数据的大小减少一半甚至更多,减少带宽消耗

官方文档:http://nginx.org/en/docs/http/ngx_http_gzip_module.html

http{
    # 开启压缩
    gzip on;
    
    # 除 text/html 外,还可以指定被压缩的文件类型
    gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png;
    
    # 设置压缩级别,越高资源消耗越大,但压缩效果越好,范围从1到9,默认为1
    gzip_comp_level 5;
    
    # 在头部中添加Vary: Accept-Encoding(建议开启)
    gzip_vary on;
    
    # 处理压缩请求的缓冲区数量和大小,默认值 32 4k|16 8k;具体取决于平台
    gzip_buffers 16 8k;
    
    # 对于不支持压缩功能的客户端请求不开启压缩机制
    gzip_disable "MSIE [1-6]\."; # 低版本的IE浏览器不支持压缩
    
    # 设置压缩响应所支持的HTTP最低版本,默认1.1
    gzip_http_version 1.1;
    
    # 设置触发压缩的最小阈值,默认20, 长度从Content-Length获取
    gzip_min_length 2k;
    
    # 关闭对后端服务器的响应结果进行压缩
    gzip_proxied off;
}

nginx_gzip

3.4 负载均衡

官方文档:https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/

  • upstream: https://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream
  • server: https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server

负载均衡类型:

  • 默认为 Round Robin,轮询,请求均匀分布在服务器之间,并考虑服务器权重
  • least_conn, 将请求传递到活动连接数最少的服务器,并考虑到服务器的权重
  • ip_hash,请求基于客户端IP地址在服务器之间分发
  • hash,请求基于给定的key hash
  • random,请求会传递到随机选择的服务器,并考虑到服务器的权重
upstream backend{
	#  least_conn;
	#  ip_hash;
	#  hash $request_uri consistent;
	#  random two least_time=last_byte;

    server localhost:8080 weight=3 max_fails=2 fail_timeout=30s; 
    server localhost:8081 weight=1 max_fails=2 fail_timeout=30s;
    server localhost:8082 backup;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

3.5 HTTPS 支持

需要生成ssl证书

server {
        listen  443 ssl;
        server_name  localhost;
        ssl_certificate      /usr/local/nginx/ssl/demo.crt;
        ssl_certificate_key  /usr/local/nginx/ssl/demo.key;
        location / {
            root   html;
            index  index.html index.htm;
        }
}

3.6 UrlRewrite

可以通过rewrite url实现页面跳转,参数隐藏等功能

文档:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

  • 参数隐藏

    location / {
    	# 将类似 1.html 替换为 index?page=1 
    	rewrite ^/([0-9]+).html$ /index?page=$1 break;
    	proxy_pass http://localhost:8081;
    }
    
  • 旧域名跳转到新域名

    server {
    	listen 80;
    	server_name www.a.com;
    	
    	location = / {
    		if ($host = "www.a.com") {
    			rewrite ^/(.*)$ http://www.b.com/$1 permanent;
    		}
    	}
    }
    

3.7 防盗链配置

valid_referers 相关文档:http://nginx.org/en/docs/http/ngx_http_referer_module.html

location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {
    valid_referers none blocked server_names ~\.google\. ~\.baidu\. *.qq.com; 
    if ($invalid_referer){
      return 403;
    }
}

3.8 跨域

以下是两种方案:

  1. 反向代理

    proxy_cookie_domain文档:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cookie_domain

    location ^~/apis/ {
        rewrite ^/apis/(.*)$ /$1 break;
        proxy_pass a.demo.com;
      
        # 两个域名之间cookie的传递与回写
        proxy_cookie_domain a.demo.com b.demo.com;
    }
    
  2. Header头添加

    server {
        listen       80;
        server_name  localhost;
      
    	add_header 'Access-Control-Allow-Origin' $http_origin;   # 全局变量获得当前请求origin,带cookie的请求不支持*
    	add_header 'Access-Control-Allow-Credentials' 'true';    # 为 true 可带上 cookie
    	add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';  # 允许请求方法
    	add_header 'Access-Control-Allow-Headers' $http_access_control_request_headers;  # 允许请求的 header,可以为 *
    	add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
    	
        if ($request_method = 'OPTIONS') {
    		add_header 'Access-Control-Max-Age' 1728000;   # OPTIONS 请求的有效期,在有效期内不用发出另一条预检请求
    		add_header 'Content-Type' 'text/plain; charset=utf-8';
    		add_header 'Content-Length' 0;
        
    		return 204;                  # 200 也可以
    	}
      
    	location / {
    		root  html;
    		index index.html;
    	}
    }
    

3.9 静态服务

文档:http://nginx.org/en/docs/http/ngx_http_autoindex_module.html

server {
  listen       80;
  server_name  localhost;
  charset utf-8;   

  location /download {
    alias	          html/static;  # 静态资源目录
    
    autoindex               on;    # 开启静态资源列目录
    autoindex_exact_size    off;   # on(默认)显示文件的确切大小,单位是byte;off显示文件大概大小,单位KB、MB、GB
    autoindex_localtime     off;   # off(默认)时显示的文件时间为GMT时间;on显示的文件时间为服务器时间
  }
}

3.10 PC/手机端分离

通过user agent 控制访问不同网页

server {
    listen 80;
	server_name localhost;

	location / {
		root  html/pc;
        if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {
          root html/mobile;
        }
		index index.html;
	}
}

3.11 黑白名单

控制访问:https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-tcp/

指令是从上到下依次执行的:如果指令序列中的第一个指令拒绝了所有,那么所有下一步允许的指令都没有效果

location / {
  # 允许访问
  allow 192.168.0.2;
  # 禁止访问
  deny all;
}

3.12 静态文件缓存

expires文档:http://nginx.org/en/docs/http/ngx_http_headers_module.html#expires

location ~ .*\.(css|js|jpg|png|gif|swf|woff|woff2|eot|svg|ttf|otf|mp3|m4a|aac|txt)$ {
	expires 10d;
}

参考

  1. Nginx 从入门到实践,万字详解!
  2. (三)Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化…想要的这都有!
  3. nginx七大核心应用场景详解 解决生产中的实际问题 二次开发扩展
  4. https://docs.nginx.com/search.html

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

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

相关文章

Web3 solidity编写fillorder填充订单函数 并梳理讲述逻辑

好 经过上文 Web3 solidity编写cancelorder取消订单函数 并梳理讲述逻辑 我们成功编写了 cancelorder 取消订单函数 其实 做了取消订单 填充订单 已经是非常简单的事了 我们还是先起来ganache 虚拟环境 这里 我们 模仿 orderCancel 在做一存储结构 //存储被填充订单 mapping…

追光者的梦

追光者的梦 鸿蒙中我茫然于世,你是钻入我心里的那束光 我所有的梦想都是和你热烈的拥抱 没有追到你时,我一直在路上 追到你时,我的人生就被你点燃 ——致所有的追光者 合肥先进光源国家重大科技基础设施项目及配套工程启动会刚开过&…

go学习之数组与Map

文章目录 一、数组1.为什么需要数组2.数组快速入门3、数组的定义和内存布局数组的使用数组的遍历数组的注意事项和细节数组的应用案例 4.slice切片1.基本介绍2.切片使用的三种方式way1way2way3 3.切片的注意事项4.string和slice 5.二维数组1.排序1)排序的基本介绍2&…

uni-app实现获取未来七天时间和星期几功能

例子如下&#xff1a; HTML&#xff1a; <viewstyle"margin-top: 3%;width: 100%;height: 10vh;display: flex;justify-content: space-around;"><div v-for"(item,index) in same_week" :class"[same_dayitem.date? activ :,dis]"cl…

在虚拟机上安装win10/ubuntu的教程

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 一、下载软件资源 1、首先下载虚拟机Vmware_Pro17软件并正确安装&#xff1a;网盘链接 2、然后下载操作系统的镜像文件&#xff1a;MSDN, 我告诉你 - 做一个安静的工具站 二、在虚拟机上安装ubuntu系统 1…

EXP武器库编写

文章目录 pocsuite3工具SQL注入EXP布尔盲注优化最终优化 延时注入 phpstudy2016-2018-RCE利用DVWA文件上传metinfo_5.0.4EXPSQL-布尔盲注文件包含漏洞 定制SQLmaptamper脚本sqli-labs/less-26关卡分析 tamper脚本编写 python是黑客最喜欢的编程语言之一&#xff0c;但同时go语言…

基于AVR128单片机智能电风扇控制系统

一、系统方案 模拟的电风扇的工作状态有3种&#xff1a;自然风、常风及睡眠风。使用三个按键S1-S3设置自然风、常风及睡眠风。 再使用两个按键S4和S5&#xff0c;S4用于定时电风扇定时时间长短的设置&#xff0c;每按一次S4键&#xff0c;定时时间增加10秒&#xff0c;最长60秒…

C/C++程序员技术发展方向(强烈推荐!!)

大家好&#xff0c;我是阿Q。 今天这篇就是专门给现在还迷茫不知道自己到底要做什么方向C开发的同学们。 几年后回过头看的时候&#xff0c;你一定会感谢当初那个努力的自己&#xff01; C作为当下也非常流行的一个面向对象语言&#xff0c;有着非常多的应用&#xff0c;一定…

RHCSA 文件的上传下载(Linux-Windows)

目录 一、SCP 上传&#xff08;Windows--->Linux&#xff09;&#xff1a; 下载&#xff08;Linux--->Windows&#xff09;&#xff1a; 二、STFP 三、XFTP工具 一、SCP 上传&#xff08;Windows--->Linux&#xff09;&#xff1a; 在Windows本地端命令窗口中转…

基因组注释(Annotation)

基因组组装完成后&#xff0c;或者是完成了草图&#xff0c;就不可避免遇到一个问题&#xff0c;需要对基因组序列进行注释。注释之前首先得构建基因模型&#xff0c;有三种策略&#xff1a; 从头注释(de novo prediction)&#xff1a;通过已有的概率模型来预测基因结构&#…

【刷题】2023年第十四届蓝桥杯大赛软件类省赛C/C++大学A组真题

蓝桥杯2023年第十四届省赛真题-平方差 - C语言网 (dotcpp.com) 初步想法&#xff0c;x y2 − z2&#xff08;yz)(y-z) 即xa*b&#xff0c;ayz&#xff0c;by-z 2yab 即ab是2的倍数就好了。 即x存在两个因数之和为偶数就能满足条件。 但时间是&#xff08;r-l&#xff09;*x&am…

C语言回调函数与注册函数的使用

概述 在项目中&#xff0c;经常见到此写法&#xff0c;在此写个demo&#xff0c;方便其他工程师参阅。 开发环境&#xff1a;Visual Studio Community 2022 1、代码 #include <stdio.h>//封装库代码 typedef struct {bool status;void (*setStatus)(int status); }T_…

动手吧,vue单选框

单选框到处可见&#xff0c;组件库不方便自定义样式&#xff0c;还是自己写吧。 效果图&#xff1a; 1、template部分 <template><labelclass"v-radio flex":class"[{ disable: disabled }]":aria-disabled"disabled"><spancla…

如何搭建专属的物联网私有云?需要考虑哪些因素?

随着物联网技术的快速发展&#xff0c;越来越多的企业开始意识到搭建专属的物联网私有云的重要性。私有云是指企业自主建设和管理的云服务环境&#xff0c;其中企业可以实现对数据和服务的全面控制&#xff0c;同时也可以享受云服务的高效性和灵活性。 一、企业做专属物联网私…

基于jenkins+k8s实现devops

1、背景 由于jenkins运行在k8s上能够更好的利用动态agent进行构建。所以写了个部署教程&#xff0c;亲测无坑 2、部署 1、创建ns kubectl create namespace devops 2、kubectl apply -f jenkins.yml apiVersion: v1 kind: ServiceAccount metadata:name: jenkinsnamespace…

用于图像分类的预训练模型(PyTorch实现)

用于图像分类的预训练模型&#xff08;PyTorch实现&#xff09; 在本文中&#xff0c;我们将介绍一些使用 TorchVision 模块中存在的预训练网络的实践示例——用于图像分类的预训练模型。 1. 基于预训练模型进行图像分类 预训练模型是在 ImageNet 等大型基准数据集上训练的神…

力扣刷题-链表-移除链表元素

203.移除链表元素 题意&#xff1a;删除链表中等于给定值 val 的所有节点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 示例 2&#xff1a; 输入&#xff1a;head [], val 1 输出&#xff1a;[] 示例 3&#xff1a; 输…

arduino u8g2 表情字库制作

U8G2 下载原代码 &#xff1a; GitHub - olikraus/u8g2: U8glib library for monochrome displays, version 2 1.制作图片 使用FLASH 或任何可以画图的软件制作动态图片PNG格式 大小最好先设定好如40x80 ,最好不要太大 128X64,60X60 将制作好的图片放入 下载好的 u8g2-master…

【每日一题】1539. 第 k 个缺失的正整数

1539. 第 k 个缺失的正整数 - 力扣&#xff08;LeetCode&#xff09; 给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。 请你找到这个数组里第 k 个缺失的正整数。 示例 1&#xff1a; 输入&#xff1a;arr [2,3,4,7,11], k 5 输出&#xff1a;9 解释&#xff1a;缺失…

国科大体系结构习题 | 第二章 计算机系统结构基础

第二章 习题汇总 Q1. 在3台不同指令系统的计算机上运行同一程序P时&#xff0c;A机需要执行 1.0 1 0 8 1.010^8 1.0108条指令&#xff0c;B机需要执行 2.0 1 0 8 2.0 10^8 2.0108条指令&#xff0c;C机需要执行 4.0 1 0 8 4.010^8 4.0108条指令&#xff0c;但实际执行时间…