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

Nginx实战经验分享:从小白到专家的成长历程!

目录

  • 一、Nginx概述
    • 1、Nginx简介
      • (1)事件驱动模型
      • (2)异步处理
      • (3)模块化设计
      • (4)高性能
      • (5)反向代理
      • (6)负载均衡
      • (7)缓存和压缩
      • (8)跨平台兼容性
    • 2、Nginx的历史与发展
      • (1)Nginx的起源
      • (2)Nginx的版本迭代
      • (3)Nginx的社区与商业化
      • (4)Nginx的广泛应用
      • (5)Nginx的未来展望
    • 3、Nginx的优势与特点
      • (1)高性能与低资源消耗
      • (2)高度可伸缩性
      • (3)高度灵活的配置
      • (4)强大的反向代理功能
      • (5)社区支持和生态系统
  • 二、Nginx安装与配置
    • 1、Nginx安装步骤
      • (1)在Linux系统上安装Nginx
      • (2)在Windows系统上安装Nginx
      • (3)使用源代码编译安装
    • 2、Nginx配置文件解析
      • (1)配置文件结构
      • (2)全局块配置
      • (3)events块配置
      • (4)http块配置
      • (5)常见配置指令
      • (6)高级配置
    • 3、Nginx常见配置案例
      • (1)静态网站托管
      • (2)反向代理配置
      • (3)负载均衡配置
      • (4)HTTPS配置
      • (5)缓存配置
  • 三、Nginx作为Web服务器
    • 1、静态文件处理
      • (1)静态文件处理的基本概念
      • (2)Nginx处理静态文件的配置
      • (3)提高静态文件处理性能的技巧
      • (4)处理静态文件的最佳实践
    • 2、反向代理配置
      • (1)反向代理的基本概念
      • (2)反向代理的配置方法
      • (3)反向代理的高级配置
      • (4)反向代理的最佳实践
    • 3、负载均衡策略
      • (1)负载均衡的基本原理
      • (2)Nginx的负载均衡配置
      • (3)高级负载均衡策略
      • (4)负载均衡的最佳实践
  • 四、Nginx安全与优化
    • 1、Nginx安全措施
      • (1)限制请求大小
      • (2)隐藏Nginx版本信息
      • (3)使用SSL/TLS加密
      • (3)启用HTTP严格传输安全(HSTS)
      • (5)防止目录遍历攻击
      • (6)限制请求速率
      • (7)使用防火墙
      • (8)防止SQL注入和XSS攻击
      • (9)定期更新和打补丁
      • (10)安全配置的最佳实践
    • 2、性能优化技巧
      • (1)调整工作模式和连接数
      • (2)开启文件描述符缓存
      • (3)优化静态文件处理
      • (4)使用缓存和负载均衡
      • (5)优化日志记录
      • (6)使用SSL/TLS优化
      • (7)系统层面的优化
    • 3、高可用性配置
      • (1)负载均衡与故障转移
      • (2)使用Keepalived实现虚拟路由冗余
      • (3)使用Nginx的多实例功能
      • (4)监控与报警
      • (5)定期测试和演练


一、Nginx概述

1、Nginx简介

Nginx(发音为“Engine-X”)是一个高性能的HTTP和反向代理服务器,同时也用作邮件(IMAP/POP3)代理服务器。由俄罗斯程序员Igor Sysoev于2002年开发,首次公开发布于2004年。Nginx以其高性能、稳定性、低资源消耗和强大的功能特性而广受欢迎,成为当今互联网上最流行的Web服务器之一。

以下是关于Nginx的几个关键特性:

(1)事件驱动模型

Nginx采用事件驱动模型,使得它能够高效地处理大量并发连接。与传统的进程或线程模型相比,事件驱动模型可以显著减少系统资源消耗,从而提高服务器的性能。

(2)异步处理

Nginx支持异步处理,这意味着它可以在不阻塞主线程的情况下处理多个请求。这种机制使得Nginx能够同时处理成千上万的并发连接,而不会出现性能瓶颈。

(3)模块化设计

Nginx的设计采用模块化架构,用户可以根据需要添加或删除模块,以实现特定的功能。这种设计使得Nginx具有极高的灵活性和可扩展性。

(4)高性能

Nginx在处理静态文件、索引文件和自动索引方面具有极高的性能。它能够以极低的资源消耗处理大量的并发请求,这使得Nginx成为高流量网站的理想选择。

(5)反向代理

Nginx不仅可以作为Web服务器,还可以作为反向代理服务器。反向代理是指将客户端的请求转发到后端服务器,然后将响应返回给客户端。这种部署方式可以隐藏后端服务器的信息,提高安全性,同时还可以实现负载均衡。

(6)负载均衡

Nginx支持多种负载均衡策略,包括轮询、最少连接、IP哈希等。负载均衡可以将流量均匀地分配到多个服务器上,从而提高系统的整体性能和可靠性。

(7)缓存和压缩

Nginx支持HTTP缓存和压缩功能,可以减少网络传输的数据量,提高页面加载速度,降低服务器的负载。

(8)跨平台兼容性

Nginx可以在多种操作系统上运行,包括Linux、Windows、Mac OS X等。这使得Nginx具有很高的通用性,可以满足不同用户的需求。

Nginx的这些特性使其成为Web服务器领域的佼佼者。无论是大型企业还是个人开发者,都可以利用Nginx搭建高效、稳定的Web服务。在接下来的章节中,我们将详细介绍Nginx的安装、配置、应用场景以及安全与优化策略。

2、Nginx的历史与发展

(1)Nginx的起源

Nginx的诞生可以追溯到2002年,当时俄罗斯程序员Igor Sysoev在为俄罗斯最大的搜索引擎Rambler.ru工作期间,为了解决网站高并发访问的问题,开始着手开发一个全新的Web服务器。Igor Sysoev基于当时已有的Web服务器软件,结合自己的理解和需求,设计并实现了Nginx。2004年,Nginx首次公开发布,并迅速在开源社区中获得了关注。

(2)Nginx的版本迭代

自2004年发布以来,Nginx经历了多次版本迭代,不断完善和增强其功能。以下是Nginx版本迭代的一些重要节点:

  • 2004年: Nginx 0.1.0版本发布,标志着Nginx的正式诞生。
  • 2005年: Nginx 0.2.0版本发布,增加了对SSL/TLS的支持。
  • 2007年: Nginx 0.5.0版本发布,引入了缓存功能。
  • 2010年: Nginx 0.8.0版本发布,增加了对WebSockets的支持。
  • 2011年: Nginx 1.0.0版本发布,引入了更完善的负载均衡功能。
  • 2012年: Nginx 1.2.0版本发布,增加了对HTTP/2的支持。
  • 2016年: Nginx 1.10.0版本发布,增加了对HTTP/2的服务器端推送功能。
  • 2020年: Nginx 1.19.0版本发布,引入了Quic协议的支持。

(3)Nginx的社区与商业化

随着Nginx的普及,其社区也逐渐壮大。全球有成千上万的开发者和用户参与到Nginx的开发、测试和文档编写中。社区成员通过邮件列表、论坛和GitHub等方式进行交流和协作,共同推动Nginx的发展。

2011年,Igor Sysoev与Gus Robertson共同创立了Nginx公司,旨在为Nginx提供商业支持和服务。Nginx公司不仅提供了企业级的支持,还推出了Nginx Plus,这是一个基于Nginx的开源版本,增加了更多的企业级特性和功能,如高级负载均衡、缓存、监控和报告等。

(4)Nginx的广泛应用

Nginx因其高性能、稳定性以及灵活的配置选项,被广泛应用于各种场景。以下是一些典型的应用案例:

  • Web服务器: Nginx常作为Web服务器,用于托管静态网站和内容管理系统。
  • 反向代理: Nginx可以作为反向代理服务器,隐藏后端服务器的信息,提高安全性。
  • 负载均衡: Nginx支持多种负载均衡策略,用于分配流量到不同的服务器,提高系统的整体性能。
  • 缓存: Nginx可以缓存静态内容,减少后端服务器的负载,提高响应速度。
  • 媒体流: Nginx支持流媒体传输,常用于视频和音频流的分发。

(5)Nginx的未来展望

随着互联网技术的不断进步,Nginx也在不断地演进和扩展其功能。未来,Nginx可能会增加对新兴协议的支持,如HTTP/3,以及更智能的负载均衡和缓存策略。此外,随着容器化和微服务架构的流行,Nginx在服务网格和边缘计算领域也有望发挥更大的作用。

总之,Nginx的历史与发展体现了开源软件的活力和创新能力。作为一个高性能的Web服务器,Nginx将继续在互联网领域扮演着重要的角色。

3、Nginx的优势与特点

Nginx(发音为“Engine-X”)是一款高性能的HTTP和反向代理服务器,同时也用作负载均衡器。自2004年首次发布以来,Nginx因其卓越的性能和灵活性,在全球范围内得到了广泛的应用。以下是Nginx的几个显著优势和特点:

(1)高性能与低资源消耗

Nginx的核心优势之一是其高性能。它采用了异步事件驱动的方法,这使得Nginx在处理大量并发连接时表现出色。与传统的同步阻塞模型相比,Nginx可以在相同的硬件资源下处理更多的并发请求,而不会出现性能瓶颈。以下是几个关键因素:

  • 事件驱动模型:Nginx使用事件驱动模型,允许单个工作进程同时处理多个网络连接,从而减少了上下文切换的开销。
  • 轻量级进程:Nginx的工作进程非常轻量,不需要像Apache那样启动多个进程或线程来处理并发请求。
  • 内存使用优化:Nginx在内存使用上非常高效,它能够以极低的内存占用处理大量并发连接。

(2)高度可伸缩性

Nginx的设计使其能够轻松扩展,以适应不断增长的流量需求。无论是从小型网站到大型企业级应用,Nginx都能够提供稳定的性能。以下是几个可伸缩性的体现:

  • 模块化架构:Nginx的模块化架构允许开发者根据需要添加或删除功能,而不会影响核心功能。
  • 负载均衡:Nginx可以作为负载均衡器,将流量分发到多个后端服务器,从而提高整体的处理能力。
  • 热部署:Nginx支持热部署,可以在不中断服务的情况下更新配置和二进制文件。

(3)高度灵活的配置

Nginx的配置文件非常灵活,允许管理员精确控制服务器的行为。配置文件采用简单的文本格式,易于阅读和理解。以下是一些配置上的优势:

  • 配置指令:Nginx提供了丰富的配置指令,可以精确配置HTTP服务器、反向代理、负载均衡等。
  • 上下文配置:Nginx的配置文件支持多个嵌套的上下文,如http、server、location等,使得配置更加模块化和清晰。
  • 变量支持:Nginx内置了许多变量,同时还支持自定义变量,使得配置更加灵活。

(4)强大的反向代理功能

Nginx作为一个反向代理服务器,可以将请求转发到不同的后端服务器,同时提供SSL终端、缓存、压缩等功能。以下是Nginx在反向代理方面的几个特点:

  • SSL终端:Nginx支持SSL终端,可以在反向代理时处理HTTPS请求。
  • 缓存:Nginx可以缓存静态内容,减少后端服务器的负载。
  • 压缩:Nginx支持GZIP和其他压缩算法,可以减少网络传输的数据量。

(5)社区支持和生态系统

Nginx拥有一个活跃的社区,提供了大量的模块和扩展,以满足不同用户的需求。此外,Nginx的生态系统也非常丰富,包括监控、日志分析、安全扫描等工具。

总之,Nginx因其高性能、低资源消耗、高度可伸缩性、灵活的配置以及强大的反向代理功能,成为了Web服务器领域的佼佼者。无论是对于个人开发者还是大型企业,Nginx都是一个值得信赖的选择。

二、Nginx安装与配置

1、Nginx安装步骤

Nginx因其高性能和稳定性,成为了许多开发者和系统管理员的首选Web服务器。以下将详细介绍Nginx在不同操作系统上的安装步骤,确保您能够顺利部署这一强大的服务器软件。

(1)在Linux系统上安装Nginx

大多数Linux发行版都提供了Nginx的官方软件包,可以通过包管理器进行安装。

  • Ubuntu/Debian系统

    1. 更新包列表:
      sudo apt update
      
    2. 安装Nginx:
      sudo apt install nginx
      
    3. 启动Nginx服务:
      sudo systemctl start nginx
      
    4. 设置Nginx开机自启:
      sudo systemctl enable nginx
      
    5. 检查Nginx状态:
      sudo systemctl status nginx
      
  • CentOS/RHEL系统

    1. 安装EPEL仓库:
      sudo yum install epel-release
      
    2. 安装Nginx:
      sudo yum install nginx
      
    3. 启动Nginx服务:
      sudo systemctl start nginx
      
    4. 设置Nginx开机自启:
      sudo systemctl enable nginx
      
    5. 检查Nginx状态:
      sudo systemctl status nginx
      

(2)在Windows系统上安装Nginx

Windows系统上安装Nginx通常需要下载预编译的二进制文件或使用第三方软件包。

  • 下载与安装

    1. 访问Nginx官方网站或第三方资源,下载适用于Windows的Nginx版本。
    2. 将下载的文件解压到指定的目录,例如 C:\\nginx
    3. 打开命令提示符,切换到Nginx目录:
      cd C:\\nginx
      
    4. 启动Nginx:
      start nginx
      
    5. 检查Nginx是否启动成功,可以通过浏览器访问 http://localhost 来测试。

(3)使用源代码编译安装

如果您需要自定义Nginx的编译选项或安装最新的开发版本,可以通过源代码编译安装。

  • 安装编译依赖

    根据您的操作系统,安装必要的编译工具和依赖库。例如,在Ubuntu系统上,您可能需要安装以下包:

    sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev
    
  • 下载源代码

    从Nginx官方网站或GitHub仓库下载最新的源代码。

  • 编译与安装

    1. 解压源代码包,切换到源代码目录。
    2. 配置编译选项:
      ./configure --prefix=/usr/local/nginx
      
    3. 编译和安装:
      make
      sudo make install
      
  • 启动Nginx

    切换到安装目录,启动Nginx服务。

    /usr/local/nginx/sbin/nginx
    

安装完成后,您可以通过访问 http://localhost 来验证Nginx是否正常工作。此外,根据您的需求,您可能还需要配置防火墙规则,以确保Nginx能够接受来自外部的连接请求。

2、Nginx配置文件解析

Nginx的强大功能和灵活性很大程度上来自于其配置文件。正确理解和配置Nginx的配置文件是确保Web服务器高效运行的关键。以下是Nginx配置文件的详细解析,帮助您深入理解并掌握配置技巧。

(1)配置文件结构

Nginx的主要配置文件通常位于 /etc/nginx/nginx.conf,其结构可以分为三个主要部分:全局块、events块和http块。

  • 全局块:此块设置了Nginx的整体运行参数,如用户、工作进程数、错误日志位置等。
  • events块:此块定义了Nginx处理连接的方式,包括连接池大小、使用哪种网络连接方法等。
  • http块:这是最复杂的块,包含了所有HTTP服务器的配置,如upstream、server和location块。

(2)全局块配置

全局块中的配置通常影响Nginx的整体行为。

  • user:指定运行Nginx进程的用户和组。

    user nginx;
    
  • worker_processes:指定Nginx的工作进程数,通常设置为CPU核心数。

    worker_processes auto;
    
  • error_log:设置错误日志的文件路径和级别。

    error_log /var/log/nginx/error.log warn;
    
  • pid:指定存储Nginx进程ID的文件路径。

    pid /var/run/nginx.pid;
    

(3)events块配置

events块用于设置Nginx处理连接的方式。

  • worker_connections:每个工作进程可以打开的最大连接数。

    events {worker_connections 1024;
    }
    
  • use:指定用于网络连接的I/O模型,通常是 epoll(在Linux上)或 kqueue(在BSD系统上)。

    events {use epoll;worker_connections 1024;
    }
    

(4)http块配置

http块是Nginx配置的核心,其中包含了处理HTTP请求的规则。

  • upstream:定义一组服务器,用于负载均衡。

    http {upstream myapp {server backend1.example.com;server backend2.example.com;}
    }
    
  • server块:定义了虚拟主机的配置,每个server块可以包含多个location块。

    server {listen 80;server_name example.com www.example.com;location / {proxy_pass http://myapp;}
    }
    
  • location块:用于匹配请求的URI,并根据匹配结果应用特定的配置。

    location / {root /usr/share/nginx/html;index index.html index.htm;
    }
    

(5)常见配置指令

以下是Nginx配置中一些常见的指令:

  • listen:指定服务器监听的端口。

    listen 80;
    
  • server_name:定义虚拟主机的域名。

    server_name example.com www.example.com;
    
  • root:设置静态文件的根目录。

    root /usr/share/nginx/html;
    
  • index:指定默认的首页文件。

    index index.html index.htm;
    
  • proxy_pass:设置代理请求的转发地址。

    proxy_pass http://myapp;
    
  • include:包含其他配置文件,常用于管理多个server块的配置。

    include /etc/nginx/conf.d/*.conf;
    

(6)高级配置

除了基本的配置,Nginx还支持许多高级特性,如缓存、Gzip压缩、SSL加密等。

  • 缓存:通过配置 proxy_cacheproxy_cache_path 指令,可以缓存代理请求的内容。

    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
    proxy_cache my_cache;
    
  • Gzip压缩:通过 gzip 模块,可以压缩响应数据以减少传输大小。

    gzip on;
    gzip_disable \msie6\ ```
  • SSL加密:使用 ssl_certificatessl_certificate_key 指令配置SSL证书和私钥。

    server {listen 443 ssl;ssl_certificate /etc/ssl/certs/example.com.crt;ssl_certificate_key /etc/ssl/private/example.com.key;
    }
    

通过深入理解和掌握Nginx配置文件的各个部分和指令,您可以有效地管理和优化您的Web服务器,以满足各种不同的应用需求。记住,良好的配置实践是确保服务器性能和可靠性的关键。

3、Nginx常见配置案例

Nginx作为一个高性能的Web服务器和反向代理服务器,其配置的灵活性和强大功能让它能够适应各种不同的网络应用场景。以下是几个Nginx常见配置案例,帮助您更好地理解和应用Nginx的配置技巧。

(1)静态网站托管

静态网站托管是Nginx最基础的用途之一。以下是一个简单的配置示例,用于托管一个静态网站。

server {listen 80;server_name static.example.com;location / {root /usr/share/nginx/html/static;index index.html index.htm;try_files $uri $uri/ =404;}
}

在这个配置中:

  • listen 80; 指定了Nginx监听的端口为80。
  • server_name static.example.com; 定义了虚拟主机的域名。
  • root /usr/share/nginx/html/static; 设置了静态文件的根目录。
  • index index.html index.htm; 指定了默认的首页文件。
  • try_files $uri $uri/ =404; 尝试按顺序查找请求的URI和URI的目录,如果找不到则返回404错误。

(2)反向代理配置

反向代理是Nginx的另一个常见用途,它可以隐藏后端服务器的信息,并提供额外的安全层。

以下是一个配置反向代理的示例,用于代理到后端的API服务器。

server {listen 80;server_name api.example.com;location /api/ {proxy_pass http://backend_api;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection \upgrade\ proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;}
}

在这个配置中:

  • proxy_pass http://backend_api; 将请求转发到名为 backend_api 的upstream。
  • proxy_http_version 1.1; 使用HTTP/1.1协议。
  • proxy_set_header 设置了传递给后端服务器的HTTP头信息。

(3)负载均衡配置

Nginx可以作为负载均衡器,将请求分发到后端服务器。以下是一个简单的负载均衡配置示例。

http {upstream backend_servers {server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {listen 80;server_name lb.example.com;location / {proxy_pass http://backend_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
}

在这个配置中:

  • upstream backend_servers 定义了一个upstream,包含三个后端服务器。
  • proxy_pass http://backend_servers; 将请求分发到upstream中的服务器。
  • proxy_set_header 设置了传递给后端服务器的HTTP头信息,包括真实IP地址和请求协议。

(4)HTTPS配置

为了确保数据传输的安全,通常需要对Nginx进行HTTPS配置。以下是一个配置HTTPS的示例。

server {listen 443 ssl;server_name secure.example.com;ssl_certificate /etc/ssl/certs/secure.example.com.crt;ssl_certificate_key /etc/ssl/private/secure.example.com.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256...';ssl_prefer_server_ciphers on;location / {proxy_pass http://backend;# 其他配置...}
}

在这个配置中:

  • listen 443 ssl; 指定了Nginx监听的端口为443,并启用SSL。
  • ssl_certificatessl_certificate_key 指定了SSL证书和私钥的路径。
  • ssl_protocolsssl_ciphers 设置了SSL协议和加密套件。

(5)缓存配置

Nginx可以配置缓存来提高内容的加载速度和减少后端服务器的负载。以下是一个配置缓存的示例。

http {proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;server {listen 80;server_name cache.example.com;location / {proxy_cache my_cache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;proxy_pass http://backend;# 其他配置...}}
}

在这个配置中:

  • proxy_cache_path 定义了缓存的存储路径、参数和缓存区域。
  • proxy_cache 指定了使用哪个缓存区域。
  • proxy_cache_valid 设置了不同HTTP状态码的缓存时间。

这些配置案例展示了Nginx在不同场景下的应用。通过合理配置Nginx,您可以提高网站的性能、安全性和可靠性。在实际部署时,您需要根据具体的业务需求和服务器环境进行调整和优化。

三、Nginx作为Web服务器

1、静态文件处理

在Web服务器领域,处理静态文件是Nginx最基本的功能之一。静态文件通常指的是HTML页面、CSS样式表、JavaScript脚本、图片和其他媒体文件等不涉及服务器端处理的文件。Nginx以其高效的处理能力和简洁的配置方式,成为处理静态文件的理想选择。以下是关于Nginx如何高效处理静态文件的详细探讨。

(1)静态文件处理的基本概念

静态文件处理是指Web服务器直接将存储在服务器上的文件发送给客户端的过程。与动态内容不同,静态文件不需要服务器进行任何额外的处理,如数据库查询或代码执行。因此,处理静态文件的速度通常取决于服务器的网络带宽和磁盘I/O性能。

(2)Nginx处理静态文件的配置

在Nginx中,处理静态文件主要涉及到location块和相关的指令。以下是一个基本的配置示例:

server {listen 80;server_name static.example.com;location / {root /usr/share/nginx/html;index index.html index.htm;try_files $uri $uri/ =404;}
}

在这个配置中:

  • root /usr/share/nginx/html; 指定了静态文件的根目录,即静态文件存放的位置。
  • index index.html index.htm; 设置了默认的首页文件,当访问根目录时,Nginx会尝试提供这些文件。
  • try_files $uri $uri/ =404; 尝试按顺序查找请求的URI和URI的目录,如果找不到则返回404错误。

(3)提高静态文件处理性能的技巧

为了进一步提高Nginx处理静态文件的性能,以下是一些常用的技巧:

  • 开启文件压缩:通过开启Gzip或Brotli压缩,可以显著减少传输文件的大小,加快加载速度。
http {gzip on;gzip_types text/plain application/xml text/css application/javascript application/json;gzip_min_length 1000;gzip_vary on;
}
  • 使用缓存:Nginx可以配置本地缓存,使得频繁请求的文件能够快速响应,减少磁盘I/O操作。
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
  • 设置合理的缓存策略:通过HTTP头信息控制浏览器缓存,减少重复请求。
location ~* \\.(jpg|jpeg|png|gif|ico)$ {expires 30d;add_header Cache-Control \public\`- **启用sendfile**:使用`sendfile`指令可以减少数据在用户空间和内核空间之间的拷贝,提高文件传输效率。```nginx
http {sendfile on;
}
  • 优化文件读取:通过调整aio(异步I/O)和directio(直接I/O)指令,可以优化文件系统的读取性能。
http {aio on;directio 512k;
}

(4)处理静态文件的最佳实践

在处理静态文件时,以下是一些最佳实践:

  • 分离静态文件:将静态文件放在单独的域名或子域名下,可以减少DNS查找时间,并提高浏览器并行下载的能力。
  • 使用CDN:内容分发网络(CDN)可以将静态文件分发到全球的多个节点,减少用户的延迟,提高访问速度。
  • 定期清理缓存:定期清理Nginx的缓存,确保用户总是获取最新的内容。
    -监控和日志**:通过监控和日志记录可以了解Nginx的性能瓶颈,并据此进行优化。

通过以上配置和技巧,Nginx能够高效地处理静态文件,为用户提供快速、可靠的Web访问体验。在处理静态文件时,合理配置和优化Nginx是确保网站性能的关键。

2、反向代理配置

反向代理是Nginx的另一个核心功能,它允许Nginx接收客户端的请求,然后将这些请求转发到内部网络中的上游服务器。这种配置方式可以隐藏后端服务器的信息,提高安全性,同时还可以实现负载均衡和缓存等功能。以下是关于Nginx反向代理配置的详细讨论。

(1)反向代理的基本概念

反向代理与传统的直接访问服务器不同,它处于客户端和服务器,充当中间人的角色。客户端将请求发送到反向代理服务器,然后反向代理服务器将请求转发到后端服务器。后端服务器处理请求后,将响应返回给反向代理服务器,由反向代理服务器将响应结果返回给客户端。

(2)反向代理的配置方法

在Nginx中配置反向代理相对简单,涉及到location块和proxy_pass指令。以下是一个基本的反向配置示例:

server {listen 80;server_name proxy.example.com;location / {proxy_pass http://backend_server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header XForwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

在这个配置中:

  • proxy_pass http://backend_server; 指定了请求应该被转发后端服务器地址。
  • proxy_set_header 指令用于设置传递给后端器的HTTP头信息,确保后端服务器能够获取到原始客户端的信息。

(3)反向代理的高级配置

除了基本的配置,Nginx还支持许多高级配置选项,以下是一些常用的设置:

  • 设置超时:可以通过proxy_connect_timeoutproxy_send_timeoutproxy_read_timeout指令来设置连接、发送和读取的超时时间。
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
  • 设置HTTP头:可以使用proxy_set_header指令来设置或修改HTTP头信息,例如添加自定义头或修改现有头。
proxy_set_header X-Custom-Header $some_value;
  • 缓存控制:通过proxy_cache和相关的指令,可以实现对后端响应的缓存。
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
proxy_cache my_cache;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
  • 负载均衡:Nginx可以通过upstream块来实现负载均衡,支持多种负载均衡策略,如轮询、最少连接数、IP哈希等。
upstream backend_servers {server backend1.example.com;backend2.example.com;server backend3.example.com;least_conn;
}server {location / {proxy_pass http://backend_servers;}
}
  • SSL/TLS加密:如果后端服务器支持HTTPS,可以在Nginx中配置SSL/TLS加密。
server {443 ssl;ssl_certificate /path/to/cert.pem;ssl_certificate_key /path/to/key.pem;location / {proxy_pass https://backend;}
}

(4)反向代理的最佳实践

在配置Nginx作为反向代理时,以下是一些最佳实践:

  • 隐藏后端服务器:通过反向代理,可以隐藏后端服务器的IP地址和端口,提高安全性。
  • 维护用户信息:通过正确设置proxy_set_header指令,确保后端服务器可以获取到用户的真实IP地址和其他信息。
  • 优化性能:使用缓存和负载均衡策略,可以提高系统的整体性能和可靠性。
  • 监控和日志:配置Nginx的访问日志和错误日志,可以帮助监控和调试反向代理的配置。

通过上述配置和最佳实践,Nginx可以作为一个强大的反向代理服务器,为Web应用提供高效、安全和可靠的服务。反向代理的配置虽然复杂,但通过Nginx的灵活性和强大的功能,可以轻松实现各种高级的代理需求。

3、负载均衡策略

在当今的网络环境中,高可用性和高性能是Web服务的基本要求。为了满足这些需求,负载均衡成为了关键的技术手段。Nginx作为一个高性能的Web服务器和反向代理服务器,提供了强大的负载均衡功能。本节将详细介绍Nginx的负载均衡策略及其配置方法。

(1)负载均衡的基本原理

负载均衡器负责分发客户端请求到多个后端服务器,这样可以避免单点故障,提高系统的可用性和可伸缩性。负载均衡器可以根据不同的算法来决定如何分发请求,这些算法包括轮询(Round Robin)、最少连接(Least Connections)、IP哈希(IP Hash)等。

(2)Nginx的负载均衡配置

在Nginx中,负载均衡主要通过upstream模块来实现。以下是配置负载均衡的基本步骤:

  1. 定义upstream块:在http块中定义一个upstream块,列出所有的后端服务器。
http {upstream myapp1 {server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {listen 80;location / {proxy_pass http://myapp1;}}
}
  1. 选择负载均衡算法:在upstream块中,可以通过添加不同的指令来选择不同的负载均衡算法。
  • 轮询(默认算法):这是Nginx的默认负载均衡算法,请求按时间顺序逐一分配到不同的服务器上。

  • 最少连接(Least Connections):分配到当前连接数最少的服务器。

upstream myapp1 {least_conn;server backend1.example.com;server backend2.example.com;server backend3.example.com;
}
  • IP哈希(IP Hash):根据客户端的IP地址来分配请求,可以在一定程度上保持用户的会话状态。
upstream myapp1 {ip_hash;server backend1.example.com;server backend2.example.com;server backend3.example.com;
}
  • 其他算法:Nginx还支持其他算法,如least_time(基于响应时间来分配请求)和random(随机分配请求)。

(3)高级负载均衡策略

除了基本的负载均衡算法,Nginx还提供了一些高级的负载均衡策略,以满足不同场景的需求。

  1. 健康检查:Nginx可以通过healthcheck模块定期检查后端服务器的健康状况,并在检测到服务器不健康时自动将其从负载均衡池中移除。
http {upstream myapp1 {server backend1.example.com;server backend2.example.com;server backend3.example.com;healthcheck;}# ...
}
  1. 持久连接:通过keepalive指令,可以保持与后端服务器的持久连接,减少TCP握手的开销。
http {upstream myapp1 {server backend1.example.com;server backend2.example.com;server backend3.example.com;keepalive 32; # 保持32个持久连接}# ...
}
  1. 静态权重分配:可以为每个服务器设置权重,以便根据服务器的处理能力分配请求。
upstream myapp1 {server backend1.example.com weight=3;server backend2.example.com weight=2;server backend3.example.com weight=1;
}
  1. 故障转移:通过设置server指令的fail_timeoutmax_fails参数,可以在后端服务器出现故障时进行转移。
upstream myapp1 {server backend1.example.com fail_timeout=30s max_fails=3;server backend2.example.com;server backend3.example.com;
}

(4)负载均衡的最佳实践

为了确保Nginx的负载均衡配置能够高效稳定地运行,以下是一些最佳实践:

  • 定期监控和测试:定期检查后端服务器的健康状况,确保负载均衡器能够正确地将请求分发到健康的服务器。
  • 避免单点故障:确保负载均衡器本身也是高可用的,可以通过部署多个负载均衡器来实现。
  • 优化资源分配:根据服务器的性能和负载情况,合理分配权重和资源,以实现最优的负载均衡效果。
  • 考虑持久连接:对于需要频繁建立连接的应用,使用持久连接可以显著提高性能。
  • 灵活调整策略:随着业务的发展和变化,应灵活调整负载均衡策略,以适应新的需求。

通过合理配置和优化Nginx的负载均衡策略,可以大大提高Web服务的性能和可靠性,为用户提供更好的服务体验。Nginx的负载均衡功能强大且灵活,是构建高性能Web服务不可或缺的一部分。

四、Nginx安全与优化

1、Nginx安全措施

在互联网世界中,安全性是任何服务器配置中不可忽视的一环。Nginx作为一款广泛使用的Web服务器,其安全性同样至关重要。以下是一些关键的Nginx安全措施,可以帮助您提高服务器的安全性。

(1)限制请求大小

为了防止恶意用户发起的大文件上传攻击,可以通过设置client_max_body_size指令来限制请求的大小。

http {server {listen 80;client_max_body_size 10m; # 限制请求体大小为10MB# ...}
}

(2)隐藏Nginx版本信息

隐藏Nginx的版本信息可以减少攻击者针对特定版本发起攻击的机会。可以通过修改nginx.conf中的nginx_versionserver_tokens指令来实现。

http {server_tokens off; # 禁止在响应头中显示Nginx版本信息# ...
}

(3)使用SSL/TLS加密

为了保护数据传输过程中的隐私和完整性,应当使用SSL/TLS加密。这需要生成SSL证书,并在Nginx配置中指定。

http {server {listen 443 ssl;ssl_certificate /path/to/certificate.pem;ssl_certificate_key /path/to/privatekey.pem;# ...}
}

(3)启用HTTP严格传输安全(HSTS)

HSTS可以强制客户端只通过HTTPS与服务器通信,减少中间人攻击的风险。

http {server {listen 443 ssl;add_header Strict-Transport-Security \max-age=31536000; includeSubDomains\ always;# ...}
}

(5)防止目录遍历攻击

通过设置正确的目录权限和配置autoindex指令,可以防止目录遍历攻击。

http {server {listen 80;location / {autoindex off; # 禁止列出目录内容# ...}}
}

(6)限制请求速率

为了防止DoS攻击,可以使用Nginx的limit_req模块来限制单个IP地址的请求速率。

http {limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;server {location / {limit_req zone=mylimit burst=20; # 允许短时间内的突发请求达到20个# ...}}
}

(7)使用防火墙

在Nginx前面使用防火墙,如iptables或firewalld,可以进一步保护服务器不受非法访问。

# 示例:使用iptables限制特定端口
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 443 -j DROP

(8)防止SQL注入和XSS攻击

通过配置modsecurity模块,可以防止SQL注入和跨站脚本(XSS)攻击。

http {modsecurity on;modsecurity_rules_file /path/to/owasp_modsecurity_crs/rules/owasp-rules.conf;# ...
}

(9)定期更新和打补丁

保持Nginx及其依赖库的更新,及时应用安全补丁,是确保服务器安全的关键。

(10)安全配置的最佳实践

以下是一些最佳实践,以确保Nginx服务器的安全:

  • 最小化暴露:只开放必要的端口和服务,减少潜在的攻击面。
  • 使用强密码:为服务器和应用程序使用强密码和密钥。
  • 定期审计:定期审计日志文件,寻找异常行为。
  • 备份:定期备份配置文件和数据,以便在出现安全问题时能够快速恢复。
  • 监控:使用监控工具来跟踪服务器的状态和性能,以便快速响应潜在的安全威胁。

通过实施这些安全措施,您可以显著提高Nginx服务器的安全性,保护您的数据和用户免受威胁。记住,安全是一个持续的过程,需要定期审查和更新您的安全策略。

2、性能优化技巧

Nginx作为高性能的Web服务器和反向代理服务器,其性能优化是提升网站负载能力和用户体验的关键。以下是针对Nginx的性能优化技巧,帮助您最大限度地发挥其潜能。

(1)调整工作模式和连接数

Nginx采用事件驱动的工作模式,可以通过调整worker进程的数量和连接数来优化性能。

  • worker_processes: 设置与服务器CPU核心数相等的worker进程数,以充分利用多核优势。
worker_processes auto; # 或者设置为具体的数字,如 worker_processes 4;
  • worker_connections: 每个worker进程可以同时处理的连接数。这个值需要根据服务器的资源和预期的并发量来设置。
events {worker_connections 1024; # 可以根据需要调整这个值
}

(2)开启文件描述符缓存

Nginx可以通过缓存文件描述符来减少打开和关闭文件时的开销。

http {open_file_cache max=10000 inactive=20s;open_file_cache_valid 30s;open_file_cache_min_uses 2;open_file_cache_errors on;# ...
}

(3)优化静态文件处理

静态文件处理是Nginx最常见的用途之一。以下是一些优化静态文件处理的技巧:

  • gzip压缩: 启用gzip压缩可以减少文件大小,加快传输速度。
http {gzip on;gzip_vary on;gzip_proxied any;gzip_comp_level 6;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;# ...
}
  • 浏览器缓存: 设置合理的缓存策略,减少重复请求。
http {expires 1d; # 为静态文件设置1天的缓存时间add_header Cache-Control public;# ...
}
  • 文件类型和大小: 根据文件类型和大小调整buffer和body size。
http {client_body_buffer_size  128k;client_max_body_size     10m;client_body_timeout      12;client_header_timeout    12;send_timeout             10;# ...
}

(4)使用缓存和负载均衡

  • 缓存: 使用Nginx的缓存机制来存储热点内容,减少后端服务器的负载。
http {proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;# ...location / {proxy_cache my_cache;proxy_cache_valid 200 302 60m;proxy_cache_valid 404 1m;# ...}
}
  • 负载均衡: 当有多个后端服务器时,可以使用Nginx的负载均衡功能来分配请求。
http {upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;# ...}server {location / {proxy_pass http://backend;# ...}}
}

(5)优化日志记录

日志记录对于监控和调试非常重要,但是过多的日志记录会消耗服务器资源。可以优化日志记录:

  • 访问日志: 根据需要记录访问日志,避免记录不必要的细节。
http {access_log /path/to/access.log main;# ...
}
  • 错误日志: 设置错误日志级别,只记录重要的错误信息。
http {error_log /path/to/error.log warn;# ...
}

(6)使用SSL/TLS优化

如果您的网站使用HTTPS,以下是一些SSL/TLS优化技巧:

  • 使用TLS session重用:减少握手时间,提高连接速度。
http {ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;# ...
}
  • 启用TLS压缩:虽然现在有些争议,但在某些情况下可以提升性能。
http {ssl_session_tickets off; # 禁用TLS会话票证,如果安全策略允许,可以启用TLS压缩ssl Compression on;# ...
}
  • 选择合适的加密套件:选择既安全又性能良好的加密套件。
http {ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';ssl_prefer_server_ciphers on;# ...
}

(7)系统层面的优化

除了Nginx本身的配置外,操作系统层面的优化也非常重要:

  • 文件系统优化:使用高效的文件系统,如ext4或XFS。
  • 系统参数调整:调整系统参数,如文件描述符的最大数量、网络栈的缓冲区大小等。
  • 内核参数优化:优化内核参数,如TCP栈的参数,以提高网络性能。

通过上述的性能优化技巧,您可以显著提升Nginx服务器的处理能力和响应速度。需要注意的是,性能优化是一个持续的过程,需要根据实际情况和监控数据不断调整和优化。

3、高可用性配置

在当今的业务环境中,网站的高可用性是至关重要的。Nginx作为一款优秀的Web服务器,提供了多种机制来实现高可用性。以下是如何通过配置Nginx来实现高可用性的详细指南。

(1)负载均衡与故障转移

Nginx的高可用性配置通常与负载均衡紧密相关。通过配置upstream模块,Nginx可以将请求分发到多个后端服务器,并在某个服务器发生故障时自动将其从池中剔除。

  • 配置upstream模块:在Nginx配置文件中定义一组服务器,作为负载均衡的后端。
http {upstream myapp {server backend1.example.com;server backend2.example.com;server backend3.example.com;# 可以设置权重,server backend1.example.com weight=3;# 可以设置服务器状态,server backend2.example.com down;}# ...
}
  • 健康检查:通过第三方模块或者Nginx的内置功能,对后端服务器进行健康检查,确保只有健康的后端服务器会接收请求。
http {upstream myapp {server backend1.example.com;server backend2.example.com;server backend3.example.com;check_interval 3000; # 检查间隔check_timeout 3000; # 超时时间check_failures 3; # 失败次数# ...}# ...
}
  • 故障转移:当后端服务器不可用时,Nginx会自动将请求转发到其他可用的服务器。

(2)使用Keepalived实现虚拟路由冗余

Keepalived是一个高性能的虚拟路由冗余软件,它可以通过虚拟路由冗余协议(VRRP)来实现Nginx的高可用性。

  • 配置Keepalived:在多台服务器上安装Keepalived,并配置VRRP实例。
# 配置文件示例
! Configuration File for keepalivedglobal_defs {router_id LVS_DEVEL
}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.200.16}
}
  • 虚拟IP地址:Keepalived会为Nginx服务器分配一个虚拟IP地址,当主服务器发生故障时,虚拟IP地址会自动漂移到备用服务器。

(3)使用Nginx的多实例功能

Nginx支持在同一台物理服务器上运行多个实例,这可以在软件层面提供额外的冗余。

  • 配置多个Nginx实例:在不同的端口上运行多个Nginx实例,每个实例可以配置不同的upstream。
# Nginx配置文件1
server {listen 8080;# ...
}# Nginx配置文件2
server {listen 8081;# ...
}

(4)监控与报警

高可用性配置还需要监控和报警机制,以便在服务不可用时及时通知管理员。

  • 集成监控工具:使用如Zabbix、Nagios等监控工具,对Nginx服务器进行监控。

  • 设置报警:当监控到服务不可用时,通过邮件、短信等方式发送报警。

(5)定期测试和演练

高可用性配置完成后,应定期进行测试和演练,以确保故障转移和冗余机制能够按预期工作。

  • 故障模拟:通过模拟服务器故障,测试故障转移和恢复流程。

  • 性能测试:在高流量下测试系统的性能,确保系统在高负载下依然可用。

通过上述的高可用性配置,Nginx可以为您的网站提供稳定、可靠的服务。记住,高可用性是一个持续的过程,需要定期维护和更新,以适应不断变化的业务需求和技术环境。

相关文章:

Nginx实战经验分享:从小白到专家的成长历程!

目录 一、Nginx概述1、Nginx简介(1)事件驱动模型(2)异步处理(3)模块化设计(4)高性能(5)反向代理(6)负载均衡(7&#xff09…...

从画质设置看游戏引擎(其一)

前往我的博客,获取无广告,更好的阅读体验 1. 抗锯齿(Anti-Aliasing) 1.1 锯齿问题的起因 在三维模型的世界中,模型是连续的,但是屏幕像素是不连续,是离散的; 即当一个圆形显示在显…...

#git 问题failed to resolve head as a valid ref

问题如下: 解决方法: 1、运行 git fsck --full 可以查看具体error信息,一般都是head索引问题 2、.git\refs\heads\xxx(当前分支)txt编辑器打开显示乱码,而不是hash编码 3、在.git\logs\refs\heads\xxx&a…...

YOLOv11,地瓜RDK X5开发板,TROS端到端140FPS!

YOLOv11 Detect YOLOv11 Detect YOLO介绍性能数据 (简要) RDK X5 & RDK X5 Module 模型下载地址输入输出数据公版处理流程优化处理流程步骤参考 环境、项目准备导出为onnxPTQ方案量化转化使用hb_perf命令对bin模型进行可视化, hrt_model_exec命令检查bin模型的输入输出情况…...

Python精选200Tips:181-182

针对图像的经典卷积网络结构进化史及可视化 针对图像的经典卷积网络结构进化史及可视化(续)P181--MobileNet【2017】模型结构及创新性说明模型结构代码MobileNet V1版本MobileNet V2版本MobileNet V3 版本Small版本Large版本 P182--EfficientNet【2019】…...

SpringCloud 配置 feign.hystrix.enabled: true 不生效

SpringCloud 配置 feign.hystrix.enabled: true 不生效的原因 feign 启用 hystrix feign 默认没有启用 hystrix,添加配置,启用 hystrix feign.hystrix.enabledtrue application.yml 添加配置 feign:hystrix:enabled: true启用 hystrix 后,访…...

9.24-k8s服务发布

Ingress 使用域名发布 K8S 服务 部署项目 一、先部署mariadb [rootk8s-master ~]# mkdir aaa [rootk8s-master ~]# cd aaa/ [rootk8s-master aaa]# # 先部署mariadb [rootk8s-master aaa]# # configmap [rootk8s-master aaa]# vim mariadb-configmap.yaml apiVersion: v1 ki…...

UI设计师面试整理-作品集展示

在UI设计师的面试中,作品集展示是非常关键的一环。它不仅展示了你的设计技能和风格,也让面试官了解你的设计思维和解决问题的能力。下面是如何有效地准备和展示你的作品集的建议: 1. 选择合适的项目 ● 多样性:选择能展示你在不同领域或平台上的设计能力的项目。确保作品集…...

CMU 10423 Generative AI:lec10(few-shot、提示工程、上下文学习)

文章目录 1 概述2 摘录2.1 zero-shot 和 few-shot一、Zero-shot Learning(零样本学习)特点:工作原理:优点:缺点: 二、Few-shot Learning(少样本学习)特点:工作原理&#…...

做数据抓取工作要如何选择ip池

选择合适的IP池对于数据抓取工作至关重要。一个优质的IP池可以提高抓取的效率和成功率,同时减少被目标网站封禁的风险。以下是选择IP池时需要考虑的一些关键因素: 1. IP类型 住宅IP:住宅IP通常来自真实用户,难以被识别为代理。它…...

防止电脑电池老化,禁止usb或者ac接口调试时充电

控制android系统,开发者模式,开启和禁止充电 连接 Android 手机到电脑的 USB 端口。 下载并安装 Android Debug Bridge (ADB) 工具[1]。 USB: 在命令行中输入 adb shell dumpsys battery set usb 0,以禁止 USB 充电。 在命令…...

智权半导体/SmartDV力助高速发展的中国RISC-V CPU IP厂商走上高质量发展之道

作者:Karthik Gopal SmartDV Technologies亚洲区总经理 智权半导体科技(厦门)有限公司总经理 进入2024年,全球RISC-V社群在技术和应用两个方向上都在加快发展,中国国内的RISC-V CPU IP提供商也在内核性能和应用扩展…...

利用vue-capper封装一个可以函数式调用图片裁剪组件

1. 效果 const cropData await wqCrop({prop:{img,autoCrop: true, // 是否开启截图框maxImgSize: 600,autoCropWidth: 30,canMove: true, // 图片是否可移动canMoveBox: true, // 截图框是否可移动fixedBox: false, // 截图框是否固定}});console.log(cropData);使用wqCrop会…...

在系统开发中提升 Excel 数据导出一致性与可维护性的统一规范与最佳实践

背景: 在系统开发过程中,数据导出为 Excel 格式是一个常见的需求。然而,由于各个开发人员的编码习惯和实现方式不同,导致导出代码风格不一。有的人使用第三方库,有的人则自定义实现。这种多样化不仅影响了代码的一致性…...

SpringAOP学习

面向切面编程&#xff0c;指导开发者如何组织程序结构 增强原始设计的功能 oop:面向对象编程 1.导入aop相关坐标&#xff0c;创建 <!--spring依赖--><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spri…...

智能网联汽车飞速发展,安全危机竟如影随形,如何破局?

随着人工智能、5G通信、大数据等技术的飞速发展&#xff0c;智能网联汽车正在成为全球汽车行业的焦点。特别是我国智能网联汽车市场规模近年来呈现快速增长态势&#xff0c;彰显了行业蓬勃发展的活力与潜力。然而&#xff0c;车联网技术的广泛应用也带来了一系列网络安全问题&a…...

Android常用C++特性之std::function

声明&#xff1a;本文内容生成自ChatGPT&#xff0c;目的是为方便大家了解学习作为引用到作者的其他文章中。 std::function 是 C 标准库中的一个 函数包装器&#xff0c;用于存储、复制、调用任何可以调用的目标&#xff08;如普通函数、lambda 表达式、函数对象、成员函数等&…...

人工智能与机器学习原理精解【27】

文章目录 集成学习集成学习概述集成学习的定义集成学习的性质集成学习的算法过程集成学习的算法描述集成学习的例子和例题Julia实现集成学习 集成学习数学原理一、基学习器的生成Bagging&#xff08;装袋法&#xff09;Boosting&#xff08;提升法&#xff09; 二、基学习器的结…...

XXL-JOB在SpringBoot中的集成

在SpringBoot中&#xff0c;XXL-JOB作为一个轻量级的分布式任务调度平台&#xff0c;提供了灵活的任务分片处理功能&#xff0c;这对于处理大规模、复杂的任务场景尤为重要。以下将详细探讨如何在SpringBoot中利用XXL-JOB实现灵活控制的分片处理方案&#xff0c;涵盖配置、代码…...

前端工程规范-3:CSS规范(Stylelint)

样式规范工具&#xff08;StyleLint&#xff09; Stylelint 是一个灵活且强大的工具&#xff0c;适用于保持 CSS 代码的质量和一致性。结合其他工具&#xff08;如 Prettier 和 ESLint&#xff09;&#xff0c;可以更全面地保障前端代码的整洁性和可维护性。 目录 样式规范工具…...

Qt系列-1.Qt安装

Qt安装 0 简介 1.安装步骤 1.1 下载 进入qt中文网站:https://www.qt.io/zh-cn/ Qt开源社区版本:https://www.qt.io/download-open-source#source 1.2 安装 chmod +x qt-online-installer-linux-x64-4.8.0.run ./qt-online-installer-linux-x64-4.8.0.run 外网不能下载…...

《自控原理》最小相位系统

在复平面右半平面既没有零点&#xff0c;也没有极点的系统&#xff0c;称为最小相位系统&#xff0c;其余均为非最小相位系统。 从知乎看了一篇答案&#xff1a; https://www.zhihu.com/question/24163919 证明过程大概率比较难&#xff0c;我翻了两本自控的教材&#xff0c;…...

SpringBoot3脚手架

MySpringBootAPI SpringBoot3脚手架&#xff0c;基于SpringBoot3DruidPgSQLMyBatisPlus13FastJSON2Lombok&#xff0c;启动web容器为Undertow(非默认tomcat)&#xff0c;其他的请自行添加和配置。 <java.version>17</java.version> <springboot.version>3.3…...

【C语言软开面经】

C语言软开面经 malloc calloc realloc free动态分配内存malloccalloc函数&#xff1a;realloc 函数&#xff1a;free函数&#xff1a; 堆栈-内存分区栈区&#xff08;Stack&#xff09;&#xff1a;堆区&#xff08;Heap&#xff09;&#xff1a;全局&#xff08;静态&#xff…...

YOLOv11训练自己的数据集(从代码下载到实例测试)

文章目录 前言一、YOLOv11模型结构图二、环境搭建三、构建数据集四、修改配置文件①数据集文件配置②模型文件配置③训练文件配置 五、模型训练和测试模型训练模型验证模型推理 总结 前言 提示&#xff1a;本文是YOLOv11训练自己数据集的记录教程&#xff0c;需要大家在本地已…...

HTML粉色烟花秀

目录 系列文章 写在前面 完整代码 下载代码 代码分析 写在最后 系列文章 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4...

从零开发操作系统

没有操作系统 要考虑放到什么位置 org 07c00h 我用nasm&#xff08;汇编编译&#xff09; 放到7c00处 ibm兼容机 AX发生变化 -寄存器 不可能做存储 内存- 代码段数据段 if else --指令 代码 int a -数据段 必须告诉计算机代码段从哪里开始 改变cs寄存器里面的值可以改变推进寄…...

SigmaStudio中部分滤波器算法有效性频谱分析

一、各类滤波器参数如下图设置 1.1、输入源白噪音经过如下算法处理后Notch\Band Pass\Band Stop&#xff0c;如下频谱分析图 1.2、输入源白噪音经过low pass后处理前后的频谱分析如如下 二、Notch滤波器配置图&#xff0c;如下 2.1、两串联、五个串联和未串联的Notch对白噪音…...

ArcGIS与ArcGIS Pro去除在线地图服务名单

我们之前给大家分享了很多在线地图集&#xff0c;有些地图集会带有制作者信息&#xff0c;在布局制图的时候会带上信息影响出图美观。 一套GIS图源集搞定&#xff01;清新规划底图、影像图、境界、海洋、地形阴影图、导航图 比如ArcGIS&#xff1a; 比如ArcGIS Pro&#xff1a…...

滚雪球学MySQL[10.1讲]:常见问题与解决

全文目录&#xff1a; 前言10. 常见问题与解决10.1 数据库连接问题10.1.1 无法连接到数据库10.1.2 连接超时10.1.3 连接数过多 10.2 性能问题10.2.1 查询速度慢10.2.2 数据库锁等待 10.3 数据完整性问题10.3.1 违反外键约束10.3.2 重复记录 10.4 安全问题10.4.1 SQL注入攻击10.…...

做视频网站需要/百度标记号码认证平台

在网络环境中的攻击类型 消息保密性范畴&#xff1a;    1、泄密  2、传输分析   消息认证/数字签名&#xff1a;  3、伪装  4、内容修改 插入/删除/转换/修改(消息内容) 5、顺序修改 插入/删除/重排&#xff08;以消息为单位&#xff09; 6、计时修改 延时…...

做网站需要啥备案之类的嘛/网站品牌推广策略

prn是什么文件?使用打印机打印文件时&#xff0c;如果你在打印设置界面中选择“输出到文件”&#xff0c;那么随后输出到指定目录的文件默认是以.prn为扩展名&#xff0c;这个文件就是所谓的“prn文件”。prn文件虽然扩展名都是.prn&#xff0c;但对于不同品牌的打印机&#x…...

成品超市网站/seo排名查询软件

我们打开昨天已经创建好的项目myself.pro.注意保存的项目路径不能含有中文.接下来我们继续来学习,看如何进行可视化编程. 双点你的工程管理窗口中界面文件mainwindow.ui.双点后如图所示. 控件组窗口包含所有控件(控件就是一个叫法而已,例如按钮,文本框,标签等都被称为控件),使…...

南宁培训网站建设/看网站时的关键词

数据库是应用及计算机的核心元素&#xff0c;负责存储运行软件应用所需的一切重要数据。为了保障应用正常运行&#xff0c;总有一个甚至多个数据库在默默运作。我们可以把数据库视为信息仓库&#xff0c;以结构化的方式存储了大量的相关信息&#xff0c;并合理分类&#xff0c;…...

做任务领黄钻的网站/网络运营培训

删除逻辑 boolean del(taskName任务名称, busNo业务编号) keyqlscf_taskName_busNo 如果key存在 getRedisTemplate().delete(key) 获取逻辑 boolean get(taskName任务名称, busNo业务编号) keyqlscf_taskName_busNo 如果key存在 取出redis中key对应的value&#xff1a;getRe…...

网站群建设调研报告/seo优化工具大全

文件名称为 build.gradle 所在行内容为 #appVersionCode : 20220811, 取出shell的脚本为 APP_VERSION_CODE$(egrep "appVersionCode :(.*?)," build.gradle -o | sed s/appVersionCode : //g | sed s/\,//g | sed s/ //g)sed语法解释下 替换文本 sed s/…...