我也不知取啥名

nginx-rewrite功能

  • 重定向:也叫url重定向,也叫url改写
  • 未来需求:
    • 网站由http(80)---->https(443)
      • http://www.baidu.com---->https://www.baidu.com
    • 根据用户客户端类型进行跳转
      • 如果用户客户端为ios、iPhone、Android,则访问m.www.baidu.com
      • 否则:访问www.baidu.com
    • 新老域名跳转:www.360buy.com---->jd.com

模块与指令

rewrite模块相关指令 说明
return 实现对url的改写,一般与nginx一起使用,返回指定的状态码
rewrite 实现对url的改写,使用正则匹配uri进行改写,还有各种标记
set 创建或修改nginx变量
if 判断(一般与nginx变量一起使用)

 

 

 

 

 

return指令

格式 说明
格式1 return code URL:返回状态码+新的url地址
格式2 return code:返回指定状态码
命令存放位置 server,location,if

 

 

 

 

案例:如果用户访问/admin/页面返回403

[root@web01 ~]# cat /etc/nginx/conf.d/rewrite.test.cn.conf 
server {listen 80;server_name rewrite.test.cn;root /app/code/rewrite;location / {index index.html;}location /admin/ {return 403;}
}
[root@web01 ~]# mkdir /app/code/rewrite
[root@web01 ~]# echo rewrite model index > /app/code/rewrite/index.html

 

案例:域名间跳转

用户访问rewrite.test.cn ----> www.baidu.com

[root@web01 /etc/nginx/conf.d]# cat rewrite.test.cn.conf 
server {listen 80;server_name rewrite.test.cn;return 301 http://www.baidu.com;
}

 

if判断

if指令 说明
格式

if (条件) {

  满足条件执行的内容

}

命令存放位置 server、location
可以使用的符号 ~ ~* !~ !~*

 

 

 

 

 

 

案例:rewrite.linux.cn网站只允许GET、POST 2种请求方式访问

[root@web01 /etc/nginx/conf.d]# cat rewrite.test.cn.conf 
server {listen 80;server_name rewrite.test.cn;root /app/code/rewrite;if ($request_method !~ 'GET|POST') {return 403;}location / {index index.html;}
}# 测试
[C:\~]$ curl -H Host:rewrite.test.cn http://10.0.0.7% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100    20  100    20    0     0  13280      0 --:--:-- --:--:-- --:--:-- 20000
rewrite model index[C:\~]$ curl -I -H Host:rewrite.test.cn http://10.0.0.7% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed0   153    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
HTTP/1.1 403 Forbidden
Server: nginx/1.26.1
Date: Wed, 05 Mar 2025 03:38:23 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive

 

set(用于创建或修改nginx变量)

# set $变量名 变量值
set $name yuanxiaojiang;[root@web01 /etc/nginx/conf.d]# cat rewrite.test.cn.conf
server {listen 80;server_name rewrite.test.cn;set $name yuanxiaojiang;return 200 $name;
}# 测试
C:\~]$ curl rewrite.test.cn
yuanxiaojiang

 

 

 

rewrite

rewrite正则用于匹配用户请求的uri

rewrite指令 说明
格式 rewrite 旧地址(具体地址/正则)  替换成的新地址(具体地址/反向引用)  [flag标记]
rewrite存放位置 server、location、if

 

 

 

rewrite各种标记

 标记 说明 补充
 redirect 302(临时),用户访问的时候,收到302提示及其新的位置Location(响应头),用户根据Location新的位置进行访问(让用户重新发出http请求)  新旧地址都可以用 
permanent  301(永久),用户访问的时候,收到301提示及其新的位置Location(响应头),用户根据Location新的位置进行访问(让用户重新发出http请求)  旧的地址不使用,只用新的地址 
break 用户请求匹配到包含break指令或rewrite规则后,即使后面还有Location规则,不会继续运行(终止运行)   
last(了解) 用户请求匹配到包含last标记的rewrite规则后,停止继续执行,nginx会重新发出内部请求,请求与Location规则进行匹配  开启nginx的rewrite_log才能看到 

 

 

 

 

 

 

域名跳转

[root@web01 /etc/nginx/conf.d]# cat rewrite.test.cn.conf 
server {listen 80;server_name rewrite.test.cn;# return 301 http://www.baidu.com$request_uri;rewrite ^(.*)$ http://www.baidu.com$1 permanent;
}

高可用服务(keepalived)

  • 高可用:HA HighAvailablity ----> Keepalived
  • 生成vip(虚拟ip),dns解析到这个ip地址即可
选型 说明
keepalived(保持活跃) 高可用软件,负载使用,一般不涉及数据库
heartbeat(心跳) 高可用软件,设计数据库、存储数据时使用

 

 

 

原理

  • Keepalived利用VRRP协议的核心功能来实现主备切换,从而保证服务的高可用性
  • VRRP(虚拟路由器冗余协议):最开始是使网络设备实现高可用,目前通过VRRP协议实现负载高可用
  • 一般分为主备两个节点,主备之间通过VRRP协议发送数据包沟通
    • 主节点给备节点定期发送数据包
    • 备节点收到数据包表示主节点还活着
    • 备无法收到数据包,表示主节点挂了,备节点转为主节点,接管用户请求流量
  • vrrp协议使用组播ip地址: 224.xx.xx.xx

极速上手指南

高可用环境准备 需要安装的服务
lb01  10.0.0.5 nginx + keepalived
lb02  10.0.0.6 nginx + keepalived
yum install -y keepalived

 

 

 

 

keepalived配置文件结构(/etc/keepalived/keepalived.conf)

/etc/keepalived/keepalived.conf 配置文件结构 说明
global_defs 全局配置
vrrp_instance vrrp实例配置:vip、主备、网卡
virtual_server LVS配置:用于管理控制lvs

 

 

 

 

global_defs {router_id lb01  # 当前网络中keepalived的唯一标识(一般用主机名)
}vrrp_instance vip_1 {  # vip实例名字(注意在同一对主备之间该名字要一致)state MASTER  # 主/备  MASTER主  BACKUP备interface eth0  # 指定网卡virtual_router_id 51  # 在一对主备之间设置一个id号(一对主备之间id号要一致)priority 100  # 优先级(主>备 主备之间相差50)advert_int 1  # 心跳间隔:主节点多久发送一次vrrp数据包authentication {  # 授权与认证,保持默认即可(对数据包进行加密)auth_type PASSauth_pass 1111}virtual_ipaddress {  # 设置vip10.0.0.3 dev eth0 label eth0:0  # 该地址不能与网路中的地址冲突,label:设置别名  }
}

 

 

 

 

脑裂故障

  • 现象:主备节点都有vip
  • 原因:
    • 备节点认为主节点挂了,接管资源生成vip,实际上主节点没有挂,仍然有vip
    • 导致脑裂原因:开启防火墙、selinux、物理线路原因、keepalived配置
  • 解决:监控,只要备节点有VIP就报警

案例:keepalived基于主机高可用软件

keepalived只会在主节点主机挂了、主节点网络断开后、主节点keepalived服务关闭时才进行主备切换

默认情况下keepalived不会监控某个服务

项目目标:某个服务关闭了,keepalived就进行主备切换

[root@lb01 ~]# cat /server/scripts/check_ngx.sh 
#!/bin/bash
#author: yuanxiaojiang
#desc: 监控nginx端口数量

port_count=`ss -lntup |grep nginx |wc -l`
if [ $port_count -eq 0 ];then systemctl stop keepalived
fi# 需要给脚本执行权限
# 脚本中不要包含服务的名字

 

修改keepalived配置文件

定义脚本:vrrp_script  脚本名 { script 脚本路径和名称 }

调用脚本:vrrp_instance 中通过track_script调用

# 注意修改脚本的权限,否则操作失败
[root@lb01 ~]# ll /server/scripts/check_ngx.sh 
-rw-r--r-- 1 root root 173 Mar  5 17:14 /server/scripts/check_ngx.sh
[root@lb01 ~]# chmod +x /server/scripts/check_ngx.sh  

[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {router_id lb01
}
vrrp_script my_check_ngx.sh {  # 定义监控脚本script /server/scripts/check_ngx.shinterval 2  # 间隔多长时间执行一次脚本weight 1  # 权重user root  # 用户
}
vrrp_instance vip_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.3 dev eth0 label eth0:0}track_script {  # 调用监控脚本
        my_check_ngx.sh}
}

非抢占模式

抢占模式(默认):主节点故障,备节点接管服务,主机点恢复,主节点接管服务

非抢占模式:主节点故障,备节点接管服务,主机点恢复不重新接管服务

  • # 将两个节点的状态都配置成备节点(state BACKUP)
  • # 配置nopreempt

 

双主模式

应对高并发的时候设置双主模式

 

 

数据加密服务(https)

 

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

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

相关文章

为什么SINS机械编排中,姿态更新在速度更新和位置更新之后

无论是严恭敏老师的开源程序PSINS,还是牛小骥老师组开源的KF-GINS,在进行SINS机械编排时都是先更新速度和位置,再更新姿态,这是为什么呢? 可以从姿态、速度和位置更新的具体公式中看出其中缘由:进行姿态更新时需要通过平均位置和平均速度计算n系相对于i系的平均角速率(计…

python接口自动化系列(16):导入自动化测试框架并运行

本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074 部署练习项目 可以本机上虚拟机部署,也可以云服务器部署 https://www.cnblogs.com/uncleyong/p/17165143.htmlpython环境 本机安装python https://www.cnblogs.com/uncleyong/p/10778792.htmlallure-co…

python接口自动化系列(16):导入后,本地跑自动化测试框架

本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074 部署练习项目 可以本机上虚拟机部署,也可以云服务器部署 https://www.cnblogs.com/uncleyong/p/17165143.htmlpython环境 本机安装python https://www.cnblogs.com/uncleyong/p/10778792.htmlallure-co…

简单利用deepseek部署一个简单的增删改查系统

这是我首先呢,将我的需求以及框架搭建的内容告诉AI 一个基于Springboot利用Mybatis框架进行开发的小系统整体的后端工程界面如下:其次是登录界面: 对于仓库管理员和管理员二者登录之后进入不同的功能页面可以进行编辑、删除、查找的功能在对AI进行训练过程中,也是需要对他进…

并行高性能计算2并行化规划

2 并行化规划并行项目的规划步骤 版本控制和团队开发工作流程 了解性能容量和限制 制定程序并行化计划开发并行应用程序或使现有应用程序并行运行,一开始可能会感觉具有挑战性。初涉并行化的开发人员往往不知道从何入手,也不知道可能会遇到什么陷阱。本章重点介绍开发并行应用…

C6678学习笔记(2)启动模式配置

拨码开关和跳线接法 跳线接法 参考文献:TMDXEVM6678L_Technical_Reference_Manual_2V00.pdf(在附赠的光盘中) 需要注意的是网上搜的参考手册有部分是第一版的,PCB布局是有些差异的,例如LED灯的位置,以光盘中的使用手册为准。跳线是用来选择串口的,如图的这种接法选择的是…

D.S基本操作及存储结构总结

线性表 基本操作(12个)//线性表的基本操作 12个//构造一个空的线性表L void InitList(SqList &L);//销毁线性表L void DestroyList(SqList &L);//将线性表L重置为空表 void ClearList(SqList &L);////表判空:空 返回TRUE(1) 非空返回FALSE(0) Status ListEmpty(SqL…

day:14 环境的搭建

一、环境的介绍 (1)测试环境分类; a、开发环境 ,开发 b、测试环境 ,(也叫sit环境 ,uat环境) 测试人员 c、线上环境(也叫生成环境) 运营 (2)测试环境作用: a、用于功能测试 b、寻找bug c、编写测试用例等 (3)环境的结构: lampj=linux+apache+mysql+java 二、搭…

day:14 环境面试题

多有米项目相关面试题 1、请简述多有米环境的搭建、用到了哪些工具和流程介绍 Jdk 1.8以上 服务器 ( tomcat ,apache) 代码包 ( root前端,manage后端) 数据库 mysql 虚拟机 centos 数据包 简单流程:安装jdk---安装服务器---将代码包部署到服务器中…

任务1

实验任务1 源代码 task1_1.c1 //打印一个字符小人2 3 #include <stdio.h>4 int main()5 {6 printf(" O \n");7 printf("<H>\n");8 printf("I I\n");9 printf(" O \n"); 10 printf("<H>\n&…

【Java 开发】在Sublime Text中设置GBK编码格式的步骤

‌Sublime Text,这款广受赞誉的跨平台文本编辑器,在编程、标记撰写以及文学创作等领域均有着广泛的应用。其运行速度迅捷,操作灵活自如,且配备了诸多高级功能,诸如语法高亮、智能自动完成、便捷的代码片段、多选操作、严谨的拼写检查以及强大的宏录制等。此外,Sublime Te…