Linux中使用NGINX

NGINX简介

  • Nginx(engine x)
  • 是俄罗斯人编写的十分轻量级的HTTP服务器
  • 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器
  • 官方网站:http://nginx.org/

NGINX概述

  • Nginx默认配置文件:/etc/nginx/nginx.conf
  • Nginx调用配置文件:/etc/nginx/conf.d/*.conf
  • Nginx默认使用端口:80

实验架构

安装Nginx

虚拟机A操作

[root@javasv-A ~]# dnf -y install nginx					#安装nginx服务
[root@javasv-A ~]# rpm -q nginx 						#查看是否安装成功

Nginx配置文件解析

[root@javasv-A ~]# cat /etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/user nginx;									#worker进程归属用户
worker_processes auto;						#启动工作进程数量(通常与CPU核心数一致)
error_log /var/log/nginx/error.log;			#错误日志
pid /run/nginx.pid;							#pid文件位置# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;	#引入动态模块相关配置#事件模型相关配置
events {worker_connections 1024;				#单个worker进程可接受的最大并发量
}#web服务块
http {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  /var/log/nginx/access.log  main;	#访问日志sendfile            on;							#加快静态文件传输tcp_nopush          on;							#合并请求后统一发送给客户端tcp_nodelay         on;							#不延时发送keepalive_timeout   65;							#会话保持事件types_hash_max_size 2048;						#哈希表大小include             /etc/nginx/mime.types;default_type        application/octet-stream;# Load modular configuration files from the /etc/nginx/conf.d directory.# See http://nginx.org/en/docs/ngx_core_module.html#include# for more information.include /etc/nginx/conf.d/*.conf;				#子配置文件路径#虚拟主机块server {listen       80 default_server;				#监听ipv4端口listen       [::]:80 default_server;		#监听ipv6端口server_name  _;								#虚拟主机名root         /usr/share/nginx/html;			#网站根目录# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location / {								#匹配路径}error_page 404 /404.html;					#错误页面location = /40x.html {}error_page 500 502 503 504 /50x.html;		#错误页面location = /50x.html {}}# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers PROFILE=SYSTEM;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }}

Nginx服务测试

[root@javasv-A ~]# systemctl start nginx 			#启动nginx服务
[root@javasv-A ~]# systemctl enable nginx			#将nginx服务设置为开机自启
[root@javasv-A ~]# ss -nutlp | grep :80				#查看80端口

打开浏览器访问:自己的ip地址

Nginx虚拟web主机

  • 虚拟主机:一个Nginx服务上运行多个网站
  • 类型:
    • 基于域名的虚拟主机
    • 基于端口的虚拟主机
    • 基于IP地址的虚拟主机
##部署基于域名的虚拟主机#编写虚拟主机配置文件(采用子配置文件的方式)
[root@javasv-A ~]# vim /etc/nginx/conf.d/site1.conf
[root@javasv-A ~]# cat /etc/nginx/conf.d/site1.conf 
server {listen 80;server_name site1.tedu.cn;location / {root "/usr/share/nginx/html/site1/";index index.html index.htm;}
}
[root@javasv-A ~]# vim /etc/nginx/conf.d/site2.conf
[root@javasv-A ~]# cat /etc/nginx/conf.d/site2.conf 
server {listen 80;server_name site2.tedu.cn;location / {root "/usr/share/nginx/html/site2/";index index.html index.htm;}
}
[root@javasv-A ~]# #创建虚拟主机网站根目录及测试页面
[root@javasv-A ~]# mkdir /usr/share/nginx/html/site1
[root@javasv-A ~]# mkdir /usr/share/nginx/html/site2
[root@javasv-A ~]# vim /usr/share/nginx/html/site1/index.html
[root@javasv-A ~]# vim /usr/share/nginx/html/site2/index.html
[root@javasv-A ~]# cat /usr/share/nginx/html/site1/index.html 
site1
[root@javasv-A ~]# cat /usr/share/nginx/html/site2/index.html 
site2
[root@javasv-A ~]# #重启服务
[root@javasv-A ~]# systemctl restart nginx#修改hosts文件并访问测试
[root@javasv-A ~]# vim /etc/hosts
[root@javasv-A ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1   site1.tedu.cn site2.tedu.cn
[root@javasv-A ~]# curl http://site1.tedu.cn/
site1
[root@javasv-A ~]# curl http://site2.tedu.cn/
site2
[root@javasv-A ~]# #清理测试配置
[root@javasv-A ~]# rm -rf /etc/nginx/conf.d/site1.conf /etc/nginx/conf.d/site2.conf 
[root@javasv-A ~]# rm -rf /usr/share/nginx/html/site1/
[root@javasv-A ~]# rm -rf /usr/share/nginx/html/site2/
[root@javasv-A ~]# systemctl restart nginx

Nginx动静分离

什么是动静分离

  • 动静分离是一种常见的架构设计模式
    • 用于将处理静态内容和动态内容的工作分开
    • 以提高网站性能和可伸缩性

Nginx动静分离

  • 动静分离的主要思想是让 Nginx 专注于处理静态内容(如 HTML、CSS、JavaScript、图片等)
  • 而将动态内容(如 PHP、JSP、ASP.NET 等)交给后端应用服务器(如 Apache、Tomcat、IIS 等)来处理

Nginx动静分离处理方法

  • 静态资源由 Nginx 直接处理:
    • Nginx 作为前端服务器直接处理静态内容的请求,例如 HTML、CSS、JavaScript 文件和图片等
    • 由于 Nginx 是轻量级的高性能 Web 服务器,它能够快速地响应对这些静态资源的请求
  • 动态内容交由后端应用服务器处理:
    • 对于动态内容的请求,比如 PHP、JSP、ASP.NET 等页面,Nginx 通过反向代理将这部分请求转发给后端的应用服务器处理
    • 后端应用服务器负责执行动态内容的逻辑,并将结果返回给 Nginx,再由 Nginx 返回给客户端
  • 负载均衡:
    • 如果有多个后端应用服务器,Nginx 可以作为负载均衡器,将动态请求分发到不同的后端服务器上
    • 以提高整体的并发处理能力和可靠性

Nginx动静分离测试

安装java环境: java-1.8.0-openjdk

[root@javasv-A ~]# dnf -y install java-1.8.0-openjdk			#安装jdk
[root@javasv-A ~]# java -version								#查看版本

部署jsp测试页面

[root@javasv-A ~]# vim /usr/share/nginx/html/time.jsp 
<html><head><meta charset='utf-8'></head><body><center>Now time is: <%=new java.util.Date()%> <!--通过基类调用系统时间--></center></body>
</html>
[root@javasv-A ~]#
#访问测试,结果为curl返回页面源代码,浏览器访问直接下载页面
[root@javasv-A ~]# curl http://localhost/time.jsp
<html><head><meta charset='utf-8'></head><body><center>Now time is: <%=new java.util.Date()%> <!--通过基类调用系统时间--></center></body>
</html>[root@javasv-A ~]# 

部署Java应用Tomcat

  • 将2024-AI大模型Java全链路工程师环境资料/第四模块/apache-tomcat-9.0.6.tar.gz上传至虚拟机A的/root
  • 使用WindTerm的上传/下载功能,需要提前在虚拟机中安装lrzsz软件
[root@javasv-A ~]# dnf -y install lrzsz

安装tomcat服务

[root@javasv-A ~]# tar -xf apache-tomcat-9.0.6.tar.gz 		#解压缩tomcat源码
[root@javasv-A ~]# mv apache-tomcat-9.0.6 /usr/local/tomcat	#移动安装目录并改名

停止/启动服务(最后将服务启动)

[root@javasv-A ~]# /usr/local/tomcat/bin/startup.sh			#启动服务
[root@javasv-A ~]# /usr/local/tomcat/bin/shutdown.sh		#停止服务
[root@javasv-A ~]# /usr/local/tomcat/bin/startup.sh			#启动服务
[root@javasv-A ~]# ss -nutlp | grep java		#查看端口(8080、8005、8009)

部署jsp页面至tomcat服务

[root@javasv-A ~]# cp /usr/share/nginx/html/time.jsp /usr/local/tomcat/webapps/ROOT/
[root@javasv-A ~]# curl http://192.168.8.100:8080/time.jsp	#访问测试
<html><head><meta charset='utf-8'></head><body><center>Now time is: Mon May 06 18:34:54 CST 2024 <!--通过基类调用系统时间--></center></body>
</html>
[root@javasv-A ~]# 

配置Nginx动静分离

[root@javasv-A ~]# vim /etc/nginx/nginx.conf
...原有配置不动...50         location ~ \.jsp$ {51             proxy_pass http://127.0.0.1:8080;   52         } 
...原有配置不动#重启nginx服务并测试
[root@javasv-A ~]# systemctl restart nginx
[root@javasv-A ~]# curl http://192.168.8.100/time.jsp		#访问测试
<html><head><meta charset='utf-8'></head><body><center>Now time is: Mon May 06 19:37:09 CST 2024 <!--通过基类调用系统时间--></center></body>
</html>

Nginx代理服务

  • 代理服务是一种网络服务,允许客户端通过中间服务器(即代理服务器)与目标服务器进行通信。代理服务器接收来自客户端的请求,然后将这些请求转发给目标服务器,再将目标服务器的响应返回给客户端。
  • Nginx作为代理服务器的优势
    • 高性能:Nginx采用了异步非阻塞的事件驱动模型,能够处理大量的并发连接和请求,具有出色的性能和可扩展性。
    • 稳定性:Nginx经过严格的测试和优化,具有极高的稳定性和可靠性,能够在各种复杂的网络环境中稳定运行。
    • 易用性:Nginx的配置文件简洁明了,易于学习和使用。同时,Nginx提供了丰富的模块和指令,可以满足各种复杂的代理需求。
    • 灵活性:Nginx可以作为正向代理服务器、反向代理服务器或负载均衡器使用,支持多种协议和扩展模块,具有极高的灵活性。

实验架构

主机名IP地址配额角色
proxyens160: 192.168.4.50|ens192: 192.168.8.501G内存1CPU代理服务器
javasv-Aens160: 192.168.8.1001G内存1CPUweb服务器
javasv-Bens160: 192.168.8.1011G内存1CPUweb服务器
windowsvmnet1: 192.168.4.254---客户端
  • 使用模板机重新克隆虚拟机A、虚拟机B、虚拟机proxy
  • 克隆后的机器是有配置好的yum仓库以及关闭了防火墙和SElinux
  • 配置完毕后使用WindTerm将虚拟机远程连接

虚拟机A操作

[root@template ~]# hostnamectl set-hostname javasv-A		修改主机名
[root@javasv-A ~]# nmcli connection show					#查看网卡名#配置入网参数~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.8.100/24 ipv4.gateway 192.168.8.254 ipv4.dns 192.168.8.254 connection.autoconnect yes
[root@javasv-A ~]# nmcli connection up  ens160				#激活网卡
[root@javasv-A ~]# dnf clean all
[root@javasv-A ~]# dnf repolist -v							#查看yum仓库是否可用

虚拟机B操作(注意网卡名不要照抄,以自己的为准)

[root@template ~]# hostnamectl set-hostname javasv-B		修改主机名
[root@javasv-B ~]# nmcli connection show					#查看网卡名#配置入网参数~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.8.101/24 ipv4.gateway 192.168.8.254 ipv4.dns 192.168.8.254 connection.autoconnect yes
[root@javasv-B ~]# nmcli connection up  ens160				#激活网卡
[root@javasv-B ~]# dnf clean all
[root@javasv-B ~]# dnf repolist -v							#查看yum仓库是否可用

配置虚拟机proxy,添加一块网卡

 

 Windows将虚拟网卡vmnet1的IP地址配置为:192.168.4.254/24

 

 

 

[root@template ~]# hostnamectl set-hostname proxy		#修改主机名
[root@proxy ~]# nmcli connection show					#查看网卡连接名
[root@proxy ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.4.50/24 connection.autoconnect yes		#配置IP地址
[root@proxy ~]# nmcli connection up ens160				#激活网卡

添加第二块网卡

[root@proxy ~]# nmcli device status 					#查看网卡设备(以查看到的为准)
DEVICE  TYPE      STATE         CONNECTION 
ens160  ethernet  已连接        ens160     
virbr0  bridge    连接(外部)  virbr0     
ens192  ethernet  已断开        --         
lo      loopback  未托管        --  
~]# nmcli connection add ifname ens192 con-name ens192 type ethernet
[root@proxy ~]# nmcli connection modify ens192 ipv4.method manual ipv4.addresses 192.168.8.50/24 ipv4.gateway 192.168.8.254 ipv4.dns 192.168.8.254 connection.autoconnect yes				  #配置入网参数
[root@proxy ~]# nmcli connection up ens192 				 #激活网卡

部署后端web服务器集群

  • 配置后端web服务器,部署Nginx服务,编写测试页面

虚拟机A操作

[root@javasv-A ~]# dnf -y install nginx					#安装nginx
[root@javasv-A ~]# echo AAA > /usr/share/nginx/html/index.html	#编写测试页面
[root@javasv-A ~]# systemctl restart nginx 					#重启nginx服务
[root@javasv-A ~]# systemctl enable nginx					#将服务设置为开机自启
[root@javasv-A ~]# ss -nutlp | grep :80						#查看端口
[root@javasv-A ~]# curl 192.168.8.100

虚拟机B操作

[root@javasv-B ~]# dnf -y install nginx						#安装nginx
[root@javasv-B ~]# echo BBB > /usr/share/nginx/html/index.html	#编写测试页面
[root@javasv-B ~]# systemctl restart nginx 					#重启nginx服务
[root@javasv-B ~]# systemctl enable nginx					#将服务设置为开机自启
[root@javasv-B ~]# ss -nutlp | grep :80						#查看端口
[root@javasv-B ~]# curl 192.168.8.101						#访问测试

部署proxy代理服务器

配置Nginx服务器,添加服务器池,实现反向代理功能,

  • 使用upstream定义后端服务器集群,集群名称任意(如backend)
  • 使用server定义集群中的具体服务器和端口
[root@proxy ~]# dnf -y install nginx						#安装nginx
[root@proxy ~]# vim /etc/nginx/nginx.conf					#修改代理服务配置文件37     upstream backend {									#定义集群38         server 192.168.8.100:80;						#声明集群成员39         server 192.168.8.101:80;						#声明集群成员40     }41     server {42         listen       80 default_server;43         listen       [::]:80 default_server;44         server_name  _;45         root         /usr/share/nginx/html;46 47         # Load configuration files for the default server block.48         include /etc/nginx/default.d/*.conf;49 50         location / {51                 proxy_pass http://backend/;				#调用集群52         }[root@proxy ~]# systemctl restart nginx					#重启nginx[root@proxy ~]# systemctl enable nginx						#将服务设置为开机自启

访问测试

  • 客户端可以使用命令行访问代理服务器,也可以使用真机浏览器访问代理服务器,不过要注意缓存
[root@proxy ~]# curl 192.168.4.50
AAA
[root@proxy ~]# curl 192.168.4.50
BBB
[root@proxy ~]# curl 192.168.4.50
AAA
[root@proxy ~]# curl 192.168.4.50
BBB

集群健康检查

集群成员可以设置如下属性,用于更加合理的针对不同环境完成更加合理的负载均衡

  • weight设置服务器权重值,默认值为1
  • max_fails设置最大失败次数,测试服务器几次才确认服务器失败
  • fail_timeout设置失败超时时间,单位为秒
  • down标记服务器已关机,不参与集群调度
[root@proxy ~]# vim /etc/nginx/nginx.conf
……
upstream backend {server 192.168.8.100:80 weight=2 max_fails=2 fail_timeout=30;server 192.168.8.101:80 weight=1;}

访问测试

[root@proxy ~]# curl 192.168.4.50
AAA
[root@proxy ~]# curl 192.168.4.50
AAA
[root@proxy ~]# curl 192.168.4.50
BBB

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构之线段树

线段树 线段树&#xff08;Segment Tree&#xff09;是一种高效的数据结构&#xff0c;广泛应用于计算机科学和算法中&#xff0c;特别是在处理区间查询和更新问题时表现出色。以下是对线段树的详细解释&#xff1a; 一、基本概念 线段树是一种二叉搜索树&#xff0c;是算法竞…

【C++】继承的理解

1.继承的概念和定义 1.1继承的概念 继承 (inheritance) 机制是面向对象程序设计 使代码可以复用 的最重要的手段&#xff0c;它允许程序员在 保 持原有类特性的基础上进行扩展 &#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承 呈现了面向对象 程序…

C++ 详细讲解 洛谷P1428 小鱼比可爱

&#xff08;其实这道题难度不高&#xff0c;但是博主正在适应c语言加上这道题目太可爱了所以忍不住发发~&#xff09; 目录 1.题目要求 2.题目解读 3.代码实现 1.题目要求 2.题目解读 这道题需要使用c中的容器储存小鱼的可爱程度和不如自己可爱的小鱼的数目&#xff0c;…

Android亮屏Job的功耗优化方案

摘要: Job运行时会带来持锁的现象,目前灭屏放电Job的锁托管已经有doze和绿盟标准监管,但是亮屏时仍旧存在过长的持锁现象,故为了优化功耗和不影响用户体验下,新增亮屏放电下如果满足冻结和已运行过一次Job,则进行job限制,当非冻结时恢复的策略 1.现象: (gms_schedu…

Spring1(初始Spring 解耦实现 SpringIOC SpringDI Spring常见面试题)

Spring1 创建项目集成maven创建一个Maven项目实现&#xff1a; 初识SpringSpring简介Spring的发展历史Spring之父体系结构生态系统官方文档解耦实现JDBCSpringBoot整合MyBatis和lombok&#xff0c;开启驼峰映射三层思想 SpringIOC实现 SpringDIset注入全部代码&#xff1a;实现…

服务器新建用户

文章目录 前言一、步骤二、问题三、赋予管理员权限总结 前言 环境&#xff1a; 一、步骤 创建用户需要管理员权限sudo sudo useradd tang为用户设置密码 sudo passwd tang设置密码后&#xff0c;可以尝试使用 su 切换到 tang 用户&#xff0c;确保该用户可以正常使用&#…

leetcode-88-合并两个有序数组

题解&#xff1a; 解法一&#xff1a;从后向前同时遍历两个数组&#xff0c;因为nums1后面是0&#xff0c;从后遍历节省空间。 1、定义三个指针&#xff0c;分别为&#xff1a;len1m-1指向nums1的最后一个非0数字&#xff1b;len2n-1指向nums2的最后一个数字&#xff1b;len3…

操作系统(10) (并发(2)------基于软件/硬件/操作系统层面解决两个进程之间的临界区问题/抢占式/非抢占式内核)

目录 1. 基于软件层面(Petersons Solution) Petersons Solution 满足三个要求: 好处: 缺点 2. 基于硬件层面 1. Disabling Interrupts (禁用中断) 概念解释&#xff1a; 代码框架&#xff1a; 要求&#xff1a; 禁用中断的好处与问题&#xff1a; 2. Test and Set Lock (…

Java | Leetcode Java题解之第526题优美的排列

题目&#xff1a; 题解&#xff1a; class Solution {public int countArrangement(int n) {int[] f new int[1 << n];f[0] 1;for (int mask 1; mask < (1 << n); mask) {int num Integer.bitCount(mask);for (int i 0; i < n; i) {if ((mask & (1…

2024年大厂AI大模型面试题精选与答案解析

前言 随着AI市场&#xff0c;人工智能的爆火&#xff0c;在接下来的金九银十招聘高峰期&#xff0c;各大科技巨头和国有企业将会对AGI人才的争夺展开一场大战&#xff0c;为求职市场注入了新的活力。 为了助力求职者在面试中展现最佳状态&#xff0c;深入理解行业巨头的选拔标…

智能网联汽车:人工智能与汽车行业的深度融合

内容概要 在这个快速发展的时代&#xff0c;智能网联汽车已经不再是科幻电影的专利&#xff0c;它正在悄然走进我们的日常生活。如今&#xff0c;人工智能&#xff08;AI&#xff09;技术与汽车行业的结合犹如一场科技盛宴&#xff0c;让我们看到了未来出行的新方向。通过自动…

AI大模型重塑软件开发:从代码自动生成到智能测试

随着AI技术的不断发展&#xff0c;AI大模型在软件开发领域的应用日益广泛。从代码自动生成到智能测试&#xff0c;AI大模型正在深刻改变着软件开发的各个环节&#xff0c;重塑着整个开发流程。本文将探讨AI大模型的定义、应用场景、优势以及挑战&#xff0c;并展望未来的发展趋…

【基础】os模块

前言 1、os是operation system&#xff08;操作系统&#xff09;的缩写&#xff1b;os模块就是python对操作系统操作接口的封装。os模块提供了多数操作系统的功能接口函数。&#xff08;OS模块提供了与操作系统进行交互的函数&#xff09; 2、操作系统属于Python的标准实用程…

算法学习027 c++蛇形三角形填充 二维数组常规应用 中小学算法思维学习 比赛算法题解 信奥算法解析

目录 C蛇形三角形填充 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、推荐资料 C蛇形三角形填充 一、题目要求 1、编程实现 输入一个正整数N&#xff0c;输出N行的蛇形数字三角形&#xff08;见输出样例&#xf…

[vulnhub]DC: 1

https://www.vulnhub.com/entry/dc-1,292/ 主机发现端口扫描 使用nmap扫描网段类存活主机 因为靶机是我最后添加的&#xff0c;所以靶机IP是156 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-28 12:48 CST Nmap scan rep…

PyQt5的安装与简介

目录 一、介绍 二、PyQt5的安装 1、安装PyQt5 2、安装Qt的工具包 三、配置Qt工具 1、配置Designer &#xff08;1)、打开pycharm&#xff0c;找到设置选项 &#xff08;2&#xff09;、找到工具-->外部工具 &#xff08;3&#xff09;、点击号&#xff0c;创建外部工…

「Qt Widget中文示例指南」如何实现窗口嵌入?

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文中的示例主要演…

clickhouse运维篇(三):生产环境一键生成配置并快速部署ck集群

前提条件&#xff1a;先了解集群搭建流程是什么样&#xff0c;需要改哪些配置&#xff0c;有哪些环境&#xff0c;这个文章目的是简化部署。 clickhouse运维篇&#xff08;一&#xff09;&#xff1a;docker-compose 快速部署clickhouse集群 clickhouse运维篇&#xff08;二&am…

【OpenGL】vs中glsl高亮显示插件

vs中glsl高亮显示插件 扩展搜索glsl安装

<项目代码>YOLOv8 猫狗识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…