Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat处理动态页面。
动静分离从目前实现角度来讲大致分为两种,一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;另外一种方法就是动态跟静态文件混合在一起发布,通过Nginx来分开。
通过location指定不同的后缀名实现不同的请求转发。通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。
Expires:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。如果经常更新的文件,不建议使用 Expires来缓存。
超出了缓存时间,浏览器会发送一个请求,如果比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200。
在虚拟机根目录下新建一个www文件夹,文件夹下放一个static文件夹,static文件夹里放入test.html,当做一个静态资源。
修改Nginx的配置文件,修改server的内容如下。

server {
listen 80;
server_name 192.168.0.123;

#charset koi8-r;

#access_log logs/host.access.log main;
# 根据后缀匹配静态资源,将请求转发到/www/路径下
location ~* \.(jpg|png|css|js|html)$ {
# 使用root+请求路径,在系统里查找资源
# 比如请求的是http://192.168.0.123/static/test.html,请求路径是:/static/test.html,于是查找路径是:/www/static/test.html
root /www/;
}
# 根据请求路径匹配静态资源,也是采用root+请求路径的方式查找资源的,请求是:http://192.168.0.123/static/test.html,请求路径是:/static/test.html,root+请求路径是:/www/static/test.html
location /static/ {
root /www/;
# 开启目录浏览功能,请求是目录的时候,会显示目录下的内容
autoindex on;
# 过期时间是5天,未过期的时候浏览器请求会走缓存,状态码304
expires 5d;
}

#
#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}