nginx的正向代理和反向代理:
正向代理以及缓存配置:
代理:客户端不再是直接访问服务端,通过代理服务器访问服务端。
正向代理:面向客户端,我们通过代理服务器的IP地址访问目标范围端。
服务端只知道代理服务器的地址,真正的客户端ip可以隐藏。
科学上网。
server { listen 8888; server_name localhost; resolver 8.8.8.8 valid=300 ipv6=off; #设置dns解析地址,解析器的缓存时间300秒,每300秒重新解析一次,关闭ipv6 resolver_timeout 3s; #解析超时的时间3秒 proxy_read_timeout 30s; #读取代理服务器的超时时间,30s,默认是60s. proxy_send_timeout 30s; #向服务端发送数据的超时时间是30s,默认是60s. proxy_connect_timeout 30s; #和服务器建立连接的超时时间,30s,默认也是60s charset 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个,大小是4k proxy_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.xml 20 allow=".*" />
8、更改账户密码
[root@test5 manager]# cd /usr/local/tomcat/conf/ [root@test5 conf]# vim tomcat-users.xml version="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、结果