反向代理
实例 1
实现效果
打开浏览器,输入地址,跳转到 Linux 的 Tomcat 的主页面中。
准备工作
安装 Tomcat,使用默认端口 8080。
下载、解压、运行 /bin/startup.sh 即可。
开放防火墙的 8080 端口,重启防火墙。
验证完了 tomcat 安装好后,可以关闭 8080 端口。
1 | firewall-cmd --zone=public --remove-port=8080/tcp --permanent |
配置 nginx
保存配置文件,reload 即可。
实例 2
实现效果
使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
nginx 监听端口 80
访问 http://ip/edu/ 跳转到 127.0.0.1:8080
访问 http://ip/vod/ 跳转到 127.0.0.1:8081
准备工作
创建两个 tomcat 服务器,一个 8080,一个 8081(修改配置文件),复制两个 tomcat 文件夹,启动 tomcat。
创建文件夹和测试页面,放在 tomcat 下的 webapps 目录下即可。
配置 nginx
1 | = 用户不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。 |
负载均衡
Linux 下提供负载均衡的东西有:Nginx、LVS、Haproxy 等。
nginx 提供的几种负载均衡分配策略:
轮询(默认)
每个请求按时间顺序逐一分配到不同的服务器上,如果后端 down 掉,就自动剔除。
weight
权重,默认权重为 1,权重越高被分配的客户端越多。
指定轮询几率,weight 和访问比例成正比,用于后端服务器性能不均的情况。
配置方式就是:
1
2
3
4upstream myserver {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}ip_hash
每个请求按 ip 的 hash 结果分配,这样每个访客固定一个后端服务器,可以解决 session 共享的问题。
1
2
3
4
5upstream myserver {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
1
2
3
4
5upstream myserver {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
fair;
}
实现效果
浏览器输入地址,负载均衡效果,访问平均到 8080 和 8081 中。
准备工作
两台 tomcat 服务器,8080 和 8081,创建统一的页面 edu/a.html。
配置 nginx
http 块中配置 upstream,在 location 中增加 proxy_pass。
动静分离
什么是动静分离?
简单来说就是动态和静态请求分来,不能理解成知识单纯的把动态页面和静态页面物理分离。
严格来说是动态请求跟静态请求分开,可以理解成用 nginx 处理静态页面,tomcat 处理动态页面。
动静分离从目前实现角度来说大致分为 2 种。
纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流的方案。
动态和静态文件混合在一起发布,通过 nginx 分开。
通过 location 指定不同的后缀实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之间的请求和流量。具体 expires 定义:是给一个资源设置一个过期时间,无需去服务端验证,直接通过浏览器自身确认是否过期即可,不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 expires 来缓存),我这里设置 3d,表示 3 天内访问这个 url,发送一个请求,比对服务器该文件最后更新时间有没有变换,没有变化则不从服务器专区,返回状态码 304,如果有修改,直接从服务器重新下载,返回状态码 200。
准备工作
准备静态资源,等会访问。
1 | [root@centos-7 data]# ls image/ |
配置 nginx
当然,要加 expires 也是在 location 中加入。
高可用配置
如果只有一个 nginx 来做代理,挂了怎么办?
nginx 可以做主备使用的方案。
这两个 nginx 都需要需要用到 keepalived。
这两个 nginx 对外需要提供一个虚拟 ip。
准备工作
1、需要两台 nginx 服务器
2、需要在两台服务器上安装 keepalived
1 | yum install keepalived |
查看是否安装好
1 | [root@centos-7 nginx]# rpm -q -a keepalived |
默认的 keepalived 配置在 /etc/keepalived/keepalived.conf
3、需要虚拟 ip
高可用配置
主要修改 keepalived 的配置文件。
配置文件如下文,注意有的 keeplived 使用 shell 来检测的,shell 脚本如下文。
然后将两台服务器上的 nginx 和 keepalived 都启动。
启动 keepalived
systemctl start keepalived.service
然后通过虚拟 IP 访问,虚拟 IP 在 keepalived 的配置文件中的虚拟ip。
1 | !/bin/bash |
1 | ! Configuration File for keepalived |
EOF