Nginx 专栏目录
- 第一篇 nginx介绍和下载安装
- 第二篇 nginx 作为http服务器及详细配置项上,Event等属性配置关系详解
- 第三篇 nginx 作为http服务器及详细配置项下,附8种负载均衡策略
- 第四篇 nginx 配置的实际应用:伪静态,反向代理,动静分离,防盗链,图片缓存,gzip图片压缩等
前面文章中详细讲解了各类属性代表含义,实际生产中我们可能需要更多的配置技巧完成实际的功能,我们这篇文章就总结一下常见的配置方法和实际应用
1. 伪静态
比如我们的博客显示页面是动态生成的,比如需要使用GET的方式在url上注明文章的id号,具体url格式:https://blog.csdn.net/qq_35530042/article/details?articleId=109734961 ,然后伪静态
将动态生成页面伪装成静态页面。
将原本的请求路径改为通过 https://blog.csdn.net/qq_35530042/article/details/109734961 的方式访问。
这个技术可以通过spring 的参数路径来实现,同样可以使用我们的nginx 伪静态实现,在nginx反向代理后台服务器,外部直接通过80端口访问nginx。
nginx重写url,将重写后的url 转发给后台服务器,与此同时前端的浏览器的目的url还是原来的https://blog.csdn.net/qq_35530042/article/details/109734961 。
优点:
- seo 更友好,静态化路径会更好收录
- 更安全,不容易被针对地址所攻击
示例:
将 http://192.168.203.102/article/detail?articleId=123adsas
改为 http://192.168.203.102/article/detail/123adsas.html
server {
listen 80;
server_name localhost;
rewrite_log on;
access_log /app/log/nginx/host.access.log main;
error_log /app/log/nginx/host.error.log notice;
location / {
proxy_pass http://127.0.0.1:8080;
rewrite ^(.*)/article/detail/(\w+).html$ $1/article/detail?articleId=$2 last;
}
}
rewrite_log on; error_log /app/log/nginx/host.error.log notice;
之后可以更好的看到重写规则方便调试
这一步是关键
rewrite ^(.*)/article/detail/(\w+).html$ $1/article/detail?articleId=$2 last;
将匹配 ^(.*)/article/detail/(\w+).html$
然后把其替换成 $1/article/detail?articleId=$2
, 并且将正则匹配到的 第一个和第二个的值拼接上去 , 最后last 结束
如果是很多或者针对一个网站这样伪静态 可以把这些规则分组写到单独的文件里面然后再引用进来
2. 反向代理与负载均衡
负载均衡是指定一系列的后端服务,然后通过指定的策略去负载,最后在location 中指定这个负载均衡节点 , 完成反向代理与负载均衡
示例:
有3个tomcat 部署在服务器 192.168.35.101 192.168.35.102 192.168.35.103 上面,其服务内容都是一样的,需要配置一个地址 供用户统一调用地址 , 并且能够在三个服务间自动均衡访问压力
upstream balance.com{
server 192.168.35.101:8080;
server 192.168.35.102:8080;
server 192.168.35.103:8080;
}
server {
listen 801;
server_name localhost;
error_log /app/log/nginx/host.error.log notice;
access_log /app/log/nginx/host.access.log main;
location / {
proxy_pass http://balance.com;
}
}
3. 动静分离
动静分离:动态资源(jsp、ftl、thymeleaf)与静态资源(js、css、img)分开部署。
其中nginx 对静态资源的访问性能远高出tomcat 等应用服务器,同时nginx 可以提供缓存和gzip等扩展,在高并发情况下还可以再进行集群避免单点故障
示例:
把Java web 应用中的gif|jpg|jpeg|png|bmp|swf
等结尾的静态资源都走 nginx 部署
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
root /app/root/;
}
这样就可以把所有这些结尾的,定位到对应网站根目录
4. 防盗链
随着网络开放,可能会出现别人把你的静态资源直接拿去用在他们的一些网站上面,但是占用的却是你网站的流量与带宽 , 我们当然要拒绝这种白嫖了
原理: 在网站中请求资源时浏览器会自动带上 referer
请求头,这个请求头就是当前站点的域名信息 ,我们可以根据这个判断当前强求资源来自哪里,是不是自己的网站上面来的
我们可以直接配置,如下:
针对几个后缀验证,判断是不是自己的域名 , 未通过校验可以直接返回403 或者 给个默认的放盗链警告图
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.baidu.com baidu.com ;
if ($invalid_referer) {
# rewrite ^/ http://www.jzxue.com/retrun.html;
return 403;
}
}
5. 图片缓存
https://www.cnblogs.com/jun1019/p/6260662.html
https://www.jb51.net/article/82200.htm
图片等静态资源由于经常加载并且并发大,虽然nginx 处理静态资源强,但是该优化的还是得优化,开启缓存之后可以进一步优化性能,同时 缓存方案有两种:
proxy_cache
proxy_store