CentOS 下 Nginx + Tomcat 配置负载均衡之二

继上一节实验了一个基本的tomcat + nginx负载均衡效果后,这一节更进一步,完成以下两个内容的改进

  • 动静分离
  • web项目部署进tomcat

一、新建一个用来部署的maven web项目

首先用idea新建一个基本的maven web项目

这样就完成了一个基本maven单模块的web项目的搭建

下面在新增一个前台jsp页面和一个后台servlet处理类

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
<form action="hello" method="post">
    <table>
        <tr>
            <td>用户名:</td>
            <td><input type="text" name="username"></td>
        </tr>
        <tr>
            <td>密码:</td>
            <td><input type="password" name="password"></td>
        </tr>
        <tr>
            <td>
                <input type="submit" value="登录">
            </td>
            <td>
                <input type="reset" value="取消">
            </td>
        </tr>
    </table>
</form>
</body>
</html>
HelloServlet
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;


/**
 * HelloServlet
 * @author zhaoxing
 * 2018年7月13日11:24:35
 */
@WebServlet(urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {

    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String userName = req.getParameter("username");
        String passWord = req.getParameter("password");

        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter printWriter = resp.getWriter();
        printWriter.println("<html><body><h2>");

        if ("admin".equals(userName) && "admin".equals(passWord)) {
            printWriter.println("登录成功!欢迎您," + userName);
        } else {
            printWriter.println("用户名或者密码错误!");
        }
        printWriter.println("</h2></body></html>");
    }
}

用maven打包(package)项目

在生成目录中看到已经生成了一个对应的war包

二、把步骤一打好的war包扔到Linux服务器$tomcat_home/webapp目录下

1. 首先把war包该成项目名,即HelloWorld.war

2. 分别上传到tomcat1和tomat2的webapp目录下

三、把静态资源文件放到nginx的资源路径下

[root@bogon HelloWorld-1.0-SNAPSHOT]# cd /usr/local/nginx/html/
[root@bogon html]# ls
50x.html  images  index.html
[root@bogon html]# ls images/
girl2.jpg  girl.jpg

这里看到新建了一个图片目录,放了两张图片。

四、配置nginx,对动态资源和静态资源分别处理

之前开发web方面的程序时候我们习惯将html、css等资源文件也放置于Tomcat之中,用户发起访问后,tomcat需要将请求的这些静态资源文件一并返回给用户,这样如果同一个应用部署在多台tomcat服务器时,相同的静态资源在每个服务器上都有一份,增加了tomcat服务器的网络IO和磁盘空间,相当不合理。如果我们只讲JSP之类的请求交给tomcat,而反向代理服务器上存放静态资源,当用户请求静态资源时,前端反向代理服务器就可以直接将静态资源返回给用户,而不用去请求tomcat,一方面可以降低后端服务器的压力,一方面可以提高静态资源响应效率。

处理流程如下图所示:

配置如下:

    upstream myTomcatServer {
        server localhost:8080 weight=1;
        server localhost:8081 weight=3;
    }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location ~ .*.(js|css|png|jpg) {
            root   html;
            expires 30d; #缓存30天
        }


        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://myTomcatServer;
        }     }

使配置文件生效

[root@bogon nginx]# ./sbin/nginx -s reload

五、访问页面

直接访问还是会访问到tomcat下的index页

访问tomcat下部署的HelloWorld项目,通过nginx反向代理也可以正常访问

输入正确密码

输入错误密码

接下来直接访问静态资源,没问题(顺便看看美女放松下心情偷笑

原文地址:https://www.cnblogs.com/codestarer/p/13635570.html