nginx反向代理和负载均衡+安装jdk-22.0.2

ps -aux|grep nginx   //查看进程
 

nginx 代理

nginx代理是负载均衡的基础

主机:192.168.118.60

这台主机只发布了web服务,没有做代理的任何操作

修改一下index.html中的内容

echo "this is java web server" > /usr/local/nginx/html/index.html

主机:192.168.118.54 

echo "this is static server" > /usr/local/nginx/html/index.html

这台主机要做反向代理,当你访问54这台主机的时候,会返回60主机的内容

使用54主机代理60主机,当用户访问54的时候,54主机不响应,而是由60主机响应

使用54主机nginx反向代理60的服务器:

修改配置文件 /usr/local/nginx/conf/nginx.conf ,在配置文件中加入 location proxy_pass   协议  域名  端口

在浏览器上访问:

nginx访客IP黑名单

主机:192.168.118.70

设置除开60主机可以访问,其他主机都不可以访问

在配置文件中的server模块中设置,allow为允许,deny为禁止,可以对IP生效,也可以对网段生效

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

添加allow和deny

测试:

60主机:[root@server ~]# curl 192.168.118.70
you are luckly

54主机:[root@slave ~]# curl 192.168.118.70
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.26.1</center>
</body>
</html>

70主机:[root@allow ~]# curl localhost
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.26.1</center>
</body>
</html>

[root@allow nginx]# tail -f logs/error.log  //实时更新错误日志

nginx负载均衡

默认情况下同一个文件只允许1024人访问

nginx负载均衡的基础是反向代理

让每一台主机能够获得相应的压力

负载均衡的五种策略:

轮询:默认方式,使负载大致相同

权重:weight

ip_hash:根据IP分配方式,常用在指定区域

least_conn:依据最少连接方式

url_hash:依据URL分配方式, hash $request_uri;

负载均衡状态:


准备四台服务器,54主机代理其他三台

1.192.168.118.60

2.192.168.118.70

3.192.168.118.80

4.192.168.118.54

   (1)轮询:默认方式

(2)权重:weight ,数字越大,压力越大,权重默认是1,谁权重大,谁优先处理请求

(3)ip_hash

当对后端的多台动态应用服务器做负载均衡时, ip_hash 指令能够将某
个客户端 IP 的请求通过哈希算法定位到同一台后端服务器上。
注意:使用 ip_hash 指令无法保证后端服务器的负载均衡,可能导致有些
后端服务器接收到的请求多,有些后端服务器接受的请求少,而且设置
后端服务器权重等方法将不起作用
(4)  least_conn
least_conn :最少连接,把请求转发给连接数较少的后端服务器。轮询
算法是把请求平均地转发给各个后端,使它们的负载大致相同;但是,
有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况
下, leastconn 这种方式就可以达到更好的负载均衡效果。
(5) url_hash
按访问 url hash 结果来分配请求,使每个 url 定向到同一个后端服务
器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的
服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时
间的浪费。而使用 ur_hash ,可以使得同一个 url ( 也就是同一个资源请
) 会到达同一台服务器,一旦缓存住了资源,再次收到请求,就可以从
缓存中读取。

nginx平滑升级

不停用业务,使用平滑升级,需要用kill命令的支持,kill不仅仅用于杀死进程,还可以向软件进程发送信号 

常用的 -9 -15 一个是强杀,一个是正常杀
kill 信号 进程编号:
-USR2   平滑启动一个进程,平滑升级
-WINCH   优雅关闭子进程
-QUIT      优雅关闭主进程

查看nginx的当前版本  :  /usr/local/nginx/sbin/nginx -v

[root@daili ~]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.26.1

平滑升级到1.27,服务持续期间对nginx升级

步骤:

1. 不停止原有服务,但是必须使用原生方式启动或者更改 nginx 脚本(不建议使用脚本,会创
建一个新的进程)
2. 重新编译 nginx 新版本
3. 使用 kill -USR@ 启动新版本
4. 把旧的 Nginx 子进程全部退出
5. 优雅的退出 Nginx 的老进程 系统就只剩下新的 nginx

下载新的nginx

注意:对新版本进行编译安装,安装目录必须和旧版本一致

  210  wget https://nginx.org/download/nginx-1.27.0.tar.gz
  212  tar -zxvf nginx-1.27.0.tar.gz 
  214  cd nginx-1.27.0/

  217  ./configure --prefix=/usr/local/nginx/ --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-stream
  218  make && make install
 

[root@daili nginx-1.27.0]# ls /usr/local/nginx/sbin/
nginx  nginx.old
[root@daili nginx-1.27.0]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.27.0
[root@daili nginx-1.27.0]# /usr/local/nginx/sbin/nginx.old -v
nginx version: nginx/1.26.1
 

[root@daili nginx-1.27.0]# ps -aux|grep nginx
root       1364  0.0  0.1  46116  1144 ?        Ss   15:09   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx      1365  0.0  0.2  46564  2132 ?        S    15:09   0:00 nginx: worker process
root       4460  0.0  0.0 112824   980 pts/0    S+   16:34   0:00 grep --color=auto nginx

使用 kill -USR2 启用新版本的 Nginx 的软件
kill -USR2 老版本的 pid 编号
使用老的nginx进程创建新的进程

[root@daili nginx-1.27.0]# kill -USR2 1364  //老版本的pid编号
[root@daili nginx-1.27.0]# ps -aux|grep nginx  

此时会出现两套 master 进程,这个时候处理客户请求的就是新的 nginx 服务

root       1364  0.0  0.1  46116  1332 ?        Ss   15:09   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx      1365  0.0  0.2  46564  2132 ?        S    15:09   0:00 nginx: worker process
root       4462  0.0  0.3  46116  3320 ?        S    16:37   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx      4463  0.0  0.1  46568  1896 ?        S    16:37   0:00 nginx: worker process
root       4466  0.0  0.0 112824   976 pts/0    S+   16:37   0:00 grep --color=auto nginx

关闭老版本的所有子进程
关闭老版本的主进程

[root@daili nginx-1.27.0]# kill -WINCH 1365
[root@daili nginx-1.27.0]# ps -aux|grep nginx
root       1364  0.0  0.1  46116  1332 ?        Ss   15:09   0:00 nginx: master process /usr/local/nginx/sbin/nginx
root       4462  0.0  0.3  46116  3320 ?        S    16:37   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx      4463  0.0  0.2  46568  2144 ?        S    16:37   0:00 nginx: worker process
nginx      4468  0.0  0.1  46564  1888 ?        S    16:39   0:00 nginx: worker process
root       4470  0.0  0.0 112824   980 pts/0    S+   16:40   0:00 grep --color=auto nginx
[root@daili nginx-1.27.0]# kill -QUIT 1364

使用curl 查看当前服务器的版本
[root@daili nginx-1.27.0]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.27.0
Date: Tue, 30 Jul 2024 08:41:41 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 17
Last-Modified: Tue, 30 Jul 2024 07:04:55 GMT
Connection: keep-alive
ETag: "66a89097-11"
Accept-Ranges: bytes

[root@daili nginx-1.27.0]# ps -aux|grep nginx
root       4462  0.0  0.3  46116  3320 ?        S    16:37   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx      4463  0.0  0.2  46568  2144 ?        S    16:37   0:00 nginx: worker process
root       4474  0.0  0.0 112824   980 pts/0    S+   16:41   0:00 grep --color=auto nginx
 

tomcat9可以在jdk8的环境运行,tomcat10必须在jdk17以上的版本运行

配置tomcat 10运行环境时,tomcat需要jdk环境

安装jdk-22.0.2

[root@server ~]# cd jdk-22.0.2/
[root@server jdk-22.0.2]# ls
bin  conf  include  jmods  legal  lib  LICENSE  man  README  release
[root@server jdk-22.0.2]# cd bin
[root@server bin]# ./java
用法:java [options] <mainclass> [args...]

[root@server ~]# mv jdk-22.0.2/ /usr/local/jdk22

[root@server ~]# cd /usr/local/jdk22

[root@server jdk22]# sed -n '$p' /etc/profile
unset -f pathmunge
[root@server jdk22]# sed -i '$aexport JAVA_HOME=/usr/local/jdk22/' /etc/profile
[root@server jdk22]# sed -n '$p' /etc/profile
export JAVA_HOME=/usr/local/jdk22/
[root@server jdk22]# source /etc/profile
[root@server jdk22]# $JAVA_HOME
-bash: /usr/local/jdk22/: 是一个目录
[root@server jdk22]# java
-bash: java: 未找到命令

[root@server jdk22]# sed -i '$aPATH=$JAVA_HOME/bin:$PATH' /etc/profile
[root@server jdk22]# sed -n '$p' /etc/profile
PATH=$JAVA_HOME/bin:$PATH
[root@server jdk22]# source /etc/profile
[root@server jdk22]# java
用法:java [options] <mainclass> [args...]

[root@server jdk22]# java -version
java version "22.0.2" 2024-07-16
 


 


 

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

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

相关文章

JVM性能调优全指南:高流量电商系统的最佳实践

1.G1(Garbage-First) 官网: G1 Garbage Collection G1收集器是Java 7中引入的垃圾收集器,用于替代CMS(Concurrent Mark-Sweep)收集器。它主要针对大内存、多核CPU环境下的应用场景,具有以下特点: 分代收集:G1仍然保留了分代的概念,但新生代和老年代不再是物理隔离的,…

线程的同步互斥

互斥 互斥保证了在一个时间内只有一个线程访问一个资源。 先看一段代码&#xff1a;三个线程同时对全局变量val进行--&#xff0c;同时val每自减一次其线程局部存储的全局变量 #include <iostream> #include <thread> #include <vector> #include <uni…

Java之Java基础十六(反射)

一、什么是反射 一般情况下&#xff0c;我们在使用某个类之前已经确定它到底是个什么类了&#xff0c;拿到手就直接可以使用 new 关键字来调用构造方法进行初始化&#xff0c;之后使用这个类的对象来进行操作。 Writer writer new Writer(); writer.setName("aaa"…

WPF的MVVM架构:如何通过数据绑定简化UI逻辑

WPF的MVVM架构&#xff1a;如何通过数据绑定简化UI逻辑 目录 MVVM模式概述数据绑定在MVVM中的作用实现MVVM模式的步骤MVVM模式中的常见问题与解决方案实践示例总结 MVVM模式概述 MVVM&#xff08;Model-View-ViewModel&#xff09;是一种设计模式&#xff0c;用于WPF应用程序…

超声波传感器 - 从零开始认识各种传感器【第十九期】

超声波传感器|从零开始认识各种传感器 1、什么是超声波传感器 超声波传感器是一种利用超声波来进行距离测量和目标检测的传感器。它通过发送&#xff0c;超声波脉冲&#xff0c;并测量超声波从传感器发射到目标物体并返回的时间来计算目标物体与传感器之间的距离。 超声波传感…

echarts无数据的展示内容,用graphic属性配置

echarts无数据的展示内容&#xff0c;用graphic属性配置 当echarts无数据的时候&#xff0c;图表展示的是个空白部分&#xff0c;感觉会有点丑&#xff0c;影响页面美观&#xff0c;这时候翻阅了echarts的官网&#xff0c;让我找到个配置项&#xff0c;试试发现还可以&#xf…

Notion支持直接绑定自己的域名,有何工具可替代为公开网站自定义域名?

Notion最近大招频出&#xff0c;推出新功能——自定义域名。只需简单几步&#xff0c;xxx.notion.site秒变你的专属域名&#xff08;月费仅需10美金&#xff09;。推特上的独立内容创作者/初创公司&#xff0c;用它来打造品牌、分享资料模板&#xff0c;甚至实现盈利。 Notion的…

你还在为PDF转Word烦恼?试试这四款免费工具吧!

悄咪咪问一句&#xff0c;大家在平时上班时最头疼的事情有哪些&#xff1f;我想会有很多朋友也有pdf如何在线转换word文档的免费方式&#xff0c;毕竟这些办公文档是非常常见的问题了&#xff0c;所以今天就专门准备这么一篇文章来分享我个人喜欢的四款好用工具&#xff1a; 第…

做知识付费项目还能做吗?知识付费副业项目如何做?能挣多少钱?

hello,我是阿磊&#xff0c;一个20年的码农&#xff0c;6年前代码写不动了&#xff0c;转型专职做副业项目研究&#xff0c;为劳苦大众深度挖掘互联网副业项目&#xff0c;共同富裕。 现在做知识付费项目还能做吗&#xff1f; 互联网虚拟资源项目我一直在做&#xff0c;做了有…

【单片机毕业设计选题24088】-基于STM32的智能家居控制系统

系统功能: 系统操作说明&#xff1a; 上电后OLED显示 “欢迎使用智能家居系统请稍后”&#xff0c;两秒后显示Connecting...表示 正在连接阿里云&#xff0c;正常连接阿里云后显示第一页面&#xff0c;如长时间显示Connecting...请 检查WiFi网络是否正确。 第一页面第一行…

使用runlink通过容器打印出容器的启动命令

1、Runlike简介 Runlike:通过容器打印出容器的启动命令&#xff0c;然后发现自己需要手动重新运行一些容器的人来说&#xff0c;这是一个真正的节省时间。 2、Docker镜像安装 2.1 构建Runlike容器 [rootlocalhost ~]# docker run --rm -v /var/run/docker.sock:/var/run/do…

嵌入式Linux:符号链接(软链接)和硬链接

目录 1、符号链接&#xff08;软链接&#xff09; 2、硬链接 3、link()函数 4、symlink()函数 5、readlink()函数 在 Linux 系统中&#xff0c;符号链接&#xff08;软链接&#xff09;和硬链接是两种创建文件链接的方法。理解它们的区别和使用场景对于文件系统的管理非常…

Spring核心机制Ioc和Aop

Spring全家桶 WEB&#xff1a;SpringMvc、Spring Web Flux 持久层&#xff1a;Spring Data、Spring Data Redis、Spring Data MongoDB 安全校验&#xff1a;spring Security 构建工程脚手架&#xff1a;SpringBoot 微服务&#xff1a;SpringCloud 所有的Spring框架集成&#xf…

轻松入门Linux—CentOS,直接拿捏 —/— <1>

一、什么是Linux Linux是一个开源的操作系统&#xff0c;目前是市面上占有率极高的服务器操作系统&#xff0c;目前其分支有很多。是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统 Linux能运行主要的UNIX工具软件、应用程序和网络协议 Linux支持 32…

每日OJ_牛客CM26 二进制插入

目录 牛客CM26 二进制插入 解析代码 牛客CM26 二进制插入 二进制插入_牛客题霸_牛客网 解析代码 m:1024&#xff1a;100000000 00 n:19 &#xff1a; 10011 要把n的二进制值插入m的第j位到第i位&#xff0c;只需要把n先左移j位&#xff0c;然后再进行或运算&#xff08;|&am…

ctfshow 权限维持 web670--web679

web670 <?php// 题目说明&#xff1a; // 想办法维持权限&#xff0c;确定无误后提交check&#xff0c;通过check后&#xff0c;才会生成flag&#xff0c;此前flag不存在error_reporting(0); highlight_file(__FILE__);$a$_GET[action];switch($a){case cmd:eval($_POST[c…

OCC BRepOffsetAPI_ThruSections使用

目录 一、BRepOffsetAPI_ThruSections简介 二、功能与特点 三、应用场景 四、示例 一、BRepOffsetAPI_ThruSections简介 在Open CASCADE Technology (OCCT) 中,BRepOffsetAPI_ThruSections 类是用来通过放样生成一个实体或者一个面壳(Shell)。当使用这个类时,isSolid 参…

【环境搭建问题】linux服务器安装conda并创建虚拟环境

1.检查有没有conda 首先看root文件夹下有没有anaconda或者conda 没有的话就要先下载安装conda&#xff1a; https://repo.anaconda.com/archive/index.html 在这个链接下找自己需要的。服务器一般为linux&#xff0c;所以我这里选择的是&#xff1a; 2.安装conda 下载安装…

Electron学习笔记(二)Hello World

目录 前言 运行主进程 创建界面 使用窗口打开界面 管理窗口的生命周期 关闭所有窗口时退出应用 (Windows & Linux)​ 如果没有窗口打开则打开一个窗口 (macOS) 使用预加载脚本访问渲染器的Node.js 添加你自己的功能 完整代码展示 效果展示 前言 接上一篇文章 …

LINUX进程间的通信(IPC)--信号

一、概念 信号通信&#xff0c;其实就是内核向用户空间进程发送信号&#xff0c;只有内核才能发信号&#xff0c;用户空间进程不能发送信号。信号已经是存在内核中的了&#xff0c;不需要用户自己创建。 信号通信的框架 * 信号的发送&#xff08;发送信号进程&#xff09;&am…