NGINX动静分离
NGINX动静分离
为什么要做动静分离?
Nginx是当下最热的Web容器,网站优化的重要点在于静态化网站,网站静态化的关键点则是是动静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们则根据静态资源的特点将其做缓存操作。
让静态的资源只走静态资源服务器,动态的走动态的服务器
Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。
- 对于静态资源比如图片,js,css等文件,我们则在反向代理服务器nginx中进行缓存。这样浏览器在请求一个静态资源时,代理服务器nginx就可以直接处理,无需将请求转发给后端服务器tomcat。
- 若用户请求的动态文件,比如servlet,jsp则转发给Tomcat服务器处理,从而实现动静分离。这也是反向代理服务器的一个重要的作用。
动静分离只有好处,即使动态服务不可用,但静态服务不会受到影响
环境准备
10.0.0.5 负载均衡
10.0.0.7 静态资源
10.0.0.8 动态资源
配置
静态资源配置
[root@web01 /etc/nginx/conf.d]# cat ds_oldboy.conf
server {
listen 80;
server_name ds.oldboy.com;
root /soft/code; #底下如果没配root 就看这一条
index index.html;
location ~* .*\.(png|jpg|gif)$ {
root /soft/code/images;
}
}
[root@web01 /etc/nginx/conf.d]# nginx -t
[root@web01 /etc/nginx/conf.d]# mkdir /soft/code/images -p
[root@web01 /etc/nginx/conf.d]# echo "ceshi" > /soft/code/index.html #静态
[root@web01 /etc/nginx/conf.d]# cd /soft/code/images/
[root@web01 /soft/code/images]# rz -E #拖个动图上去 1.gif
rz waiting to receive.
[root@web01 /soft/code/images]# systemctl restart nginx
配置动态资源
[root@web02 ~]# yum install -y tomcat #只是为了掩饰才这么装 一般不这么装低配
[root@web02 /usr/share/tomcat/webapps/ROOT]# vim java_test.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<HTML>
<HEAD>
<TITLE>JSP Test Page</TITLE>
</HEAD>
<BODY>
<%
Random rand = new Random();
out.println("<h1>Random number:</h1>");
out.println(rand.nextInt(99)+100);
%>
</BODY>
</HTML>
直接ip地址访问就可以
里面的数字是刷新就会变
配置负载均衡
[root@lb01 /etc/nginx/conf.d]# cat proxy_ds.conf
upstream static {
server 172.16.1.7:80;
}
upstream java {
upstream static {
server 172.16.1.7:80;
}
upstream java {
}
server {
listen 80;
server_name ds.oldboy.com;
location ~* .*\.(png|gif|jpg)$ {
proxy_pass http://static;
proxy_set_header Host $http_host;
}
location ~ \.jsp {
proxy_pass http://java;
proxy_set_header Host $http_host;
}
}
[root@lb01 /etc/nginx/conf.d]# nginx -t
[root@lb01 /etc/nginx/conf.d]# systemctl restart nginx
'域名解析
10.0.0.5 ds.oldboy.com
根据来源设备
`服务端配置
[root@web01 ~]# cat /etc/nginx/conf.d/sj.conf
server {
listen 9090;
location / {
root /code/android;
index index.html;
}
}
server {
listen 9091;
location / {
root /code/iphone;
index index.html;
}
}
server {
listen 9092;
location / {
root /code/pc;
index index.html;
}
}
[root@web01 /etc/nginx/conf.d]# mkdir -p /code/{android,iphone,pc}
[root@web01 /etc/nginx/conf.d]# echo "PC $(hostname)" > /code/pc/index.html
[root@web01 /etc/nginx/conf.d]# echo "Iphone $(hostname)" > /code/iphone/index.html
[root@web01 /etc/nginx/conf.d]# echo "Android $(hostname)" > /code/android/index.html
[root@web01 /etc/nginx/conf.d]# systemctl restart nginx
`lb服务器nginx配置
[root@lb01 /etc/nginx/conf.d]# cat /etc/nginx/conf.d/sj.conf
upstream iphone_pools {
server 172.16.1.7:9091;
}
upstream android_pools {
server 172.16.1.7:9090;
}
upstream pc_pools {
server 172.16.1.7:9092;
}
server {
listen 80;
server_name sj.oldboy.com;
location / {
#默认跳转至 pc 站点
proxy_pass http://pc_pools;
#如果客户端是 Iphone 则跳转到 iphone 的资源池
if ($http_user_agent ~* "Iphone") {
proxy_pass http://iphone_pools;
}
#如果客户端是 Android 则跳转到 android 的资源池
if ($http_user_agent ~* "Android"){
proxy_pass http://android_pools;
}
#如果客户端是 IE 浏览器,则返回 403 错误。
if ($http_user_agent ~* "msie"){
return 403;
}
include proxy_params;
}
}
[root@lb01 /etc/nginx/conf.d]# nginx -t
[root@lb01 /etc/nginx/conf.d]# systemctl restart nginx
'域名解析
10.0.0.5 sj.oldboy.com
后面汇合成一个网页 动态+静态 之后可以停掉一台静态或动态做测试
代码太多懒得写