反向代理:

proxy_pass

    server {
listen 80;
location /n {
proxy_pass http://127.0.0.1:8000/test; }
location /m {
proxy_pass http://127.0.0.1:8000/test/; }
}

http://127.0.0.1:8000 是python 提供的http服务。


访问:http://127.0.0.1/n

结果重定向到:http://127.0.0.1/test/

404 Not Found


访问:http://127.0.0.1/n/

结果正常

Directory listing for /test/


访问:http://127.0.0.1/nhaha  ,  http://127.0.0.1/nhaha/

Error response

Error code 404.


访问:http://127.0.0.1/m

结果正常

Directory listing for /test/


访问:http://127.0.0.1/m/

结果正常

Directory listing for /test//


访问:http://127.0.0.1/mhaha

结果重定向到:http://127.0.0.1/test/haha/

404 Not Found


访问:http://127.0.0.1/mhaha/

结果正常

Directory listing for /test/haha/


只要是重定向的,请求都没有经过proxy_pass,nginx直接返回了。

但是如果在配置文件加入:

	location / {
proxy_pass http://127.0.0.1:8000/; }

访问:http://127.0.0.1/n

重定向到:http://127.0.0.1/test/

结果正常

Directory listing for /test/

由此可知nginx的匹配应该是有一个优先级的。

	location /m2 {
proxy_pass http://127.0.0.1:8000/test/haha/; }

访问:http://127.0.0.1/m

那么肯定选择/m匹配,结果:

Directory listing for /test/


访问:http://127.0.0.1/m2

那么肯定选择/m2匹配,结果:

Directory listing for /test/haha/


访问:http://127.0.0.1/m3

由于配置文件没有/m3,所以nginx会尝试/m

/m=http://127.0.0.1:8000/test/

/m3=http://127.0.0.1:8000/test/3

所以重定向到:http://127.0.0.1/test/3/

Directory listing for /test/3/


分析总结:

nginx的匹配是:先窄范围后宽范围。这也解释了在添加 location /{...}之前重定向返回404,后来有正常。因为之前 / 指向的是nginx的html目录,配置后 /指向python监听的目录(/root/Downloads/)。

是否重定向由:匹配后的url后面是否有"/"决定。/m3=http://127.0.0.1:8000/test/3(重定向),/m3/=http://127.0.0.1:8000/test/3/(不重定向)

我们也发现这样的匹配会由超出预期的结果,比如/m3,/mhaha

所以在写匹配规则的时候还是:

	location /uri/ {
proxy_pass http://127.0.0.1:8000/uri 或 proxy_pass http://127.0.0.1:8000/uri/
}

nginx入门二的更多相关文章

  1. nginx入门教程

    nginx入门教程 一.概述    什么是nginx?   Nginx (engine x) 是一款轻量级的Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器.   什么是反向 ...

  2. nginx入门与实战 安装 启动 配置nginx Nginx状态信息(status)配置 正向代理 反向代理 nginx语法之location详解

    nginx入门与实战 网站服务 想必我们大多数人都是通过访问网站而开始接触互联网的吧.我们平时访问的网站服务 就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务. Web ...

  3. Linux(6)- redis发布订阅/持久化/主从复制/redis-sentinel/redis-cluster、nginx入门

    一.redis发布订阅 Redis 通过 PUBLISH .SUBSCRIBE 等命令实现了订阅与发布模式. 其实从Pub/Sub的机制来看,它更像是一个广播系统,多个Subscriber可以订阅多个 ...

  4. 转:nginx入门指南,快速搭建静态文件服务器和代理服务器

    本文介绍 Nginx 入门基础知识,让你迅速搭建 Nginx 服务器.主要内容包括 Nginx 安装和简单使用.Nginx的简单原理.Nginx 配置文件的结构.如何使用 Nginx 来提供静态文件服 ...

  5. Linux--6 redis订阅发布、持久化、集群cluster、nginx入门

    一.redis发布订阅 Redis 通过 PUBLISH .SUBSCRIBE 等命令实现了订阅与发布模式. 其实从Pub/Sub的机制来看,它更像是一个广播系统,多个Subscriber可以订阅多个 ...

  6. Nginx入门教程(转)

    原文:https://www.cnblogs.com/qdhxhz/p/8910174.html nginx入门教程 一.概述    什么是nginx?   Nginx (engine x) 是一款轻 ...

  7. Nginx入门到实战

    location 语法 location 有”定位”的意思, 根据Uri来进行不同的定位. 在虚拟主机的配置中,是必不可少的,location可以把网站的不同部分,定位到不同的处理方式上. 比如, 碰 ...

  8. day07 Nginx入门

    day07 Nginx入门 Nginx简介 Nginx是一个开源且高性能.可靠的http web服务.代理服务 开源:直接获取源代码 高性能:支持海量开发 可靠:服务稳定 特点: 1.高性能.高并发: ...

  9. 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示

    前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...

随机推荐

  1. poj1753 【枚举】

    Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 square ...

  2. MT【70】图论的一些基本概念例题介绍

    此讲是纯粹竞赛,联赛二试题难度.仅供学有余力的学生看看.

  3. [luogu1447][bzoj2005][NOI2010]能量采集

    题目大意 求出\(\sum_{i=1}^{n} \sum_{i=1}^{m} gcd(i,j)\times 2 -1\). 题解 解法还是非常的巧妙的,我们考虑容斥原理.我们定义\(f[i]\)表示\ ...

  4. 老铁,这年头得玩玩这个:Git基本操作【github】

    GitHub创建项目 本地创建项目 1.初始化配置,设置仓库人员的用户名和邮箱地址,这一步必不可少 git config --global user.name "uncleyong" ...

  5. 获取get值&DOM例题

    获取get值: <body>        <form action="9.26获取get值.html" method="get">   ...

  6. 基本数据类型对象包装(Integer等)

    基本数据类型 包装类 byte Byte short             Short int   Integer long Long boolean Boolean float          ...

  7. MQTT 及其 测试工具

    协议说明书:https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/04-OperationalBehavior.html 官网提供了很多的broker模拟 ...

  8. Service Fabric基本概念: Node, Application, Service, Partition/Replicas

    作者:张鼎松 (Dingsong Zhang) @ Microsoft 在上一节中,为大家简明扼要的介绍了微软针对现代分布式系统在Azure上实现的相关服务组件.紧接上文内容,本节将为大家介绍Azur ...

  9. list 删除一个元素的三种做法--python

    我们以一个字符串为元素类型的 list 为例,进行列表元素的删除: l = ['no surfing', 'flippers'] 法一:remove(val) >>> l.remov ...

  10. CentOS 6.5 升级内核

    Docker需要3.10以上内核支持,Centos6.5 默认内核为2.6.所以手动编译安装3.10内核. 查看当前系统内核版本 [root@gu ~]# uname -r2.6.32-431.el6 ...