第四周DAY02

nginx的反向代理
安装包链接https://nginx.org/download/nginx-1.26.1.tar.gz

yum -y install gcc gcc-c++ pcre-devel openssl-devel
[root@staticserver ~]# tar -xzvf nginx-1.26.1.tar.gz 
[root@staticserver nginx-1.26.1]#./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-stream

[root@staticserver nginx-1.26.1]# make && make install
[root@staticserver nginx-1.26.1]# useradd -s /bin/nologin -M nginx
不用使用systemctl启动,也不要使用脚本启动

[root@model nginx-1.26.1]# /usr/local/nginx/sbin/nginx 
[root@model nginx-1.26.1]# vim /usr/local/nginx/conf/nginx.conf

复制43-46到47,进行修改:


[root@model nginx-1.26.1]# /usr/local/nginx/sbin/nginx -s reload

将当前的主机作为前端服务器,用于接收和响应客户端,代理另外一台主机,克隆一台主机。

修改index.html文件,并且发布web服务

[root@dynamicserver ~]# echo "this is java web srver " > /usr/local/nginx/html/index.html 

启动nginx服务

[root@dynamicserver ~]# /usr/local/nginx/sbin/nginx 

使用curl 访问当前项目

[root@dynamicserver ~]# curl localhost
this is java web srver 

由于没有部署tomcat服务,所以使用nginx代替

切换到静态主机

修改nginx中的html文件

[root@staticserver ~]# echo "this is static server " > /usr/local/nginx/html/index.html 
[root@staticserver ~]# /usr/local/nginx/sbin/nginx         启动nginx

[root@staticserver ~]# ps -aux| grep nginx        查看进程

[root@staticserver ~]# curl localhost
this is static server 
[root@staticserver ~]# curl 192.168.2.40        访问40主机
this is java web srver 

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

使用39主机nginx反向代理40的服务器

location proxy_pass 协议 域名 端口

修改配置文件[root@staticserver ~]# vim /usr/local/nginx/conf/nginx.conf

46行

[root@staticserver ~]# /usr/local/nginx/sbin/nginx -s reload
访问192.168.2.40,代理192.168.2.39

现在的静态服务器实际上是代理服务器,nginx代理其他服务的时候,不需要对方同意,更加方便了模块化操作(如果代理服务器,阿双方都需要同意,之前的依赖太高,不便于模块化操作)

总结:

1.一班来说使用nginx代理动态服务器,例如代理tomcat发布的web服务

2.在这个案例中是使用nginx代替的

3.nginx反向代理,是不需要被代理的服务同意的,只需要在nginx中location中配置

./sbin/nginx -s reload         重载配置文件

负载均衡的基础

白名单,黑名单
再克隆一台机器allow,安装步骤如上

[root@allow nginx-1.26.1]# /usr/local/nginx/sbin/nginx 
[root@allow nginx-1.26.1]# echo "you are lucky" > /usr/local/nginx/html/index.html 
[root@allow nginx-1.26.1]# curl localhost
you are lucky
在192.168.2.40主机访问,可以访问到

[root@dynamicserver ~]# curl 192.168.2.41
you are lucky
设置192.168.2.40主机可以访问,其他主机不能访问

在配置文件中中的server模块中设置

allow 允许

deny 禁止

可以对ip生效,也可以对网段生效
[root@allow nginx-1.26.1]# vim /usr/local/nginx/conf/nginx.conf


[root@allow nginx-1.26.1]# /usr/local/nginx/sbin/nginx -s reload

访问:


 

初始安装nginx的时候 logs 日志文件

[root@allow nginx-1.26.1]# cd /usr/local/nginx/
[root@allow nginx]# tree logs/
logs/
├── access.log
├── error.log
└── nginx.pid

0 directories, 3 files

[root@allow nginx]# cat access.log        用户访问的信息

[root@allow nginx]# cat logs/error.log         访问报错的信息

负载均衡
准备四台机器,安装nginx,并且启动nginx

修改static主机的配置文件

[root@staticserver ~]# vim /usr/local/nginx/conf/nginx.conf


[root@staticserver ~]# /usr/local/nginx/sbin/nginx -s reload

权重

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

下载新的nginx

  338  wget https://nginx.org/download/nginx-1.27.0.tar.gz
  339  tar -zxvf nginx-1.27.0.tar.gz 
  340  cd nginx-1.27
  341  cd nginx-1.27.0
  343  ./configure --prefix=/usr/local/nginx/ --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-stream
  344  make && make install

[root@staticserver nginx-1.27.0]# ls /usr/local/nginx/sbin/
nginx  nginx.old
[root@staticserver nginx-1.27.0]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.27.0
[root@staticserver nginx-1.27.0]# /usr/local/nginx/sbin/nginx.old -v
nginx version: nginx/1.26.1
  349  ps -aux | grep nginx
  350  kill -USR2 4636
  351  ps -aux | grep nginx
  352  kill -USR2 1367
  353  ps -aux | grep nginx
  354  kill -WINCH 4636
  355  kill -QUIT 1367
  356  ps -aux | grep nginx

还可以访问到页面,升级成功

配置tomcat10
必须在jdk17以上的版本运行

在实际的工作中,不需要这么高的版本,在实训,要求使用新版本,新版本,我们使用新版本,是为了让大家指定各个程序之间版本依赖管理

  321  wget https://download.oracle.com/java/22/latest/jdk-22_linux-x64_bin.tar.gz
  322  tar -zxvf jdk-22_linux-x64_bin.tar.gz
  323  ls
  324  cd jdk-22.0.2/
  326  cd bin/
  327  ./java
  330  cd
  331  mv -r jdk-22.0.2/ /usr/local/jdk22/
  332  mv  jdk-22.0.2/ /usr/local/jdk22/
  333  ls /usr/local/jdk22/
  334  ls
  335  cd /usr/local/jdk22/
  336  pwd
  337  sed -n '$p' /etc/profile
  338  sed -i '$aexport JAVA_HOME=/usr/local/jdk22' /etc/profile
  339  sed -n '$p' /etc/profile
  340  source /etc/profile
  341  $JAVA_HOME
  342  vim /etc/profile
  343  java
  344  sed -i '$aPATH=$JAVA_HOME/bin:$PATH' /etc/profile
  345  sed -n '$p' /etc/profile
  346  java -version
[root@dynamicserver ~]# wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.26/bin/apache-tomcat-10.1.26.tar.gz
 

  • 22
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您的问题已经收到。以下是我的回答: 您好!根据您的要求,我可以设计如下的Python程序: ``` import datetime gan_zhi = ["甲子", "乙丑", "丙寅", "丁卯", "戊辰", "己巳", "庚午", "辛未", "壬申", "癸酉", "甲戌", "乙亥", "丙子", "丁丑", "戊寅", "己卯", "庚辰", "辛巳", "壬午", "癸未", "甲申", "乙酉", "丙戌", "丁亥", "戊子", "己丑", "庚寅", "辛卯", "壬辰", "癸巳", "甲午", "乙未", "丙申", "丁酉", "戊戌", "己亥", "庚子", "辛丑", "壬寅", "癸卯", "甲辰", "乙巳", "丙午", "丁未", "戊申", "己酉", "庚戌", "辛亥", "壬子", "癸丑", "甲寅", "乙卯", "丙辰", "丁巳", "戊午", "己未", "庚申", "辛酉", "壬戌", "癸亥"] # 判断一个年份是否是闰年 def is_leap_year(year): if year % 4 == 0 and year % 100 != 0 or year % 400 == 0: return True else: return False # 输入日期,返回该年干支纪年、该日期为该年的第几周、该日期为该年的第几天 def get_date_info(date_str): date = datetime.datetime.strptime(date_str, "%Y-%m-%d").date() year = date.year month = date.month day = date.day # 计算该年份的干支纪年 gan_index = (year - 1984) % 60 zhi_index = (year - 1984) % 12 gan_zhi_year = gan_zhi[gan_index] + gan_zhi[zhi_index] # 计算该日期为该年的第几周和第几天 first_day = datetime.datetime(year, 1, 1).date() first_day_weekday = first_day.weekday() days = (date - first_day).days if first_day_weekday == 6: days += 1 week = days // 7 + 1 day_of_week = date.weekday() + 1 return gan_zhi_year, week, day_of_week # 测试 print(get_date_info("2022-05-30")) # 输出 ('壬子丙午', 22, 1) ``` 以上程序定义了一个`get_date_info`函数,接受一个格式为`year-month-day`的日期字符串,返回一个元组,其中包含该年份的干支纪年、该日期为该年的第几周和第几天。 程序首先定义了一个`gan_zhi`列表,保存了60个干支组合,用于计算任意年份的干支纪年。 接下来是判断一个年份是否是闰年的函数`is_leap_year`,用于计算该年份是否有366天,也就是2月有29天,从而计算该年份的第几周和第几天。 最后是`get_date_info`函数,先将输入的字符串转换为`datetime.date`类型,然后计算该年份的干支纪年:先计算年份的干支纪年的下标,再计算年份所对应的生肖的下标,加起来组成该年份的干支纪年。 接下来计算该日期为该年的第几周和第几天:首先计算出该年第一天的日期和星期几,然后算出输入日期与第一天的天数差(注意如果第一天是星期天,需要让每周的第一天是星期一),最后将天数差除以7,就可以得到该日期是该年的第几周。同时,也可以通过`datetime.date`类型自带的`weekday`方法,得到该日期是星期几。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值