Nginx 配置图片反向代理
Nginx 配置图片静态代理
文章目录
- Nginx 配置图片静态代理
- location 语法规则
- 业务场景:
- 配置方式一:
- 配置方式二:
- 注意:
location 语法规则
location [=|~|~*|^~] /uri/ {·····
}
location 后接的匹配规则含义
= 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)~ 开头表示区分大小写的正则匹配~* 开头表示不区分大小写的正则匹配!~ 区分大小写不匹配的正则!~* 不区分大小写不匹配的正则/ 通用匹配,任何请求都会匹配到
当我们有多个 location 配置的情况下,其匹配顺序为:
首先匹配 “=”,其次匹配 “^~”, 其次是按文件中顺序的正则匹配,最后是交给 “/” 通用匹配。
当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
比如现在同时存在如下所示匹配规则
location = / {#规则A
}
location = /login {#规则B
}
location ^~ /static/ {#规则C
}
location ~ .(gif|jpg|png|js|css)$ {#规则D
}
location ~* .png$ {#规则E
}
location !~ .xhtml$ {#规则F
}
location !~* .xhtml$ {#规则G
}
location / {#规则H
}
那么产生的效果如下
访问根目录/ 比如 http://localhost/ 将匹配规则A访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H访问 http://localhost/static/a.html 将匹配规则C访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用,而 http://localhost/static/c.png 则优先匹配到规则C访问 http://localhost/a.PNG 则匹配规则E,而不会匹配规则D,因为规则E不区分大小写访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.XHTML不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到访问 http://localhost/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在
所以在实际应用中,至少需要有三个匹配规则定义,如下:
# 直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
# 这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {proxy_pass http://localhost:8080/index
}# 第二个必选规则是处理静态文件请求,这是 nginx 作为 http 服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {root /webroot/static/;
}
location ~* .(gif|jpg|jpeg|png|css|js|ico)$ {root /webroot/res/;
}# 第三个规则就是通用规则,用来转发动态请求到后端应用服务器
# 非静态文件请求就默认是动态请求,自己根据实际把握
# 毕竟目前的一些框架的流行,带 .php, .jsp 后缀的情况很少了
location / {proxy_pass http://localhost:8080/
}
业务场景:
假如现在Linux服务器 home/file下有两个目录,一个是img目录另一个是log目录,img目录下有一个名为:a.jpg的图片,现在我们要通过
域名/file/img/a.jpg
来访问这张图片。
配置方式一:
#正则匹配图片的url,匹配成功后到指定root的路径下查找location ~.*(file).(img|images)*\.(gif|jpg|jpeg|png)$ {root /home/autoindex on;}
配置方式二:
location ~ /file/img/ {root /home/;autoindex on;}
假设这里直接用服务器的IP访问,IP = 47.100.256.36 ,不绑定域名的情况下。
请求地址为:http://47.100.256.36/file/img/a.jpg,则Nginx 会到服务器的:home/file/img/里去找图片。
注意:
这里最大的坑,就在于,root指的是文件的绝对路径,但是这个绝对路径不是时刻都要写全的,他是和location后面的路径拼接形成一个完成的文件路径。假如配置成:
location ~ /file/img/ {root /home/file/img/;autoindex on;}
或者:
location ~.*(file).(img|images)*\.(gif|jpg|jpeg|png)$ {root /home/file/img/;autoindex on;}
直接404,因为访问http://47.100.256.36/file/img/a.jpg
的时候,实际上是去/home/file/img/目录下找file目录下的img目录下的文件。不能理解成location后面的路径是用作匹配,url中有这个路径就去root中找文件,要理解成它们描述的是一个包含关系。
有一种情况是可以把root路径写全的,比如默认的正则匹配图片代理:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {root /home/file/img/; #指定图片存放路径}
以上这种写法,访问图片必须是:域名或ip/文件名.拓展名的形式。因为你把root写全了!
最重要的是,假如你现在服务器上跑着一个前端项目,前端项目中肯定有很多静态的文件,比如网页中背景图。你没配置图片代理时,你访问你项目目录下的图片不会走代理,访问是正常的。但如果你像上面那样配置了,完犊子,直接404,因为你访问啥图片都能被它匹配上,因为上面那种写法相当于是根据扩展名匹配。不用纠结太多,你只要记住:上面那种root绝对路径写全的,只能用在一个项目中所有图片都在一个root下。真正项目中根本不可能,所有别那么干。哦,你非那么干也行,比如你/home/wwwroot/agriculture.ruanwe.com/static/img/下有一张名为a.jpg的图片,你想通过:域名或ip/static/img/文件名.拓展名的方式访问,再配一个location就行:
location ~ /static/img/ { root /home/wwwroot/agriculture.ruanwe.com/; autoindex on;}
注意:location后面那个小波浪线 ~不能省略,如果省略,就成了普通配置,优先级就低了,就不走这个匹配规则,走上面根据扩展名匹配那个规则了。
或者:
location ~ .*(static).(img)*\.(gif|jpg|jpeg|png|bmp|swf)$ {root /home/wwwroot/agriculture.ruanwe.com/; }
成了普通配置,优先级就低了,就不走这个匹配规则,走上面根据扩展名匹配那个规则了。
或者:
location ~ .*(static).(img)*\.(gif|jpg|jpeg|png|bmp|swf)$ {root /home/wwwroot/agriculture.ruanwe.com/; }
它们两个是一个效果。
Nginx 配置图片反向代理相关推荐
- Nginx配置实例-反向代理实例:根据访问的路径跳转到不同端口的服务中
场景 Ubuntu Server 16.04 LTS上怎样安装下载安装Nginx并启动: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detai ...
- history模式 nginx配置_nginx反向代理部署vue项目(history模式)的方法
前言: 根据标题我们要区分出两个信息 1. history 模式部署 ( vue的路由模式如果使用history,刷新会报404错误.) 2. Nginx 做反向代理 问题1思考: vue-route ...
- 【Nginx】Nginx配置实例-反向代理
1. 反向代理实例一 实现过程 1. 启动一个 tomcat,浏览器地址栏输入 127.0.0.1:8080,出现如下界面 2. 通过修改本地 host 文件,将 www.123.com 映射到 12 ...
- Nginx配置域名反向代理MQTT 配置mqtt /ws /wss访问域名连接。
有时候我们想通过域名的方式来进行mqtt的连接. 首先在阿里云上安装mqtt服务器端.本文mqtt服务器端ip地址为: xx.xx.67.177 并配置mqtt监听端口 tcp : 1883 , ht ...
- Nginx配置实例-反向代理实现浏览器请求Nginx跳转到服务器某页面
场景 Ubuntu Server 16.04 LTS上怎样安装下载安装Nginx并启动: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detai ...
- centos7安装Nginx 配置及反向代理
Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为"engine X",是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP ...
- nginx配置前端反向代理
本地这里有两个端口: 8080:前端页面 80:后端接口 在nginx配置 listen 8888;server_name 127.0.0.1;location / {root html;proxy_ ...
- nginx配置tomcat8反向代理出现 java.lang.IllegalArgumentException: The character [_] is never valid in a domai
原因是在nginx配置文件中配置upstream时用了"_"字符,如上用的tomcat_server,直接报错了.改成tomcatserver,即不使用"_"字 ...
- nginx配置tomcat反向代理出现 java.lang.IllegalArgumentException: The character [_] is never valid in a domai
昨晚,开启了nginx,并修改了配置文件,但是,无论怎样,localhost都不能正确访问,仔细查看配置文件,觉得并没有什么问题.查看了nginx的日志文件,发现报错:400.在网上找相关资料,还是没 ...
最新文章
- android中进程的优先级
- adobe stream的最后一行空行_Excel VBA 7.66 如何快速删除数据间空行?手动慢又乱!VBA快又准...
- 分享Silverlight/WPF/Windows Phone一周学习导读(4月4日-4月9日)
- C语言基于GTK+Libvlc实现的简易视频播放器(二)
- 公开调用私有Java方法?
- 匈牙利算法——最大匹配问题详解
- 前端笔试题面试题记录(下)
- php 合并数组 效率,PHP将两个关联数组合并函数-增高函数效率
- 漫画:996 的本质是什么?
- nginx安装lua/replace-filter-nginx-module
- swoole怎么做mysql连接池_Swoole4创建Mysql连接池
- python sorted函数
- FLASHFTP简体中文破解版
- 使用Python快速实现人脸融合
- @TableName
- 龙妈苟活还是凉凉,预测算法哪家准?
- 14、微信小程序——上传、预览、长按删除图片
- NuxtJS 项目部署如何部署到nginx
- hadoop 2.7.3 版本下载
- 信息无障碍研究机构---教育、公益等
热门文章
- 下班前几分钟,逮到一个腾讯10年老测试开发,聊过之后彻底悟了...
- 报志愿时计算机一大类分数,高考出分在即 测一测你的分数可以上哪些大学?...
- [javaws]jnlp介绍及使用
- Windows PC上创建大数据职业技能竞赛实验环境之五--hadoop、hive和spark编程
- vue 实现级联选择器
- 一台服务器可以安装多个mysql数据库_在一台Linux服务器上安装多个MySQL实例(一)--使用mysqld_multi方式...
- 基于小波变换的EMG信号病人数据matlab仿真分析
- 6-2 两个字符串穿插 (10 分)
- es6中两数组按条件穿插混合------------元宵节快乐
- 后疫情时代 金融行业数字化转型解题