版权声明:©来自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. 动态请求
- 静态请求
- 模拟动态服务故障时
# 停止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. 动态请求已无法访问
- 静态请求仍然可以访问