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 配置图片反向代理相关推荐

  1. Nginx配置实例-反向代理实例:根据访问的路径跳转到不同端口的服务中

    场景 Ubuntu Server 16.04 LTS上怎样安装下载安装Nginx并启动: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detai ...

  2. history模式 nginx配置_nginx反向代理部署vue项目(history模式)的方法

    前言: 根据标题我们要区分出两个信息 1. history 模式部署 ( vue的路由模式如果使用history,刷新会报404错误.) 2. Nginx 做反向代理 问题1思考: vue-route ...

  3. 【Nginx】Nginx配置实例-反向代理

    1. 反向代理实例一 实现过程 1. 启动一个 tomcat,浏览器地址栏输入 127.0.0.1:8080,出现如下界面 2. 通过修改本地 host 文件,将 www.123.com 映射到 12 ...

  4. Nginx配置域名反向代理MQTT 配置mqtt /ws /wss访问域名连接。

    有时候我们想通过域名的方式来进行mqtt的连接. 首先在阿里云上安装mqtt服务器端.本文mqtt服务器端ip地址为: xx.xx.67.177 并配置mqtt监听端口 tcp : 1883 , ht ...

  5. Nginx配置实例-反向代理实现浏览器请求Nginx跳转到服务器某页面

    场景 Ubuntu Server 16.04 LTS上怎样安装下载安装Nginx并启动: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detai ...

  6. centos7安装Nginx 配置及反向代理

    Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为"engine X",是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP ...

  7. nginx配置前端反向代理

    本地这里有两个端口: 8080:前端页面 80:后端接口 在nginx配置 listen 8888;server_name 127.0.0.1;location / {root html;proxy_ ...

  8. nginx配置tomcat8反向代理出现 java.lang.IllegalArgumentException: The character [_] is never valid in a domai

    原因是在nginx配置文件中配置upstream时用了"_"字符,如上用的tomcat_server,直接报错了.改成tomcatserver,即不使用"_"字 ...

  9. nginx配置tomcat反向代理出现 java.lang.IllegalArgumentException: The character [_] is never valid in a domai

    昨晚,开启了nginx,并修改了配置文件,但是,无论怎样,localhost都不能正确访问,仔细查看配置文件,觉得并没有什么问题.查看了nginx的日志文件,发现报错:400.在网上找相关资料,还是没 ...

最新文章

  1. android中进程的优先级
  2. adobe stream的最后一行空行_Excel VBA 7.66 如何快速删除数据间空行?手动慢又乱!VBA快又准...
  3. 分享Silverlight/WPF/Windows Phone一周学习导读(4月4日-4月9日)
  4. C语言基于GTK+Libvlc实现的简易视频播放器(二)
  5. 公开调用私有Java方法?
  6. 匈牙利算法——最大匹配问题详解
  7. 前端笔试题面试题记录(下)
  8. php 合并数组 效率,PHP将两个关联数组合并函数-增高函数效率
  9. 漫画:996 的本质是什么?
  10. nginx安装lua/replace-filter-nginx-module
  11. swoole怎么做mysql连接池_Swoole4创建Mysql连接池
  12. python sorted函数
  13. FLASHFTP简体中文破解版
  14. 使用Python快速实现人脸融合
  15. @TableName
  16. 龙妈苟活还是凉凉,预测算法哪家准?
  17. 14、微信小程序——上传、预览、长按删除图片
  18. NuxtJS 项目部署如何部署到nginx
  19. hadoop 2.7.3 版本下载
  20. 信息无障碍研究机构---教育、公益等

热门文章

  1. 下班前几分钟,逮到一个腾讯10年老测试开发,聊过之后彻底悟了...
  2. 报志愿时计算机一大类分数,高考出分在即 测一测你的分数可以上哪些大学?...
  3. [javaws]jnlp介绍及使用
  4. Windows PC上创建大数据职业技能竞赛实验环境之五--hadoop、hive和spark编程
  5. vue 实现级联选择器
  6. 一台服务器可以安装多个mysql数据库_在一台Linux服务器上安装多个MySQL实例(一)--使用mysqld_multi方式...
  7. 基于小波变换的EMG信号病人数据matlab仿真分析
  8. 6-2 两个字符串穿插 (10 分)
  9. es6中两数组按条件穿插混合------------元宵节快乐
  10. 后疫情时代 金融行业数字化转型解题