目录
前言
通常情况下,一个 Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的请求等情况,不能单独应用于生产环境下,所以我们需要一套更可靠的解决方案。
Nginx 是一款非常优秀的 http 服务器软件,它能够支持高达 5000 个并发连接数的响应,拥有强大的静态资源处理能力,运行稳定,并且内存、CPU 等系统资源消耗非常低。
目前很多大型网站都应用 Nginx 服务器作为后端网站的反向代理及负载均衡器,来提升整个站点的负载并发能力。
一、案例
案例由 Nginx 作为负载均衡器,Tomcat 作为应用服务器的负载集群的设置方法。
Nginx服务器作为前端,Tomcat服务器作为后端,web页面请求由Nginx服务来进行转发,但不是把所有的web请求转发,而是静态页面请求Nginx服务器自己来处理,动态页面请求则转发给后端的Tomcat服务器来处理。(动态页面使用正则匹配jsp结尾的请求,使用proxy_pass转发给Tomcat服务器)
192.168.238.139
192.168.238.140
二、Nginx的高级用法
location
|------|------------------------------------------------------------------|
| = | 精确匹配 |
| ^~ | 不用正则的字符串匹配 |
| ~ | 正则匹配,且区分大小写 |
| ~* | 不区分大小写的正则匹配 |
| / | 任意匹配,无论如何都会满足匹配条件,后面不能有任意字符串(location匹配后的目录,当访问时访问url路径后的对应目录名称) |
rewirte
|------|-----------|
| 应用场景 | 进行前端的反向代理 |
| | 新旧域名的更替 |
| | 防盗链 |
|------|-------------------------|
| 书写位置 | server |
| | location |
| | if条件 |
| | 若要匹配后就停止向下匹配,加入break关键字 |
|--------|---------------------------------------------|
| 重写条目写法 | rewirte "^表达式" 重写路径(可以是本地的访问目录,也可以是远程的URL) |
| 返回状态码 | permanent,301 ;redirect,302 |
三、tomcat部署
192.168.238.140
安装两台tomcat为tomcat1和tomcat2
tar xf apache-tomcat-8.5.16.tar.gz
mv apache-tomcat-8.5.16 /usr/local/tomcat1
cp /usr/local/tomcat1 /usr/local/tomcat2
优化命令启动关闭命令
ln -s /usr/local/tomcat1/bin/startup.sh /usr/local/bin/tomcat1.up
ln -s /usr/local/tomcat1/bin/shutdown.sh /usr/local/bin/tomcat1.down
ln -s /usr/local/tomcat2/bin/startup.sh /usr/local/bin/tomcat2.up
ln -s /usr/local/tomcat2/bin/shutdown.sh /usr/local/bin/tomcat2.down
修改tomcat2的端口
分别编辑页面访问内容tomcat1和tomcat2(tomcat/webapps/ROOT/index.jsp)
启动服务 tomcat1.up tomcat2.up
四、Nginx部署
192.168.238.139
yum install -y epel-release
yum install -y nginx
vim /etc/nginx/nginx.conf在http和server中加入
echo OK > /usr/share/nginx/html/index.html
启动服务systemctl start Nginx
五、测试
用Nginx的IP地址进行动态页面访问
也可以在终端里curl
使用站点不存在的资源进行访问,查看报错信息对应的服务即可
拓展(感兴趣的小伙伴可以进行实验)
将此内容进行双击热备
再搭建一个同主用Nginx配置服务器一样配置的备用Nginx服务器,两者都安装keepalived,构成双击热备(注意优先级,vrrp实例名称,状态等内容)。在master宕机的情况下,slave将通过虚拟IP来接管master的工作。
总结
为了方便查看和以后部署Mysql,php服务不与Tomcat起冲突,进行了分开部署,也可以都部署在同一台机器上。重点在Nginx的高级location上,正则匹配和任意匹配的用法;upstream是将请求转发到后端。