写在前面的话
关于nginx和jetty之间的事儿是三少奶奶写的一个系列,每个系列环环相扣,所以强烈建议读者从第一话开始食用,希望能对你有所帮助
nginx优点之一就是能按客户端不同的请求,实现合理化的处理和转发,减轻对服务器资源的压力,例如:当用户访问服务器中的静态资源时,nginx可以避免请求jetty,tomcat等服务器,直接访问硬盘中的静态资源。
同通阅读本系列的前置博文,我们实现了为nginx安装https证书和强制http请求跳转到https请求,一下是相关链接
本文将介绍如何使用nginx实现对静态资源的分离
一:对服务器中图片的分离操作
前置环境:
1,三少奶奶把项目放到了jetty的weapps文件夹下,并且项目的图片统一存储在weapps下的upload文件中。
2,jetty服务器中监听的是8181端口
步骤一:当直接使用8181端口进行访问项目中的图片时,url是:localhost:8181/upload/2019-01-02/XXX.jpg
步骤二:我们在nginx.conf文件中添加以下代码块,便可实现访问服务器中图片时不经过jetty
location ^~ /upload/
{
expires 7d; #缓存7天
alias C:/Users/Administrator/Desktop/jetty-distribution-9.4.18.v20190429/webapps/upload/;
}
解释:location 代表着客户请求的url地址 其后面跟着的是正则表达式 具体含义和用法 建议大家在csdn中搜索。这段代码的含义是 当客户端请求的url是 www.demo.xyz/upload/XXXXX 时,将会直接请求alias所指向的路径,
举例:客户端请求url : www.demo.xyz/upload/2019-08-02/1.jpg; 上述代码将会被匹配,nginx将通过alias重新拼接请求路径,
新的请求路径为 C:/Users/Administrator/Desktop/jetty-distribution-9.4.18.v20190429/webapps/upload/2019-08-02/1.jpg;
提示:红色部分代表着拼接的内容
同理可得:想要客户端访问服务器中的css,js等资源时,不经过服务器,读者只需要把root后面的地址修改成 css或者js等文件在硬盘上的位置即可
完整代码如下
#user nobody;
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;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
server {
listen 80;
server_name www.demo.xyz; #备案域名
rewrite ^ https://$http_host$request_uri? permanent;
}
server {
listen 443 ssl;
server_name www.demo.xyz; #备案域名
keepalive_timeout 70;
ssl_certificate 1_www.demo.xyz_bundle.crt; #申请的域名证书
ssl_certificate_key 2_www.demo.xyz.key; #申请的域名证书
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;preload" always;
location /
{
proxy_pass http://localhost:8181/;
}
location ^~ /upload/
{
expires 7d; #缓存7天
alias C:/Users/Administrator/Desktop/jetty-distribution-9.4.18.v20190429/webapps/upload/;
}
location ^~ /myproject/plugins/
{
expires 7d;
# 所有css和js文件 在硬盘中的位置
alias C:/Users/Administrator/Desktop/jetty-distribution-9.4.18.v20190429/webapps/myproject/WEB-INF/static/plugins/;
autoindex on;
}
}
}
总结:通过上述的配置文件,我们启动nginx后 在浏览器中输入对应域名,就可以以https的方式访问到我们jetty服务器上的内容,但不巧的是,没有跳转到运行在jetty上的项目,具体如何实现,用户输入域名就能跳转到我们运行再jetty上的项目呢?休息5分钟,三少奶奶将附上相关链接