详解Ngigx+Tomcat配置动静分离,负载均衡

  

首先我们需要知道什么是动静分离和负载均衡。

  • 动静分离:在一个网站中,经常会同时存在静态文件和动态请求,而静态文件的请求相对较少、访问速度也相对较快,而动态请求需要服务器进行处理,速度相对较慢。动静分离就是将静态文件和动态请求分别处理,静态文件直接返回给客户端,而动态请求则让服务器进行处理。
  • 负载均衡:在高并发的情况下,单个服务器的负载可能达到极限,这时候我们可以使用多台服务器进行负载均衡。负载均衡可以将请求分发到多台服务器上,从而达到扩容、降低单个服务器压力的目的。

接下来我们详细讲解如何配置动静分离和负载均衡。

配置动静分离

我们以nginx作为反向代理服务器,以Tomcat作为Java Web服务器为例。

  1. 首先需要在nginx配置文件中,添加以下配置:
# 静态文件存放路径
root /usr/local/nginx/html;

# 静态文件url和实际文件存放路径映射
location /images {
    alias /usr/local/nginx/html/images/;
}

location /css {
    alias /usr/local/nginx/html/css/;
}

# 动态请求转发到Tomcat服务器
location / {
    proxy_pass http://127.0.0.1:8080;
}

以上配置意味着,静态文件存放路径为/usr/local/nginx/html,而静态文件在url中以/images/css的形式呈现(例如:http://example.com/images/logo.png),我们需要在nginx配置文件中将这个url和实际文件存放路径映射起来。

动态请求会被转发到本机8080端口的Tomcat服务器上进行处理。

  1. 然后需要修改Tomcat服务器的server.xml配置文件,将http和ajp监听的端口号修改如下:
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

<Connector port="8009" protocol="AJP/1.3"
           redirectPort="8443" />

以上配置意味着,Tomcat服务器的http监听端口为8080,ajp监听端口为8009。

  1. 最后需要在Tomcat服务器的web.xml文件中,将静态文件的缓存时间设置长一些:
<mime-mapping>
    <extension>js</extension>
    <mime-type>application/javascript</mime-type>
</mime-mapping>

...

<static-resource>
    <file-name>*.js</file-name>
    <url-pattern>/js/*</url-pattern>
    <cache-control>max-age=31536000</cache-control>
</static-resource>

...

<mime-mapping>
    <extension>css</extension>
    <mime-type>text/css</mime-type>
</mime-mapping>

...

<static-resource>
    <file-name>*.css</file-name>
    <url-pattern>/css/*</url-pattern>
    <cache-control>max-age=31536000</cache-control>
</static-resource>

...

<mime-mapping>
    <extension>png</extension>
    <mime-type>image/png</mime-type>
</mime-mapping>

...

<static-resource>
    <file-name>*.png</file-name>
    <url-pattern>/images/*</url-pattern>
    <cache-control>max-age=31536000</cache-control>
</static-resource>

以上配置意味着,当响应头中包含“Cache-Control:max-age=31536000”时,客户端对静态文件的请求不用每次都向服务器请求数据,可以直接从本地缓存中读取。

配置负载均衡

首先我们需要准备多台Tomcat服务器,然后在nginx的配置文件中添加如下配置:

# 负载均衡配置
upstream tomcat_cluster {
    server 127.0.0.1:8080 weight=1;
    server 127.0.0.1:8081 weight=1;
    server 127.0.0.1:8082 weight=1;
}

# 静态文件存放路径
root /usr/local/nginx/html;

# 静态文件url和实际文件存放路径映射
location /images {
    alias /usr/local/nginx/html/images/;
}

location /css {
    alias /usr/local/nginx/html/css/;
}

# 动态请求转发到Tomcat服务器集群
location / {
    proxy_pass http://tomcat_cluster;
}

以上配置中upstream定义了一个Tomcat服务器集群,其中包含三台服务器,权重均为1。proxy_pass指令将动态请求转发到tomcat_cluster中进行负载均衡。

通过以上配置,我们就完成了动静分离和负载均衡的配置。

相关文章