nginx动静分离和rewrite重写和https和keepalived

news/2024/11/29 16:29:25/
动静分离,通过中间件将动态请求和静态请求分离,可以减少不必要的消耗,同时减少请求延迟
动静分离只有好处:动静分离后,即使动态资源不可用,但静态资源不受影响

单台实现动静分离

1.部署java
yum install java-11-openjdk -y
2.部署tomcat官网:https://tomcat.apache.org/[root@test2 ~]# wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.30/bin/apache-tomcat-10.1.30.tar.gz
[root@test2 ~]# ./apache-tomcat-10.1.30/bin/startup.sh 
Using CATALINA_BASE:   /root/apache-tomcat-10.1.30
Using CATALINA_HOME:   /root/apache-tomcat-10.1.30
Using CATALINA_TMPDIR: /root/apache-tomcat-10.1.30/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /root/apache-tomcat-10.1.30/bin/bootstrap.jar:/root/apache-tomcat-10.1.30/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.tomcat的代码目录
[root@test2 examples]# ll /var/lib/tomcat/webapps/ROOT/
total 164
-rw-r----- 1 root root 27235 Oct  6 10:35 asf-logo-wide.svg
-rw-r----- 1 root root   713 Oct  6 10:35 bg-button.png
-rw-r----- 1 root root  1918 Oct  6 10:35 bg-middle.png
-rw-r----- 1 root root  1401 Oct  6 10:35 bg-nav.png
-rw-r----- 1 root root  3103 Oct  6 10:35 bg-upper.png
-rw-r----- 1 root root 21630 Oct  6 10:35 favicon.ico
-rw-r----- 1 root root 12241 Oct  6 10:35 index.jsp
-rw-r----- 1 root root  6776 Oct  6 10:35 RELEASE-NOTES.txt
-rw-r----- 1 root root  5584 Oct  6 10:35 tomcat.css
-rw-r----- 1 root root 67795 Oct  6 10:35 tomcat.svg
drwxr-x--- 2 root root    21 Oct  6 10:35 WEB-INF3.配置nginx代理tomcat
[root@test2 ~]# cat /etc/nginx/conf.d/1.conf 
server {listen 80;server_name 192.168.23.102;location / {proxy_pass http://192.168.23.102:8080;}location ~ \.(svg|png)$ {root /code;}
}[root@test2 ~]# mv apache-tomcat-10.1.30/webapps/ROOT/tomcat.svg /code/
[root@test2 ~]# mv apache-tomcat-10.1.30/webapps/ROOT/asf-logo-wide.svg /code/
[root@test2 ~]# mv apache-tomcat-10.1.30/webapps/ROOT/*.png /code/
[root@test2 ~]# chown -R nginx /code

因为图片是静态文件,即使这个页面出现问题了,这个小猫也能访问
https://i-blog.csdnimg.cn/direct/5f7a943b059c4fb88669bf48c4cdf973.png" alt="在这里插入图片描述" />

此时就算把tomcat停止了,图片也能继续访问

[root@test2 ~]# apache-tomcat-10.1.30/bin/shutdown.sh 
Using CATALINA_BASE:   /root/apache-tomcat-10.1.30
Using CATALINA_HOME:   /root/apache-tomcat-10.1.30
Using CATALINA_TMPDIR: /root/apache-tomcat-10.1.30/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /root/apache-tomcat-10.1.30/bin/bootstrap.jar:/root/apache-tomcat-10.1.30/bin/tomcat-juli.jar
Using CATALINA_OPTS:   

https://i-blog.csdnimg.cn/direct/cad09752bbdc4461a542f43259bcfd21.png" alt="在这里插入图片描述" />

根据user-agent跳转不同的业务

来判断用户是iphone 还是window来跳转到不同的业务
在负载均衡上来实现[root@test2 ~]# cat /etc/nginx/conf.d/proxy.conf 
upstream android {server 192.168.23.102:9090;
}
upstream iphone {server 192.168.23.102:9091;
}
upstream pc {server 192.168.23.102:9092;
}
server {listen 80;server_name 192.168.23.102;charset 'utf-8';location / {#如果客户端的来源是android则跳转到androiadif ($http_user_agent ~* "Android") {proxy_pass http://android;}#如果客户端的来源是iphone则跳转到iphoneif ($http_user_agent ~* "Iphone") {proxy_pass http://iphone;}#如果客户端的来源是IE 浏览器则返回403if ($http_user_agent ~* "MSIE") {return 403;}#默认跳转到pc资源proxy_pass http://pc;}
}

rewrite重写

http://www.oldboy.com:80/index.html
www  主机
oldboy 权威域名
com 顶级域名
index。html  资源rewrite主要实现url地址重写,以及重定向,把传入的web的请求重定向到其他url的过程rewrite使用场景
1.地址跳转
2.协议跳转 http跳转为https
3.伪静态:将动态页面显示为静态页面方式的一种技术,便于搜索引擎的录入,同时减少动态url地址对外暴露过多参数,提升更高的安全性
4.搜索引擎,SEO优化依赖与url路径,好纪的url便于支持搜索引擎录入语法
Syntax:	rewrite regex replacement [flag];
Default:	—
Context:	server, location, if
flag作用
last本条规则匹配完成后,停止匹配,不在匹配后面的规则
break本条规则匹配完成后,停止匹配,不在匹配后面的规则
redirect返回302临时重定向,地址栏会显示调准后的地址
permanent返回301临时重定向,地址栏会显示跳转后的地址

测试

[root@test3 ~]# cat /etc/nginx/conf.d/test.conf 
server {listen 80;server_name 192.168.23.103;root /code/test/;location / {rewrite /1.html /2.html;rewrite /2.html /3.html;}location /2.html {rewrite /2.html /a.html;}location /3.html {rewrite /3.html /b.html;}
}
[root@test3 ~]# mkdir /code/test/ -p
[root@test3 ~]# echo 2.html > /code/test/2.html
[root@test3 ~]# echo 3.html > /code/test/3.html
[root@test3 ~]# echo a.html > /code/test/a.html
[root@test3 ~]# echo b.html > /code/test/b.html
[root@test3 ~]# echo 1.html > /code/test/1.html
[root@test3 ~]# systemctl restart nginx
[root@test3 ~]# curl 192.168.23.103/1.html
b.html
[root@test3 ~]# curl 192.168.23.103/2.html
a.htmlbreak的用法,停止向后匹配
[root@test3 ~]# cat /etc/nginx/conf.d/test.conf 
server {listen 80;server_name 192.168.23.103;root /code/test/;location / {rewrite /1.html /2.html break;rewrite /2.html /3.html;}location /2.html {rewrite /2.html /a.html;}location /3.html {rewrite /3.html /b.html;}
}[root@test3 ~]# systemctl restart nginx
[root@test3 ~]# curl 192.168.23.103/1.html
2.htmllast的用法
[root@test3 ~]# cat /etc/nginx/conf.d/test.conf 
server {listen 80;server_name 192.168.23.103;root /code/test/;location / {rewrite /1.html /2.html last;rewrite /2.html /3.html;}location /2.html {rewrite /2.html /a.html;}location /3.html {rewrite /3.html /b.html;}
}
[root@test3 ~]# systemctl restart nginx
[root@test3 ~]# curl 192.168.23.103/1.html
a.html
rewrite /1.html /2.html last;到2.thml就不会向后匹配了,但是他会重新对2.html发起请求,所以返回的就是a。htmlbreak:停止向下匹配。直接返回结果
last:停止向下匹配,重新发起请求到服务器

redirect和permanent的用法

[root@test3 conf.d]# cat rewrite.conf 
server {listen 80;server_name 192.168.23.103;root /code;location /test {rewrite ^(.*)$ http://192.168.23.102/1.html redirect;#	rewrite ^(.*)$ http://192.168.23.102/1.html permanent;#	return 301 http://192.168.23.102/1.html;#	return 302 http://192.168.23.102/1.html;}
}
redirect 302临时跳转,nginx停了他就不能跳转了,第二次以后所有的访问,都会先请求原站,192.168.23.103/test 如果原站挂了则不行,
permanent 301永久跳转,nginx停了他依然能跳转,第二次以后再也不访问原站了,他会直接访问http://192.168.23.102/1.html,301被缓存到了浏览器
rewrite和return任选其一

http状态码

200 正常的
301 永久跳转
302 临时跳转
304 缓存
307 内部跳转
401 验证没有通过
403 有目录没资源,或者权限不对
404 没有代码资源正常500以后都是和数据库相关的
500 (服务器内部错误)服务器遇到错误,无法完成请求
501 (尚未实施)     服务器不具备完整的请求功能,例如:服务器无法识别请求方法时可能会返回此代码
502 (错误网关)     服务器作为网关或代理,从上游服务器收到i的无效响应
503 (服务不可用)   服务器目前无法使用(由于超载或者停机维护),通常这是暂停状态
504 (网关超时)     服务器作为网关或者代理,但是没有及时从上游服务器收到请求
505 (http版本不受支持) 服务器不支持请求中所用的http协议版本    

在写rewrite之前需要开启rewrite日志

[root@test3 ~]# cat /etc/nginx/nginx.conf|grep -E "^(http|    rewrite)"
http {rewrite_log on;测试
[root@test3 ~]# cat /etc/nginx/conf.d/rewrite.conf 
server {listen 80;server_name 192.168.23.103;root /code;location /test {rewrite ^(.*)$ /ccc/bbb/2.html;}
}[root@test3 ~]# mkdir /code/ccc/bbb/ -p
[root@test3 ~]# echo tigs  >  /code/ccc/bbb/2.html
[root@test3 ~]# systemctl restart nginx
[root@test3 ~]# curl 192.168.23.103/test
tigs[root@test3 test]# cat /etc/nginx/conf.d/rewrite.conf 
server {listen 80;server_name 192.168.23.103;location / {root /code;index index.html;}location /2018 {rewrite ^/2018/(.*)$ /2014/$1 redirect;}
}
[root@test3 test]# mkdir /code/2014/test/ -p
[root@test3 test]# echo 111 > /code/2014/test/1.html
此时就已经跳转了
[root@test3 test]# curl 127.0.0.1/2018/test/1.html案例4:访问course-11-22-33.html 实际上访问的是 /course/11/22/course_33.html
[root@test3 conf.d]# cat /etc/nginx/conf.d/rewrite.conf 
server {listen 80;server_name 192.168.23.103;root /code;index index.html;location / {#灵活写法rewrite ^/course-(.*)-(.*)-(.*).html$ /course/$1/$2/$3/course_$3.html redirect;#固定写法#rewrite ^/course-(.*) /course/11/22/course_33.html redirect;}
}错误页面跳转
[root@test3 ~]# cat /etc/nginx/conf.d/rewrite.conf 
server {listen 80;server_name 192.168.23.103;root /code;location /test {rewrite (.*) https://192.168.23.103/111 redirect;}error_page 403 404 500 501 502 @error_test;location @error_test {rewrite ^(.*)$ /404.html break;}
}变量的使用
案列1:需要在跳转后的请求行加上想要的参数&showoffline=1,公司内部人员加上
[root@test3 conf.d]# cat rewrite.conf 
server {listen 80;server_name 192.168.23.103;#$args为nginx内置变量请求行的参数set $args "&showoffline=1";   #设置一个变量$args 但是设置的时候变量为空,于是就把后面的参数赋值给argslocation / {root /code;index index.html;}if ($remote_addr = 192.168.23.1 ){rewrite (.*) http://192.168.23.103$1;}
}实际访问的ip
http://192.168.23.103/?&showoffline=1案列2.网站维护,指定的ip正常访问,其他ip跳转维护页面
[root@test3 code]# cat /etc/nginx/conf.d/rewrite.conf 
server {listen 80;server_name 192.168.23.103;root /code/;charset utf-8,gbk;location / {index index.html;set $ip 0;    #设置变量为0if ($remote_addr = "192.168.23.2"){set $ip 1;  #如何来源ip为0 ,1则设置成1}if ($ip = 0){rewrite ^(.*)$ /404error.html break;}}
}[root@test3 code]# echo 1111 > index.html
[root@test3 code]# echo '网站正在维护' > 404error.html

网站被篡改 http劫持

test1作为正常的网站
test2作为劫持的网站

keepalived高可用

vrrp虚拟路由冗余协议负载均衡
LB01   test
LB02   test3

安装ab压力测试工具

1.安装ab压力测试工具
yum install httpd-tools -y
ab -n 200 -c 2 http://127.0.0.1/
-n 要执行的请求数
-c 请求的并发数
-k 是否开启长连接

配置缓存

比如说一个图片,用户一旦访问,就让他缓存在浏览器
server {listen 80;server_name _;location ~.*\.(jpg|gif|png) {expires 7d;                #浏览器缓存七天}
}

如果开发代码没有正式上线,希望静态文件不被缓存

取消css.js.html等静态文件的缓存
location ~.*\.(css|js|html)$ {
add_header Cache-Control no-store;
add_head Pragma no-cache;
}

静态资源压缩

sendfile on;
tcp_nopush on; #大文件业务使用,比如说视频文件等
tcp_nodelay on; #小文件使用  使用这两个的前提是sendfile要开启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;rewrite_log on;sendfile            on;tcp_nopush          on;tcp_nodelay         on;keepalive_timeout   65;nginx将响应报文发送至客户端之前启用压缩功能,然后进行传输,这能够有效的节约带宽,并提高响应至客户端的速度
gzip在传输前进行压缩,传输后解压

防盗链

test3承担服务器
test2承担盗链服务器
就是流量我承担了,钱你赚了test3 有一张tomcat图片
[root@test3 ROOT]# cat /etc/nginx/conf.d/tomcat.conf 
server {listen 80;server_name 192.168.23.103;location / {proxy_pass http://192.168.23.103:8080/;}location ~ \.(svg) {root /code/;}
}test2
[root@test2 conf.d]# cat daolian.conf 
server {listen 80;server_name 192.168.23.102;root /code;index index.html;
}
[root@test2 code]# cat index.html 
<html><head><meta charset="utf-8"><title>welcome to xx</title></head><body style="background-color:pink;"><center><img src="http://192.168.23.103/tomcat.svg"/></center></body>
</html>访问测试,这个所承载的流量全部是test3承担,他会记录是http://192.168.23.102/的
[root@test3 bin]# tail -n1 /var/log/nginx/access.log
192.168.23.1 - - [24/Nov/2024:10:26:46 +0800] "GET /tomcat.svg HTTP/1.1" 200 67795 "http://192.168.23.102/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36" "-"

https://i-blog.csdnimg.cn/direct/cc4f93e7f5804319b4f2c50a4e18cf87.png" alt="在这里插入图片描述" />

配置防盗链

[root@test3 bin]# cat /etc/nginx/conf.d/tomcat.conf 
server {listen 80;server_name 192.168.23.103;location / {proxy_pass http://192.168.23.103:8080/;}location ~ \.(svg) {root /code/;valid_referers none blocked *.baidu.com *.goole.com;   #除了baidu和goole其他的不让访问,访问报403if ( $invalid_referer ) {return 403;}}
}

https://i-blog.csdnimg.cn/direct/ee26e8367ba9417da03b767eeec550e1.png" alt="在这里插入图片描述" />

如果用rewrite
[root@test3 bin]# cat /etc/nginx/conf.d/tomcat.conf 
server {listen 80;server_name 192.168.23.103;location / {proxy_pass http://192.168.23.103:8080/;}location ~ \.(svg) {root /code/;valid_referers none blocked *.baidu.com *.goole.com;if ( $invalid_referer ) {rewrite ^(.*)$ http://www.zhuo.com/2.jfif break;#rewrite ^(.*)$ /code/1.png break;}}
}

允许跨域访问

什么是跨域访问,当我们通过浏览器访问a网站时,同时会利用ajax或者是其他方式,同时也请求b网站,这样的话,就出现了请求一个页面,使用两个域名,这样的方式对浏览器来说是默认禁止的

cpu亲和力

nginx自动的绑定在对应的cpu上
[root@test2 conf.d]# grep worker ../nginx.conf
worker_processes auto;
worker_cpu_affinity auto;worker_connections 1024;
[root@test2 conf.d]# ps -eo pid,args,psr|grep [n]ginx5040 nginx: master process /usr/   05041 nginx: worker process         05042 nginx: worker process 

http://www.ppmy.cn/news/1550944.html

相关文章

电池建模 003- Behavioral battery mode行为电池模型入门学习

1、概要 库文件位置: Simscape / Battery / Cells 行为电池模型 电池块表示一个简单的电池模型。您可以选择暴露充电输出端口和电池的热端口。 要测量电池的内部电荷水平&#xff0c;在主菜单中&#xff0c;将“暴露充电测量端口”设置为“是”。此操作会暴露一个额外的物理信…

【Linux课程学习】:《简易版shell实现和原理》 《哪些命令可以让子进程执行,哪些命令让shell执行(内键命令)?为什么?》

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 打印命令行提示符&#xff08;PrintCommandLin…

Apache-maven在Windows中的安装配置及Eclipse中的使用

Apache Maven 是一个自动化项目管理工具&#xff0c;用于构建&#xff0c;报告和文档的项目管理工具。以下是在不同操作系统上安装和配置 Maven 的基本步骤&#xff1a; 安装 Maven 下载 Maven: apache-maven-3.9.9下载地址&#xff0c;也可访问 Apache Maven 官方网站 下载最…

黑马程序员Java项目实战《苍穹外卖》Day01

苍穹外卖-day01 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示&#xff1a; ​ 管理端-外卖商家使用 ​ 用户端-点餐用户使用 当我们完成该项目的学习&#xff0c;可以培养以下能力&#xff1a; 1. 软件开发整体介绍 作为一…

【Linux】linux下一切皆文件 | 重定向 | 缓冲区与缓冲区

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;青果大战linux 总有光环在陨落&#xff0c;总有新星在闪烁 很好&#xff0c;佬们…

大数据治理的介绍与认识

1.大数据治理的定义 大数据治理是指在企业或组织内部&#xff0c;通过一套系统的框架和流程&#xff0c;对大数据的获取、存储、处理、使用、共享、保护和删除等全生命周期进行管理和控制&#xff0c;确保数据的质量、安全性、合规性和价值最大化。其目标是使大数据资源得到高…

python基础知识(十一)面向对象进阶

#面向对象的特性# #封装# #继承# #多态# 1.面向对象的特性 面向对象编程有三个特性&#xff1a;封装、继承、多态 1.1 封装 面向对象的程序设计中&#xff0c;某个类把所需要的数据&#xff08;也可以说是类的属性&#xff09;和对数据的操作&#xff08;也可以说是类的行为&…

Spring Boot 动态数据源切换

背景 随着互联网应用的快速发展&#xff0c;多数据源的需求日益增多。Spring Boot 以其简洁的配置和强大的功能&#xff0c;成为实现动态数据源切换的理想选择。本文将通过具体的配置和代码示例&#xff0c;详细介绍如何在 Spring Boot 应用中实现动态数据源切换&#xff0c;帮…