nginx 联合tomcat实现动静分离

前言

Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat、Resin出来动态页面。

动静分离从目前实现角度来讲大致分为两种:

一种是纯粹的把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;这种的实现方案比较简单,缺点就是需要额外的配置若干台服务器。

另外一种方法就是动态跟静态文件混合在一起发布,通过nginx代码来分开。这样也是本次课程要讲解的,具体怎么来实现呢,下面会介绍到,通过location指定不同的后缀名实现不同的请求转发。

通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体Expires定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。expires的设定时间需要我们根据自身的业务情况来具体设定。

此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用Expires来缓存),假如我们设置为3d,表示在这3天之内访问这个URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200。

正文

本文默认是在配置好tomcat 和 nginx 的基础之上的,具体配置方法参照其他博文。

1.配置好 nginx.conf文件

在http模块模块中加入如下代码

upstream mylocal{
		server 106.12.129.252:8080;
	}

mylocal为反向代理群的名字,一个local下面可以有很多的server

106.12.129.252:8080,为我自己的服务器的地址,8080位我设定的tomcat的监听端口

在server模块模块中加入如下代码
server代码中的其他代码我们不列出,下面是为了实现动静分离而添加的新代码。

location /
		{
			proxy_next_upstream http_502 http_504 error timeout invalid_header;
			proxy_set_header Host  $host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_pass https://mylocal;
		}
		#动态部分,以php或者jsp结尾的
		location ~ .*\.(php|jsp|cgi|shtml)?$
		{
			proxy_set_header Host  $host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_pass  https://mylocal;#跳转到我们设置的反向代理部分,tomcat部分
		}
		
    #静态资源部分
		location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
		{
			#静态资源存放目录,设定缓存时间为3天
			root /usr/share/nginx/html/;
			expires      30d;
		}
	

配置静态资源
我们在/usr/share/nginx/html/下添加静态文件,如下:

重启nginx服务器

nginx -s reload #reload方式是平滑的启动nginx

在浏览器输入域名验证

此域名是我们106.12.129.252对应的域名,可知,已经成功的被反向代理到了tomcat的8080端口,实现了访问动态资源跳转到动态页面。

在浏览器中访问静态资源,如下,我们访问 index.html文件,出现如下界面

表明已经成功实现访问静态资源跳转到静态资源页。

You may also like...


Warning: Division by zero in /var/www/html/giserdqy/wp-includes/comment-template.php on line 1457

发表评论