Nginx动静分离实现

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

一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案。

另一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使 浏览器缓存过期时间,减少与服务器之前的请求和流量。

本案例演示架构

 

1、创建项目

要演示动静分离就得有项目,因为个人比较懒,我们直接用SpringMVC官方的Demo。大家可以通过git clone到本地

git clone https://github.com/spring-projects/spring-mvc-showcase.git

2、项目打包

代码下载到本地之后,用Eclipse或Idea打一个war包,默认包名spring-mvc-showcase.war

3、项目部署

将spring-mvc-showcase.war分别上传至两台tomcat服务器。然后通过bin/startup.sh启动。

4、删除Tomcat下该项目的静态资源

tomcat启动后,会在webapps下生成spring-mvc-showcase文件夹,spring-mvc-showcase下面有三个目录META-INF,resources,WEB-INF。

因为我们之后会把静态资源目录resources放到nginx服务器上,所以这里直接把两台tomcat下的resources全部删除。

5、静态资源部署

登录nginx服务器,进入nginx安装目录/usr/local/nginx/

在/usr/local/nginx/下创建静态资源目录:static_resources

将spring-mvc-showcase项目下的resources目录拷贝到static_resources下。完整目录结构,千万注意目录不要搞错了。

[root@test1 resources]# pwd
/usr/local/nginx/static_resources/spring-mvc-showcase/resources
[root@test1 resources]# ll
总用量 40
-rwxrwxrwx 1 root root  1571 3月  25 2021 form.css
drwxrwxrwx 3 root root  4096 3月  24 19:15 jquery
drwxrwxrwx 3 root root  4096 3月  24 19:15 jqueryform
drwxrwxrwx 3 root root  4096 3月  24 19:15 jqueryui
-rwxrwxrwx 1 root root 17867 3月  25 2021 json2.js
drwxrwxrwx 2 root root  4096 3月  24 19:15 messages

6、修改nginx.conf配置

user  root;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    upstream web_servers {
        server 172.16.43.103:8080;
        server 172.16.43.104:8080;
    }
    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://web_servers;
        }

        location ~.*\.(html|js|css|svg|jpg|jpeg|png|bmp|gif|ico|mp3|mid|wma|mp4|swf|flv|rar|zip|txt|doc|ppt|xls|pdf)$ {   
            root    /usr/local/nginx/static_resources;  
            expires    7d;
        }
    }
}

7、重新加载Nginx

[root@test1 sbin]# ./nginx -s reload

8、验证动静分离成果

tomcat服务地址:http://172.16.43.104:8080/spring-mvc-showcase/

nginx服务地址:http://172.16.43.103/spring-mvc-showcase/(nginx端口默认80)

先访问tomcat地址,可以看到样式表没有加载成果。页面非常丑陋,但是点击/simple,/simple/revisited接口是可以正常访问的。

 

 

 

通过Nginx访问,可以看到整个系统的页面效果都能够正常显示(静态资源加载正常),点击simple接口,也可以获取到返回值《Hello world!》(动态资源访问正常)

 

 

 

 

 几个注意事项:如果访问中出现403 forbbion异常。有可能/usr/local/nginx/static_resources/spring-mvc-showcase/resources权限不够,可以通过chmod 777 static_resources授权。

授权后还不行,修改nginx.conf文件第一行为user root

 

 

结束!

posted @ 2021-03-25 15:09  shileishmily  阅读(132)  评论(0编辑  收藏  举报