Nginx下的location,upstream,rewrite 和 proxy_pass使用总计大全
一 、 location: 顾名思义-->地址,也叫路由。
nginx服务器非常核心的配置,一般nginx运维人员在修改nginx配置时,大部分也是围绕着location这个配置进行修改。
下面看一下一个简单的location配置:
location / {
root home/;
index index.html;
}
这个配置表示任何一个路径访问nginx服务器,都跳转到home目录下的index.html页面中。
下面来详细说一下location 路径匹配规则,location匹配分为3种匹配方式 。
1、绝对匹配,完全相等 “=” 号 ,比如:
##当访问地址端口后面的地址等于/login/demo.html时,就会直接走这个location地址。
location = /login/demo.html {
*******
}
2、正则匹配 ~ 或者 ~* 。前一个区分大小写,后一个不区分大小写
location ^~ /images/ {
# 匹配任何已/images/开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
}
location ~* .(gif|jpg|jpeg)$ {
# 匹配任何已.gif、.jpg 或 .jpeg 结尾的请求
}
3、一般匹配 无符号 ,无符号匹配就算匹配中,也不会break,还会继续向下匹配下去,如果发现正则或者完全匹配的情况,则直接使用。
总结一下:
= 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
~ 为区分大小写匹配(可用正则表达式)
!~为区分大小写不匹配
~* 为不区分大小写匹配(可用正则表达式)
!~*为不区分大小写不匹配
^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。
二、proxy_pass 反向代理
1:当我们遇到跨域问题,而且客户端无法支持 CORS 时,最好的办法就是让服务器来做代理。在前端页面所在的服务器 nginx 配置上开一个路由,然后使用 proxy 去请求另一个域名下的资源。
2:前后台分离后,前端独立开发后也可以通过proxy_pass来反向代理到后台服务,或者服务器部署地址不方便暴露也可以用proxy做反向代理。
简单到例子:
location /login {
proxy_pass http://www.sohu.com/
}
当我们访问 http://192.168.0.101:8080/login就会直接跳转到搜狐首页。说明当前访问地址为搜狐网的代理地址。
需要特别注意的是:proxy后面的地址有没有斜杠:
如果我们访问到地址是:http://192.168.0.101:8080/login/index.html
有斜杠:绝对地址,最终跳转到:http://www.sohu.com/index.html
没有斜杠:相对地址,最终跳转到:http://www.sohu.com/login/index.html
三、rewrite重新路由,rewrite有5中命令模式
rewrite 的作用是修改 uri,但要注意 rewrite 要有个重新匹配 location 的副作用。由于 proxy_pass 的处理阶段比 location 处理更晚,所以需要 break 掉,以防止 rewrite 进入下一次 location 匹配而丢失 proxy_pass。
1、break; 如下:
#这个指令表示,如果/login匹配成功,则直接在home路径中查找demo.html文件
#然后跳转到demo.html。注意这是内部跳转,浏览器上的地址url不会变,还是以/login结尾。
location /login {
rewrite ^/ /demo.html break;
root home/;
}
2、redirect ; 如下
#和break差不多,不过这个表示外部跳转,也会跳转到demo.html页面,不过浏览器地址会自动变成demo.html
location /login {
rewrite ^/ /demo.html redirect;
root home/;
}
3、permanent ; 和redirect作用类似。
4、last; 如果是last修饰的话,nginx会将/demo.html地址和其他location的地址进行匹配,然后找到匹配的地址,继续执行下去。这里他会执行到 /demo.html 的location中,然后内部跳转到/demo.html页面,如下:
location /login {
rewrite ^/ /demo.html last;
root home/;
}
location /demo.html {
rewrite ^/ /demo.html break;
root home/;
}
5、没有修饰,就是无任何修饰。可以看到这个rewrite后面没有任何修饰。当没有任何修饰的情况下,匹配中location后,不会停止,会继续想下面的location继续匹配下去。知道匹配到最后一个,使用最后一个匹配到的。。如下
location /login {
rewrite ^/ /demo.html ;
root home/;
}
四、upstream , 负载配置
upstream 用以配置负载的策略,nginx自带的有:轮询/权重/ip_hash。特殊需求可用第三方策略(使用较少)。
upstream test{
server 192.168.0.101:8081;
server 192.168.0.102:8081;
}
upstream test1 {
server 192.168.0.101:8081 weight=2;
server 192.168.0.102:8081 weight=1;
}
upstream test2 {
ip_hash
server 192.168.0.101:8081;
server 192.168.0.102:8081;
}
server{
listen 80;
server_name localhost;
location /login {
proxy_pass http://test/
}
}
当访问:http://localhost/login
时,nginx
就会在server 192.168.0.101:8081; server 192.168.0.102:8081
这两个服务之间轮询访问。
upstream test1
表示上面的服务访问2次,下面的服务访问1次
upstream test2
表示更具客户端ip地址的hash值来进行区分访问那个服务,这种设置后,同一个客户端访问的服务一般是不会变的。
参考:
https://blog.csdn.net/zhanglei082319/article/details/88830606
https://www.cnblogs.com/lianxuan1768/p/8383804.html
Nginx下的location,upstream,rewrite 和 proxy_pass使用总计大全的更多相关文章
- Nginx中的Location和Rewrite
Nginx中的Location和Rewrite 目录 Nginx中的Location和Rewrite 一.location 1. location的分类 2. location常用的匹配规则 3. l ...
- Nginx下wordpress伪静态规则(rewrite)
当我们从apache服务器转向Nginx服务器的时候,它们的伪静态规则就不一样了,所以你熟悉Nginx服务器的伪静态规则,自己写当然也好.但很多网友还是不太了解Nginx服务器的伪静态规则的,而如果你 ...
- CodeIgniter框架——nginx下的配置
odeigniter(CI)是一个轻量型的PHP优秀框架,但是它是在apache服务器下开发的,在nginx下需要特别的配置才可以使用. 对nginx的配置如下: server { listen 80 ...
- nginx下的rewrite
一.正则表达式匹配,其中: * ~ 为区分大小写匹配 * ~* 为不区分大小写匹配 * !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 二.文件及目录匹配,其中: * -f和!-f用来判断是否 ...
- 实例讲解Nginx下的rewrite规则
一.正则表达式匹配,其中:* ~ 为区分大小写匹配* ~* 为不区分大小写匹配* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配二.文件及目录匹配,其中:* -f和!-f用来判断是否存在文件* ...
- 快速掌握Nginx(二) —— Nginx的Location和Rewrite
1 location详解 1.location匹配规则 Nginx中location的作用是根据Url来决定怎么处理用户请求(转发请求给其他服务器处理或者查找本地文件进行处理).location支持正 ...
- nginx中location、rewrite用法总结
一.location用法总结 location可以把不同方式的请求,定位到不同的处理方式上. 1.location的用法 location ~* /js/.*/\.js 以 = 开头,表示精确匹配:如 ...
- Nginx配置location及rewrite规则
Nginx配置location及rewrite规则 示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } loca ...
- 实例讲解Nginx下的rewrite规则(转)
一.正则表达式匹配,其中:* ~ 为区分大小写匹配* ~* 为不区分大小写匹配* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配二.文件及目录匹配,其中:* -f和!-f用来判断是否存在文件* ...
随机推荐
- python 异步 I/O
如果你想了解异步编程,那么必然会涉及出许多相关概念. 堵塞/非堵塞 同步/异步 多进程/多线程/协程 为什么我要学习这个话,因为我想搞懂异步框架和异步接口的调用.所以,我的学习路线是这样的: 1.py ...
- python信息收集(三)
前两篇介绍了利用python编写一些脚本实现二层主机的发现,这一篇介绍一下三层主机的发现. 一般来说,三层主机的发现主要是通过ICMP协议来实现的.其中ICMP协议中的ping命令可以 ...
- MySQL 查询语句优化思路
query 语句的优化思路和原则主要提现在以下几个方面:1. 优化更需要优化的Query:2. 定位优化对象的性能瓶颈:3. 明确的优化目标:4. 从 Explain 入手:5. 多使用profile ...
- jdk1.7和jdk1.8在接口方面的改动
1.JDK7及其之前,接口中都是抽象方法,且不能出现static方法 2.接口的变量都是public final static 全局静态常量,无变化 3.接口中可以添加非抽象方法(static),通过 ...
- filter和interceptor的区别
前言 最近在面试的时候,被问到了这个问题,觉得答得不是很好,在此进行整理和记录,供自己学习,也希望能帮助到大家. 什么是Filter 在java的javax.servlet下有一个接口Filter.任 ...
- Docker数据管理(一)
数据卷挂载 在生产环境中,需要对数据进行持久化,冗余化,或者在需要在多个容器之间进行数据共享 数据卷:容器内数据直接映射到本地主机环境 数据卷容器:使同特定容器维护数据卷 -v 进行映射 1.在容器内 ...
- Robot Framework -003 在Windows10 安装Eclipse作为编辑器,安装 RED 插件。
本文采用Eclipse及其对应的插件来编辑.管理.运行Robot Framework. https://www.eclipse.org/downloads/ 本文安装 Eclipse IDE 2 ...
- React全家桶+AntD 共享单车后台管理系统开发
第1章 课程导学对课程整体进行介绍,并且说明学习的必要性.第2章 React基础知识React基础知识以及生命周期的介绍,并使用React官方脚手架初始化基础项目,同时介绍了新一代打包工具Yarn.第 ...
- HyperLeger Fabric开发(三)——HyperLeger Fabric架构
HyperLeger Fabric开发(三)--HyperLeger Fabric架构 一.HyperLeger Fabric逻辑架构 1.HyperLeger Fabric逻辑架构简介 Fabric ...
- 从蓝瘦“想哭”到 SELinux 看操作系统安全何在
最近一周,来自网络的"想哭"勒索病毒(Wannacry Ransomware)在世界各地同时上演了一部绑匪大片,台词华丽,演技出色,当仁不让地新晋世界第一网红.全球各国除了默默忙于 ...