Nginx负载均衡之动态请求与静态请求分离

版权声明:©来自CSDN博客作者"李在奋斗"的原创作品,如需转载,请注明出处 https://blog.csdn.net/qq_31725371/article/details/84455532

Nginx动静分离

ip 服务器 功能
192.168.1.17 Nginx Server 处理请求
47.97.195.105(公网IP)
192.168.1.16
Proxy Server 调度请求

动静分离,通过中间件将动态请求和静态请求进行分离,分离资源减少不必要的请求消耗,减少请求延迟。

优点:动态分离后及时动态服务不可用,但静态资源不会受到影响

配置Nginx

  • 利用Tomcat服务器处理动态请求
# 准备tomcat
[root@proxy /tmp]$ wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.13/bin/apache-tomcat-9.0.13.tar.gz
[root@proxy /tmp]$ scp apache-tomcat-9.0.13.tar.gz root@nginx:/tmp

[root@nginx /tmp]$ mkdir /soft/app
[root@nginx /tmp]$ tar xf apache-tomcat-9.0.13.tar.gz -C /soft/app/
[root@nginx /etc/nginx/conf.d]$ yum install -y java
[root@nginx /soft/app/apache-tomcat-9.0.13/bin]# ./startup.sh 
Using CATALINA_BASE:   /soft/code/apache-tomcat-9.0.13
Using CATALINA_HOME:   /soft/code/apache-tomcat-9.0.13
Using CATALINA_TMPDIR: /soft/code/apache-tomcat-9.0.13/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /soft/code/apache-tomcat-9.0.13/bin/bootstrap.jar:/soft/code/apache-tomcat-9.0.13/bin/tomcat-juli.jar
Tomcat started.
[root@mysql-slave /soft/code/apache-tomcat-9.0.13/bin]# 

  • 利用Nginx处理静态请求
# Nginx(192.168.1.17)服务器配置
[root@nginx /etc/nginx]$ vim conf.d/static.conf 
server {
        listen 80;
        # server_name 47.97.195.105;
        root /usr/share/nginx/html;
        index index.html;

        location / {
                index index.html;
        }

        location ~* .*\.(jpg|png|gif)$ {
                gzip on;
                root /usr/share/nginx/html;
        }
}
# 静态资源站点
[root@mysql-slave /usr/share/nginx/html]# ls
1.jpg  2.jpg  50x.html  index.html
# 动态资源站点
[root@mysql-slave /soft/code/apache-tomcat-9.0.13/webapps/ROOT]# vi java.jsp
[root@nginx /soft/app/apache-tomcat-9.0.13/webapps/ROOT]$ vi java.jsp 
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP在页面显示实时时间</title>
</head>
<body>
        <%
                Date d = new Date();
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String now = df.format(d);
        %>

        我是动态当前时间:<%=now %>
        <br>
</body>

  • Nginx反向代理调度请求
# proxy(192.168.1.16)负载均衡器配置
[root@proxy /etc/nginx/conf.d]# vim proxy.conf
upstream java_api {
        server 192.168.1.17:8080;
}
upstream static {
        server 192.168.1.17;
}

server {
        listen 80;
        server_name 47.97.195.105;

        location / {
                gzip on;
                proxy_pass http://static;
                include /etc/nginx/conf.d/proxy_params;
        }

        location ~ \.jsp$ {
                proxy_pass http://java_api;
                include /etc/nginx/conf.d/proxy_params;
        }
}

[root@nginx /etc/nginx/conf.d]$ vim proxy_params 
proxy_redirect  default;
# 默认情况下,NGINX在代理请求中重新定义两个头字段“Host”和“Connection”
proxy_set_header Host $http_host;
# 远程的IP
proxy_set_header X-Real-IP $remote_addr;
# 远程的IP传递到X-Forwarded-For里,后端服务器获取X-Forwarded-For就可知道谁通过代理请求的
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 要防止将头字段传递给代理服务器,可将其设置为空字符串
proxy_set_header  Accept-Encoding  "";


# 修改配置后检查配置信息是否正确
[root@nginx /etc/nginx]$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@nginx /etc/nginx]$ nginx -s reload    # 重新加载配置


本地访问测试

[root@localhost ~]# curl -I http://47.97.195.105/index.html
HTTP/1.1 200 OK
Server: nginx/1.14.1
Date: Sat, 24 Nov 2018 16:20:23 GMT
Content-Type: text/html
Content-Length: 36
Connection: keep-alive
Last-Modified: Sat, 24 Nov 2018 16:00:27 GMT
ETag: "5bf9759b-24"
Accept-Ranges: bytes

[root@localhost ~]# curl -I http://47.97.195.105/java.jsp
HTTP/1.1 200 
Server: nginx/1.14.1
Date: Sat, 24 Nov 2018 16:21:19 GMT
Content-Type: text/html;charset=UTF-8
Connection: keep-alive
Set-Cookie: JSESSIONID=28A6F6FB1C1E26139FD4726C6433CAE2; Path=/; HttpOnly

[root@mysql-slave /usr/share/nginx/html]# 

# 此时动态和静态资源都可以访问

1. 动态请求

在这里插入图片描述

- 静态请求

在这里插入图片描述

  1. 模拟动态服务故障时
# 停止Tomcat服务器,此时动态请求无法访问
[root@mysql-slave /soft/code/apache-tomcat-9.0.13/bin]# ./shutdown.sh 
Using CATALINA_BASE:   /soft/code/apache-tomcat-9.0.13
Using CATALINA_HOME:   /soft/code/apache-tomcat-9.0.13
Using CATALINA_TMPDIR: /soft/code/apache-tomcat-9.0.13/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /soft/code/apache-tomcat-9.0.13/bin/bootstrap.jar:/soft/code/apache-tomcat-9.0.13/bin/tomcat-juli.jar
[root@mysql-slave /soft/code/apache-tomcat-9.0.13/bin]# 

1. 动态请求已无法访问

在这里插入图片描述

- 静态请求仍然可以访问

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_31725371/article/details/84455532