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_connleast_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
[root@daili nginx-1.27.0]# kill -USR2 1364 //老版本的pid编号
[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
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