nginx的正向代理和反向代理以及tomcat

nginx的正向代理和反向代理:

正向代理以及缓存配置:

代理:客户端不再是直接访问服务端,通过代理服务器访问服务端。

正向代理:面向客户端,我们通过代理服务器的IP地址访问目标范围端。

服务端只知道代理服务器的地址,真正的客户端ip可以隐藏。

科学上网。

server {listen       8888;server_name  localhost;resolver 8.8.8.8 valid=300 ipv6=off;#设置dns解析地址,解析器的缓存时间300秒,每300秒重新解析一次,关闭ipv6resolver_timeout 3s;#解析超时的时间3秒proxy_read_timeout 30s;#读取代理服务器的超时时间,30s,默认是60s.proxy_send_timeout 30s;#向服务端发送数据的超时时间是30s,默认是60s.proxy_connect_timeout 30s;#和服务器建立连接的超时时间,30s,默认也是60scharset utf-8;
​#access_log  logs/host.access.log  main;
​location / {root   html;index  index.html index.htm;proxy_pass  $scheme://$http_host$request_uri;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Forwarded-Host $host;proxy_set_header X-Forwarded-Port $server_port;#需要把客户端的真实ip,客户端的主机名,客户端的请求方式,服务端的端口,真实的ip地址添加在请求头当中# 请求转发到$url的地址,通过代理服务器地址可以直接访问百度 http://$url:端口# 设置页面的缓存:proxy_buffers 256 4k;#设置缓冲区为256个,大小是4kproxy_max_temp_file_size 0;# nginx服务器做为代理的时候暂时存放的响应数据的最大临时文件的大小为0,不使用临时文件proxy_cache_valid 200 302 1m;#当状态吗是200和302时,缓存的有效期是1分钟proxy_cache_valid 301 1h;#当状态吗是301,缓存的有效期是1小时proxy_cache_valid any 1m;#除了上述的三个状态吗,其他的缓存保存时间1分钟。}

反向代理:(负载均衡)

正向代理我们是知道代理服务器的地址,也知道我们访问的web服务器

反向代理客户端还是访问的代理地址,但是具体的访问web服务器是哪一台,我们并不知道。

作用:请求分配到多个后台服务器上,分担服务器的负载,提供系统的可用性和稳定性。

缓存加速

安全保护

四层代理和七层代理之间的区别:

正向代理,http模块的server和location。

http模块配置的都是七层

7层是应用层,使用的是http协议,可以对请求进行解析和处理,7层代理走的是用户态,应用协议和程序功能。

7层的处理速度写的比较慢,但是可以提供更高级的功能和更好的用户体验。

既可以是域名也可以是ip加端口。

四层是传输层,ip+端口,请求转发到后端,无法对请求进行深入的解析和处理。只是对请求流量的转发。

四层转发是内核态,内核处理。内核转发,所以速度较快。

应用场景:7层代理,一般都是对外提供访问,需要对请求进行处理,包括安全,过滤,流量控制。

四层代理,一般都是内部使用,不需要对流量,请求做特殊处理。

配置方法以及负载均衡的算法。

反向代理=负载均衡

配置方法:

七层只能写在http模块当中,命令upstream,只能在http的大模块中,不能在server,也不能在location中。

四层只能写在全局配置当中,不能写在http模块当中 命令stream

test3 192.168.60.30 代理 ------配置反向代理

test4 192.168.60.40 后台服务器

test5 192.168.60.50 后台服务器

负载均衡的算法:

1、轮询 round robin rr : 轮询算法是最简单也是最基础的算法,也是默认速发。请求轮流分配到后端服务器。

轮询算法适用与后端服务器处理能力相同的情况,访问量不大的情况。默认算法,可以不加。

2、加权轮询:在轮询的基础上,给每个后台服务器设置不同的一个权重。流量的分配不一定是按照权重比来,权重高的被转发的概率大,权重低的相对较小。

后端的服务器的性能有差异,性能高,权重相对更高,性能低,权重相对小一点。

weight。

3、最小连接数算法,least_conn 会把请求发送到当前连接数较少的后端服务器上。

后端服务器处理任务耗时不同的情况,可以避免请求集中在处理能更强的服务器上。

4、 ip_hash* 怎么做会话保持?

ip_hash根据算法,计算客户端的ip地址的hash值,然后请求转发到相应的服务器。在第一次访问网站之时,就会计算出这个hash值,会把请求分配到一个服务器,都是下一次客户端如果使用相同的ip地址再次访问,就不会再分配到其他的服务器。除非后台服务器的算法变更,或者后台服务器的数量发生了变化。这时才会更改访问的服务器。

适用场景,高并发。如果说客户端进来之后,不停的轮换服务器,反而会加重服务器的负担,固定在一台服务器上,降低了代理服务器的压力,同时也节约了资源。

nginx当中怎么实现会话保持?

ip_hash可以做会话保持

session 动态页面里面配置会话。

5、URL_hash 根据请求的url地址来计算hash值,然后再转发,如果每次请求的url都一样,就会被分配到同一个服务器。

转发的地址发送变化,后台服务器清理缓存或者后台服务器的数量发生变化。

以上都是在7层当中使用的,四层没有ip_hash和url_hash的算法。

基于域名实现负载均衡

四层代理:只能在全局模块,算法比较少,只能是ip+端口

nginx的优化

nginx的location的匹配和优先级以及重定向

nginx的正向代理和反向代理

tpmcat

tomecat和php一样,都是用来处理动态页面的。

tomcat也可以作为web应用服务器,开源的。

php .php

tomcat .jsp

nginx .html

tomcat是用Java代码写的程序,运行的是Java大web应用程序。

tomcat的特点和功能:

1、serclet容器:执行java servlet,是一种服务端的java程序,处理客户端的http请求,以及响应。

2、jsp容器,javaserver page,这是一种动态页面的技术,可以在html的页面里面嵌入java代码。

3、自身也是一个http服务器

4、tomcat是一个轻量级的动态页面处理程序,高并发场景不适用。

优化,tomcat自身的优化,以及系统的内核优化,jvm优化。

servlet:

是java语言当中用来开发web应用程序的关键组件。

处理http请求,生成动态内容,以及响应客户端的请求。

处理http请求

生成动态内容

处理java的业务逻辑

会话管理,保持用户的状态信息,购物车同步,用户登录等等。

也可以转发nginx的动态请求到数据库。

jsp:

web应用程序的界面,这个界面的语言是用java实现的。

.jsp为结尾的文件

index.jsp

tomcat的组件:

connector:负责对外接受和响应请求,它是tomcat与客户端沟通的一个枢纽,监听端口接收外界请求。

端口:8080

接收到了请求之后,传递给其他组件进行处理,处理完成之后回到connector,再响应客户端。

container:负责处理业务逻辑,engine host context wrapper四个功能组成

engine:用来管理多个虚拟主机。

host :一个host就是一个主机,也可以叫站点,通过配置host,也可以添加多个站点

context:一个context代表一个web应用

wrapper:封装器,负责处理最底层的逻辑。

service:对外提供外部服务,包含connector和container

tomcat可以有多个service。每个service之间互相是独立的。

工作流程

tomcat目录的作用:

1、bin 存放启动和关闭tomcat脚本的文件。startup.sh shutdow.sh

2、conf 存放tomcat的主配置文件,werver.xml主配置文件

context.xml host的默认配置信息

tomcat-user.xml 登录时认证用户和密码的相关信息,manager文件必须要赋权修改之后才能打开

lib tomcat运行时需要的jar包。一般不动

logs 日志文件,catalina.out 主日志文件。

temp 存放tomcat运行时产生的文件。

webapps 部署web应用的目录,类似于nginx的html

操作:

1、将压缩包拖入opt目录下

[root@test5 opt]# rz -E
rz waiting to receive.
[root@test5 opt]# rz -E
rz waiting to receive.
[root@test5 opt]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u201-linux-x64.rpm

2、关闭防火墙

[root@test5 opt]# systemctl stop firewalld
[root@test5 opt]# setenforce 0

3、设置jdk环境变量

[root@test5 opt]# rpm -ivh jdk-8u201-linux-x64.rpm

4、创建java.sh

[root@test5 opt]# vim /etc/profile.d/java.sh
​
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@test5 opt]# source /etc/profile.d/java.sh 
[root@test5 opt]# java -version
java version "1.8.0_201"

5、解压压缩包

[root@test5 opt]# tar -xf apache-tomcat-9.0.16.tar.gz 
[root@test5 opt]# ls
apache-tomcat-9.0.16         jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gz
[root@test5 opt]# mv apache-tomcat-9.0.16 tomcat
[root@test5 opt]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u201-linux-x64.rpm  tomcat
[root@test5 opt]# mv tomcat/ /usr/local/
[root@test5 opt]# cd /usr/local/tomcat/

6、启动配置文件

[root@test5 opt]# cd /usr/local/tomcat/bin
[root@test5 bin]# ./startup.sh
[root@test5 bin]# netstat -antp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      18565/java   

7、更改manager app的配置文件

[root@test5 tomcat]# cd webapps/
[root@test5 webapps]# cd manager/META-INF/
[root@test5 META-INF]# vim context.xml20          allow=".*" />

8、更改账户密码

[root@test5 manager]# cd /usr/local/tomcat/conf/
[root@test5 conf]# vim tomcat-users.xmlversion="1.0"><role rolename="manager-gui"/><user username="tomcat" password="tomcat" roles="manager-gui"/>   

9、重新启动配置文件

[root@test5 bin]# ./shutdown.sh 
[root@test5 bin]# ./startup.sh
[root@test5 bin]# netstat -antp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      11596/java          
tcp6       0      0 ::1:39588               ::1:8080                TIME_WAIT   - 
配置tomcat的虚拟主机

1、创建工作目录

[root@test5 tomcat]# cd webapps/
[root@test5 webapps]# mkdir xy102
[root@test5 webapps]# mkdir benet

2、设置访问页面

[root@test5 xy102]# vim index.jsp
this is xy102 page\!
[root@test5 webapps]# cd benet/
[root@test5 benet]# echo "this is benet page\!" > index.jsp

3、将主配置文件备份

[root@test5 tomcat]# cd conf/
[root@test5 conf]# cp server.xml server.xml.bak

4、更改主配置文件

[root@test5 conf]# vim server.xml
147         <Host name="www.xy102.com" appBase="webapps" unpackWARs="tr    ue" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="fals    e">
148         <Context docBase="/usr/local/tomcat/webapps/xy102" path=""     reloadable="true" />
149         </Host>   
150 <Host name="www.benet.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
151         <Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true" />

5、重启服务

[root@test5 bin]# ./shutdown.sh 
[root@test5 bin]# ./startup.sh 

6、做端口映射

[root@test5 bin]# vim /etc/hosts
192.168.60.50 www.xy102.com www.benet.com

7、结果

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

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

相关文章

开发个人Go-ChatGPT--3 服务拆分

开发个人Go-ChatGPT–3 服务拆分 个人Go-ChatGPT项目可拆分用户服务&#xff08;user&#xff09;&#xff0c;AI模型服务&#xff08;AiModel&#xff09;&#xff0c;… 每个服务都可以再分为 api 服务和 rpc 服务。api 服务对外&#xff0c;可提供给 app 调用。rpc 服务是…

如何利用算法优化广告效果

效果广告以超过67%的占比&#xff0c;成为了中国互联网广告预算的大头。在BAT、字节等大的媒体平台上&#xff0c;效果广告以CPC实时竞价广告为主。在这种广告产品的投放中&#xff0c;广告主或其代理公司通过针对每个广告点击出价&#xff0c;系统自动把这些点击出价换算成eCP…

Java + MySQL 实现存储完整 Json

Java MySQL 实现存储完整 Json 一、应用场景二、数据库配置三、后端代码配置1、maven 依赖2、实体类3、Service 实现类4、xml 文件 四、测试1、新增接口2、查询接口3、数据表内容 一、应用场景 将前端传过来的 Json 完整存储到 MySQL 中&#xff0c;涉及技术栈为 Java、MyBat…

揭秘 Vue 组件通信:构建响应式数据流

引言 Vue.js 的核心特性之一是其组件化架构。组件化开发是一种现代的前端开发模式&#xff0c;它鼓励开发者将用户界面拆分成独立的、可复用的组件。每个组件都有自己的逻辑和结构&#xff0c;使得代码更加模块化&#xff0c;易于维护和测试。 Vue 组件基础 组件的定义和用途…

从资金管理的角度 谈谈伦敦金投资技巧

刚进入伦敦金市场的时候&#xff0c;笔者认为技术分析是很重要的&#xff0c;所以将学习伦敦金投资技巧的精力全部投入到技术分析的学习中。经过一系列交易的亏损&#xff0c;笔者才发现&#xff0c;其实交易管理才是最重要的。如果管理得好&#xff0c;30%的胜率&#xff0c;投…

docker-compose部署node-exporter

一、安装 node_exporter:image: prom/node-exporter:v1.8.0container_name: node_exportervolumes:- /proc:/host/proc:ro- /sys:/host/sys:ro- /:/rootfs:ro# ports:# - 9100:9100environment:TZ: Asia/Shanghaicommand:- --path.procfs/host/proc- --path.rootfs/rootfs- -…

数据机构记录顺序表-笔记1

一、线性表的基本概念 数据元素&#xff1a;线性表中的基本单位&#xff0c;每个元素都是线性表的一部分。 数据项&#xff1a;数据元素的具体值。 存储位置&#xff1a;线性表中的元素在内存中的具体存储位置。 线性表按存储结构可以分为顺序表和链表两大类&#xff1a; 1.1…

嵌入式C语言面试相关知识——关键字(不定期更新)

嵌入式C语言面试相关知识——关键字 一、博客声明二、C语言关键字1、sizeof关键字2、static关键字3、const关键字4、volatile关键字5、extern关键字 一、博客声明 又是一年一度的秋招&#xff0c;怎么能只刷笔试题目呢&#xff0c;面试题目也得看&#xff0c;想当好厂的牛马其实…

快速上手指南:使用 Minikube 在本地运行 Kubernetes 集群

前言 Minikube 是一个开源工具&#xff0c;用于在本地运行 Kubernetes 集群。它提供了一种简单的方法来在本地开发和测试 Kubernetes 应用程序&#xff0c;而无需设置完整的 Kubernetes 集群。以下是 Minikube 的基本使用步骤&#xff1a; 安装 Minikube 安装依赖项 虚拟化…

java之静态方法

如果要在类中使用方法&#xff0c;就得需要将这个类实例化。有时候希望在不创建对象的情况下&#xff0c;通过类名直接调用某个方法&#xff0c;就得需要静态方法&#xff0c;要实现静态方法&#xff0c;只需要再成员方法前加上static关键字 静态方法也可以通过类名和对象访问…

Charles拦截发送数据包-cnblog

Charles拦截发送数据包 打开允许断点 右键要打断点的数据包&#xff0c;打断点 重新发请求进入断点模式 修改完毕后发送

拦截HTTP的多种方式

部分场景下需要修改请求报文信息&#xff0c;可以利用 AOP 思维&#xff08;切面编程&#xff09;&#xff0c;对请求进行拦截处理。Web 中有见的几种发送请求的方式&#xff1a; XMLHttpRequestfetchwindow.navigator.sendBeaconnew Imageservice worker 针对这几种不同的场…

C++实现简化版Qt的QObject(3):增加父子关系、属性系统

前几天写了文章&#xff1a; C实现一个简单的Qt信号槽机制 C实现简化版Qt信号槽机制&#xff08;2&#xff09;&#xff1a;增加内存安全保障 之后感觉还不够过瘾&#xff0c;Qt中的QObject体系里还有不少功能特性没有实现。为了提高QObject的还原度&#xff0c;今天我们将父子…

2024.06.29校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;内推/实习/校招汇总表格 1、实习 | 中国汽研2025届实习生招募 实习 | 中国汽研2025届实习生招募 2、开放周 | 航天513所暑期实践开放周邀请函 开放周 | 航天513所暑期实践开放周邀请函 3、开放日 | 中国电科第四…

vscode远程连接linux(配置免密)

远程连接 1.首先保证物理机和虚拟机网络可以ping通 2.查看ubuntu得ip地址 ifconfig IP为&#xff1a;192.168.52.133 3.连接远程主机 配置免密 1.打开cmd运行ssh-keygen -t rsa 一路回车就行 2.打开window文件夹C:\Users\xbj\.ssh 3.用记事本打开id_rsa.pub文件复制公…

LeetCode刷题之搜索二维矩阵

2024 7/5 一如既往的晴天&#xff0c;分享几张拍的照片嘿嘿&#xff0c;好几天没做题了&#xff0c;在徘徊、踌躇、踱步。蝉鸣的有些聒噪了&#xff0c;栀子花花苞也都掉落啦&#xff0c;今天给他剪了枝&#xff0c;接回一楼来了。ok&#xff0c;做题啦&#xff01; 图1、宿舍…

数据结构之“栈”(全方位认识)

&#x1f339;个人主页&#x1f339;&#xff1a;喜欢草莓熊的bear &#x1f339;专栏&#x1f339;&#xff1a;数据结构 前言 栈是一种数据结构&#xff0c;具有" 后进先出 "的特点 或者也可见说是 ” 先进后出 “。大家一起加油吧冲冲冲&#xff01;&#xff01; …

玩转springboot之springboot注册servlet

springboot注册servlet 有时候在springboot中依然需要注册servlet&#xff0c;filter&#xff0c;listener&#xff0c;就以servlet为例来进行说明&#xff0c;另外两个也都类似 使用WebServlet注解 在servlet3.0之后&#xff0c;servlet注册支持注解注册&#xff0c;而不需要在…

解决vscode配置C++编译带有中文名称报错问题

在新电脑上安装vscode运行带有中文路径和中文名称的C代码时遇到报错 根据别人的教程将laugh.json文件中"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",改成了"program": "${fileDirname}\\output\\test.exe",&#x…

文化财经macd顶底背离幅图指标公式源码

DIFF:EMA(CLOSE,12) - EMA(CLOSE,26); DEA:EMA(DIFF,9); MACD:2*(DIFF-DEA),COLORSTICK; JC:CROSS(DIFF,DEA); SC:CROSSDOWN(DIFF,DEA); N1:BARSLAST(JC)1; N2:BARSLAST(SC)1; HH:VALUEWHEN(CROSSDOWN(DIFF,DEA),HHV(H,N1));//上次MACD红柱期间合约最大值 HH2:VALUEWHE…