CentOS 7.5 Nginx+Tomcat实现动静分离、负载均衡

一、环境准备

 

服务器名称 系统版本 预装软件 IP地址
Nginx服务器 CentOS 7 最小安装 Nginx 192.168.16.130
Web服务器A CentOS 7 最小安装 tomcat+jdk 192.168.16.136
Web服务器B CentOS 7 最小安装 tomcat+jdk 192.168.16.152
Web服务器B CentOS 7 最小安装 tomcat+jdk 192.168.16.153

 

二、架构图

三、部署过程

(一)Nginx 服务安装

安装相关依赖包

yum  install  wget  lrzsz  dos2unix  lsof  tree gcc-c++ pcre pcre-devel zlib zlib-devel gd-devel openssl openssl-devel gd-devel -y

 

2.  环境设置

ulimit -SHn 65535 //设置linux高负载参数

 

3. 创建用户及组

useradd www -s /sbin/nologin -M

 

4.  编译安装Nginx

 

#tar zxf nginx-1.10.2.tar.gz -C /usr/src/

#cd /usr/src/nginx-1.10.2/

# ./configure --prefix=/application/nginx-1.10.2 \

--with-http_gzip_static_module  \

--without-http_memcached_module --with-http_ssl_module --with-http_stub_status_module --user=www  --group=www \

#make && make install

# ln -s  /application/nginx-1.10.2  /application/nginx

 

5.  创建systemctl 系统Nginx 服务启动文件

vim /usr/lib/systemd/system/nginx.service

[Unit]

Description=nginx

After=network.target

 

[Service]

Type=forking

ExecStart=/application/nginx/sbin/nginx

ExecReload=/application/nginx/sbin/nginx -s reload

ExecStop=/application/nginx/sbin/nginx -s quit

PrivateTmp=true

[Install]

WantedBy=multi-user.target

 

6.   加入开机自启动并启动Nginx

 

#systemctl enable nginx.service

#systemctl start nginx.service

 

7.       启动和查看Nginx 启动状态

 

#systemctl restart nginx.service

#systemctl  status nginx.service

#ss -ntlp

 

8.       访问验证

Windows : 浏览器输入 http://192.168.168.16.130

Linux   : curl  http://192.168.16.130

 

(二)  tomcat + JDk 安装  三台(192.168.16.136、192.168.16.152、192.168.16.153)

 

#yum  安装 JDK

yum -y install java-1.8.0-openjdk

 

1.       解压 tomcat 包

[[email protected] ~]# tar  zxf apache-tomcat-8.0.52.tar.gz

 

2.       移动并更名

 

[[email protected] ~]# mv  apache-tomcat-8.0.52   /usr/local/tomcat8

 

3.       启动tomcat 和访问验证

[[email protected] ~]# cd /usr/local/tomcat8/bin/

[[email protected] bin]# ls

bootstrap.jar  catalina-tasks.xml            configtest.bat  digest.bat        setclasspath.sh  startup.bat      tomcat-native.tar.gz  version.bat

catalina.bat   commons-daemon.jar            configtest.sh   digest.sh         shutdown.bat     startup.sh       tool-wrapper.bat      version.sh

catalina.sh    commons-daemon-native.tar.gz  daemon.sh       setclasspath.bat  shutdown.sh      tomcat-juli.jar  tool-wrapper.sh

[[email protected] bin]# ./startup.sh

 

浏览器输入;http://192.168.16.153:8080

编写静态配置文件

 

在Tomcat的webapps目录下,新建一个文件夹drp,并将login.html放到drp文件夹里。

完整目录:/usr/local/tomcat8/webapps/drp

#cat  login.html

<html>

<head>

<meta http-equiv="content-type" content="text/html;charset=utf8" />

</head>

<body>

<h1>您正在访问:192.168.16.152</h1>

</body>

</html

注:以上步骤都在其他两台服务器上操作一遍

 

1.       启动tomcat 访问验证

分别输入url:

http://192.168.16.136:8080/drp/login.html

http://192.168.16.152:8080/drp/login.html

http://192.168.16.153:8080/drp/login.html

 

(三) nginx 负载均衡配置(完整配置)

1.nginx.conf  配置文件

user nobody;

#工作进程个数,一般跟服务器cpu核数相等,或者核数的两倍

worker_processes 2;

 

#单个进程最大连接数

events{

worker_connections 1024;

}

 

http{

 

keepalive_timeout 65;

gzip on;

#服务器集群

upstream mycluster{

#集群有几台服务器即可配置几台,weight表示权重,权重越大被访问到的几率越大

#这里添加的是上面启动好的两台Tomcat服务器

server 192.168.16.136:8080 weight=1;

server 192.168.16.152:8080 weight=1;

server 192.168.16.153:8080 weight=1;

}

 

#nginx基本配置

server{

listen 8088;    #端口号

server_name 192.168.16.130; #服务名

location /{

#将访问请求转向至服务器集群,mycluster和上面upstream mycluster 对应

proxy_pass http://mycluster;

# 真实的客户端IP

proxy_set_header   X-Real-IP        $remote_addr;

# 请求头中Host信息

proxy_set_header   Host             $host;

# 代理路由信息,此处取IP有安全隐患

proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

# 真实的用户访问协议

proxy_set_header   X-Forwarded-Proto $scheme;

}

 

error_page   500 502 503 504  /50x.html;

location = /50x.html {

root   html;

}

 

}

}

2.负载均衡测试验证

 

http://192.168.16.130:8088/drp/login.html

不断刷新浏览器,访问的地址一直在变化,可以看到负载均衡的效果已经实现。

 

(四)、动静分离(完整配置)

什么是动静分离

为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源比如图片,js,css等文件,我们可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时,代理服务器就可以直接处理,而不用将请求转发给后端服务器。用户请求的动态文件比如servlet,jsp则转发给Tomcat,Jboss服务器处理,这就是动静分离。这也是反向代理服务器的一个重要的作用。

本文的动静分离主要是通过nginx+tomcat来实现,其中nginx处理图片、html、JS、CSS等静态文件,tomcat处理jsp、servlet等动态请求。

-------------------------------------------------------------------------------

 

创建 JSP动态页面

Jsp放到drp目录中,添加一个图片标签,加载Tomcat根目录下 webapps/drp/img/test.jpg图片文件。启动Tomcat测试是否能够访问。

# cd  /usr/local/tomcat8/webapps/drp

#cat index.jsp

<%@ page language="java" contentType="text/html; charset=utf8"

pageEncoding="utf8"%>

<HTML>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf8">

<title>Nginx动静分离测试</title>

</head>

<body>

<h1>您正在访问:192.168.16.136</h1>

<img src="/drp/img/test.jpg"  alt="test" />

</body>

</html>

浏览器输入网址:http://192.168.16.152:8080/drp/index.jsp

(五)、对Nginx进行配置

通过配置location,对访问的请求进行拦截,①②都需要配置。

 全部的请求均转发给Tomcat进行处理

location / {

proxy_next_upstream http_502 http_504 error timeout invalid_header;

proxy_pass http://mycluster;

# 真实的客户端IP

proxy_set_header   X-Real-IP        $remote_addr;

# 请求头中Host信息

proxy_set_header   Host             $host;

# 代理路由信息,此处取IP有安全隐患

proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

# 真实的用户访问协议

proxy_set_header   X-Forwarded-Proto $scheme;

}

② 个别的请求比如:html,js,css等静态资源请求,由Nginx进行处理

#静态文件交给nginx处理

location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$

{

root /usr/local/webapps;

expires 30d;

}

#静态文件交给nginx处理

location ~ .*\.(js|css)?$

{

root /usr/local/tomcat8/webapps/drp;

expires 1h;

}

 

root /usr/local/webapps; 这段代码的意思是指定Nginx访问的目录,即静态资源所在的目录。

expires 30d; 指定这些资源文件在客户端浏览器的缓存时间。30d指的是30天,1h指的是1小时。

 

 

 

 

 

 

 

(六)、完整的nginx 配置文件(说明)

 

user nobody;

 

worker_processes 2;

 

events{

worker_connections 1024;

}

 

http{

#设置默认类型为二进制流

default_type    application/octet-stream;

 

server_names_hash_bucket_size   128;

#指定来自客户端请求头的headerbuffer大小,设置为32KB

client_header_buffer_size   32k;

#指定客户端请求中较大的消息头的缓存最大数量和大小,这里是4个32KB

large_client_header_buffers 4 32k;

#上传文件大小

client_max_body_size 356m;

#nginx的HttpLog模块指定,指定nginx日志的输出格式,输出格式为access

log_format access '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

#access日志存在未知

access_log  /var/log/nginx/access.log   access;

#开启高效模式文件传输模式,将tcp_nopush和tcp_nodelay两个指另设置为on,用于防止网络阻塞。

sendfile    on;

tcp_nopush  on;

tcp_nodelay on;

#设置客户端连接保持活动的超时时间

keepalive_timeout   65;

server_tokens   off;

#客户端请求主体读取缓存

client_body_buffer_size 512k;

proxy_connect_timeout   5;

proxy_send_timeout      60;

proxy_read_timeout      5;

proxy_buffer_size       16k;

proxy_buffers           4 64k;

proxy_busy_buffers_size 128k;

proxy_temp_file_write_size 128k;

 

#开启gzip

gzip    on;

#允许压缩的最小字节数

gzip_min_length 1k;

#4个单位为16k的内存作为压缩结果流缓存

gzip_buffers 4 16k;

#设置识别HTTP协议版本,默认是1.1

gzip_http_version 1.1;

#gzip压缩比,可在1~9中设置,1压缩比最小,速度最快,9压缩比最大,速度最慢,消耗CPU

gzip_comp_level 2;

#压缩的类型

gzip_types text/plain application/x-javascript text/css application/xml;

#让前端的缓存服务器混村经过的gzip压缩的页面

gzip_vary   on;

 

upstream mycluster{

server 192.168.16.136:8080 weight=1;

server 192.168.16.152:8080 weight=1;

server 192.168.16.152:8080 weight=1;

}

 

server{

listen 8088;

server_name 192.168.16.130;

charset    utf-8; #设置编码为utf-8;

 

#location / {

#    root   html;

#    index  index.html index.htm;

#}

 

#location ~ .*\.(jsp|do|action)$

location / {

proxy_next_upstream http_502 http_504 error timeout invalid_header;

proxy_pass http://mycluster;

# 真实的客户端IP

proxy_set_header   X-Real-IP        $remote_addr;

# 请求头中Host信息

proxy_set_header   Host             $host;

# 代理路由信息,此处取IP有安全隐患

proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

# 真实的用户访问协议

proxy_set_header   X-Forwarded-Proto $scheme;

}

#静态文件交给nginx处理

location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$

{

root  /usr/local/webapps;

expires 30d;

}

#静态文件交给nginx处理

location ~ .*\.(js|css)?$

{

root /usr/local/webapps;

expires 1h;

}

error_page   500 502 503 504  /50x.html;

 

location = /50x.html {

root   html;

}

 

}

}

(七)、测试动静分离

小结

从上述的实例可以看到已经初步实现了Nginx动静分离的功能,在配置动静分离后,用户请求你定义的静态资源,默认会去nginx的发布目录请求,而不会到后端请求,这样可以提高网站响应速度,减轻真实Web服务器的负载压力。

不过在开发环境下,为了便于开发,咱们的静态资源和代码还是放在一起的,等开发测试完成,才会将完成的完整程序部署到生成环境上,然而程序代码和静态资源是分别放置到不同的服务器上的。

XVTMIE

白茶清欢无别事,我在等风也等你。

相关推荐

Leave a Reply

Your email address will not be published. Required fields are marked *

微信扫一扫,分享到朋友圈

CentOS 7.5 Nginx+Tomcat实现动静分离、负载均衡
返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close