nginx设置通用访问后缀

需求A描述:比如说服务器的访问路径中含有(.json,.axp,.php), 我们访问可以在nginx中设置拦截规则,定义正则表达式进行拦截,转发到对应的服务器上去。

服务器接口访问路径:

@GetMapping("/isCollection.json")
public String getString(){return "OK";
}

浏览器访问方式:

http://47.102.42.198:8888/isCollection.json

nginx配置方式:

location ~* \.(json)$ {proxy_pass http://localhost:8081;   #......proxy_connect_timeout 3000s;proxy_send_timeout 3000s;proxy_read_timeout 3000s;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host:$server_port;client_max_body_size    100m;
}

需求B描述:比如说访问路径中含有(.json,.axp,.php),而服务器中并不存在后缀,我们访问可以在nginx中配置截取后缀,转发到对应的服务器上去。

服务器接口路径:

@GetMapping("/risk/isCollection")
public String getString(){return "OK";
}

浏览器访问方式:

http://47.102.42.198:8888/isCollection.json

nginx配置方式:

location / {rewrite '^(.*)\.json$' /risk/$1 last;
}location /risk/ {proxy_pass http://localhost:8081;   #服务器地址|域名proxy_connect_timeout 3000s;proxy_send_timeout 3000s;proxy_read_timeout 3000s;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host:$server_port;client_max_body_size 100m;
}

Location 的匹配规则详解

句法: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
默认: -
内容: server, location

=:开头表示精确匹配

^~:开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。

~:开头表示区分大小写的正则匹配

~*:开头表示不区分大小写的正则匹配

!~!~*:分别为区分大小写不匹配及不区分大小写不匹配 的正则

/:通用匹配,任何请求都会匹配到。

多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):

首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

例子,有如下匹配规则:

location = /  {[ configuration A ]
}location = /login {[ configuration B ]
}location ^~ /static/ {[ configuration C ]
}location ~ \.(gif|jpg|png|js|css)$ {[ configuration D ]
}location ~* \.png$ {[ configuration E ]
}location !~ \.xhtml$ {[ configuration F ]
}location !~* \.xhtml$ {[ configuration G ]
}location / {[ configuration H ]
}

那么产生的效果如下:

  • 访问根目录/, 比如 http://localhost/  将匹配 [configuration A]
  • 访问 http://localhost/login 将匹配[configuration B],http://localhost/register 则匹配 [configuration H]
  • 访问 http://localhost/static/font.html 将匹配[configuration C]
  • 访问 http://localhost/font.gif, http://localhost/font.jpg 将匹配[configuration D][configuration E],但是[configuration D]顺序优先,[configuration E]起作用, 而 http://localhost/static/c.png 则优先匹配到 [configuration C]
  • 访问 http://localhost/font.PNG 则匹配[configuration E], 而不会匹配[configuration D],因为[configuration E]不区分大小写。
  • 访问 http://localhost/font.xhtml 不会匹配[configuration F][configuration G],http://localhost/font.XHTML不会匹配[configuration G],因为不区分大小写。[configuration F][configuration G]属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
  • 访问 http://localhost/category/id/1234则最终匹配到[configuration H],因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在。

官网文档:http://nginx.org/en/docs/http/ngx_http_core_module.html#location

nginx 配置后缀相关推荐

  1. nginx 配置静态文件目录_nginx配置静态资源服务器

    nginx服务器搭建在这就不过多的说明了,本内容主要是nginx静态资源服务器配置相关说明 nginx配置 location / :指所有的url请求都会去访问static下面的文件: 指定url后缀 ...

  2. 三个案例看Nginx配置安全

    之前在Sec-News中推荐了一个开源程序  https://github.com/yandex/gixy,作用是来检测Nginx配置文件中存在的问题.正好Pwnhub上周的比赛也出现了一道题,包含由 ...

  3. [Nginx]nginx 配置实例-动静分离

    nginx 配置实例-动静分离 1.什么是动静分离 Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离.严格意义上说应该是动态请求跟静态请求分开,可 ...

  4. Nginx配置以及域名转发

    工程中的nginx配置 #user nobody; worker_processes 24; error_log /home/xxx/opt/nginx/logs/error.log; pid /ho ...

  5. 【Nginx那些事】nginx配置实例(三)动静分离

    [Nginx那些事]系列 [Nginx那些事]nginx 安装及常用指令 [Nginx那些事]Nginx 配置文件说明 [Nginx那些事]nginx原理解析 [Nginx那些事]nginx配置实例( ...

  6. Nginx配置location及rewrite规则

    Nginx配置location及rewrite规则 示例: location  = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location ...

  7. nginx配置SSL实现服务器/客户端双向认证

    http://blog.csdn.net/kunoy/article/details/8239653 本人不才,配置了两天,终于搞出来了,结合网上诸多博文,特此总结一下! 配置环境: Ubuntu 1 ...

  8. Nginx配置静态资源

    静态服务器 静态服务器概念非常简单:当用户请求静态资源时,把文件内容回复给用户. 但是,要把静态服务做到极致,需要考虑的方面非常多: 正确书写header:设置content-type.过期时间等 效 ...

  9. nginx 配置图片服务器 文件大小,nginx 配置图片服务器 文件大小

    nginx 配置图片服务器 文件大小 内容精选 换一换 该任务指导用户使用Loader将数据从SFTP服务器导入到HDFS/OBS.创建或获取该任务中创建Loader作业的业务用户和密码.确保用户已授 ...

最新文章

  1. 高德API+Python解决租房问题
  2. AI一分钟|特斯拉前员工爆料:部分汽车使用电池缺陷;小鹏汽车计划2019年底前融资300亿元...
  3. 通过chrome inspect 来调试手机hybird APP
  4. 蓝桥杯之最大体积(数论+完全背包)
  5. [VC6] RadioBox使用入门
  6. ipython是一个交互式计算机系统_IPython 1.0发布,强大的Python交互式Shell
  7. 杭电2066一个人的旅行(spfa)
  8. 如何才能一统编程语言的江湖?
  9. Axure 元件库分享
  10. 疯狂Java讲义第五版读书笔记
  11. linux 定时器 库,linux 定时器
  12. nodejs之http-proxy几点常见问题 1
  13. calibre的使用技巧
  14. gii无法访问 yii2_YII2框架访问gii、debug页面404的错误解决方法
  15. poe交换机归类有什么?
  16. 使用 fitter 拟合数据分布
  17. 解决CPU使用过高问题
  18. 韶音骨传导耳机值得入手吗?南卡和韶音骨传导耳机实测对比
  19. python源码只有编译成二进制_setup-cython(2):把Python打包成二进制应用吧
  20. 三小时,阿里云使用docker部署redis(阅文无数)

热门文章

  1. 自动加载的iframe高度自适应
  2. MATLAB解隐函数方程时符号表达式转化为数值的方法-用vpa函数
  3. 【笔记-node】《imooc-nodejs入门到企业web开发中的应用》
  4. 使用地点云实现企业官网中的门店地图
  5. 网易明日之后那个服务器人最多,明日之后:网易“公认”全服前4强营地出炉,竟全部来自一个区...
  6. 【软件测试】接口测试笔记4
  7. 以匠心守初心!百望云荣膺人民网“第十九届人民匠心飞跃奖”
  8. hazelcast的坑爹事
  9. 百面机器学习 之 集成学习
  10. 嵌入式linux程序加密,基于嵌入式操作系统uClinux实现网络安全加密系统的设计