背景信息:

被代理的服务器(10.90.7.2)上,nginx的配置内容

server {
listen ;
server_name localhost;
default_type text/html; location /path1 {
root html;
index index.html;
}
location /path1/path2 {
root html;
index index.html;
} }

待访问的页面路径信息如下:

[root@localhost html]# pwd
/usr/local/nginx/html
[root@localhost html]# cd path1/
[root@localhost path1]# tree
.
|-- index.html
`-- path2
`-- index.html directory, files

单独访问10.90.7.2这个服务器的path1以及path2的效果如下图:

1.在前端代理服务器10.90.7.10的nginx.conf中proxy_pass后面不带/,location 对应的url后面也不带/

upstream backend_slash {
server 10.90.7.2:;
} server {
listen ;
server_name localhost; default_type text/html; location /path1 {
proxy_pass http://backend_slash;
proxy_set_header Host $host:$server_port;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

访问10.90.7.10:9000/path1的path1,效果如图:

2.在前端代理服务器10.90.7.10的nginx.conf中proxy_pass后面不带/,location 对应的url后面带/

upstream backend_slash {
server 10.90.7.2:;
} server {
listen ;
server_name localhost; default_type text/html; location /path1/ {
proxy_pass http://backend_slash;
proxy_set_header Host $host:$server_port;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

访问10.90.7.10:9000/path1的path1,效果如下图,其实和步骤1中的效果一样.

3. 在前端代理服务器10.90.7.10的nginx.conf中proxy_pass后面带/,location 对应的url中加入虚拟路径前缀path,后面不带/

upstream backend_slash {
server 10.90.7.2:;
} server {
listen ;
server_name localhost; default_type text/html; location /path {
proxy_pass http://backend_slash/;
proxy_set_header Host $host:$server_port;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

访问10.90.7.10:9000/path/path1的path1,效果如下图,效果和步骤1,2的一样。

当访问10.130.7.10:9000/path1/path2时,效果如下图:

被代理的服务器10.90.7.2上nginx的error日志内容:

// :: [error] #: * "/usr/local/nginx/html/1/path2/index.html" is not found (: Not a directory), client: 10.90.7.10, server: localhost, request: "GET /1/path2/ HTTP/1.0", host: "10.90.7.10:9000"

4. 在前端代理服务器10.90.7.10的nginx.conf中proxy_pass后面不带/,location 对应的url中加入虚拟路径前缀path,后面也不带/

upstream backend_slash {
server 10.90.7.2:;
} server {
listen ;
server_name localhost; default_type text/html; location /path {
proxy_pass http://backend_slash;
proxy_set_header Host $host:$server_port;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

访问10.90.7.10:9000/path/path1的path1,效果如下图:

5. 在前端代理服务器10.90.7.10的nginx.conf中proxy_pass后面带/,location 对应的url中加入虚拟路径前缀path,后面也带/

upstream backend_slash {
server 10.90.7.2:;
} server {
listen ;
server_name localhost; default_type text/html; location /path/ {
proxy_pass http://backend_slash/;
proxy_set_header Host $host:$server_port;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

访问10.90.7.10:9000/path/path1的path1,效果如图

访问10.90.7.10:9000/path1/path2的path2,效果如下图:

这里要说明一下的,我这里10.90.7.10这个服务器的server (端口9000),是没有配置location / {root html; index index.html;}这么一个规则的,但是依然可以访问到这个服务器下html下面的path1/path2.

为什么呢? 这里要注意下,nginx默认都会有一个 location / {root html; index index.html;}的规则.

访问10.90.7.10:9000/path/path1/path2的path2,效果如图:

综上总结:

1. proxy_pass 后面的url中带上反斜线,和不带反斜线效果差异很大,带反斜线时会将location里面指定的url前缀去掉。

2. location后面的url前缀部分后缀带不带反斜线,效果差异截然不同。

3. nginx的虚拟服务器server的配置中,没有配置默认的location / {}时,默认会有一个location / {root html; index index.html;}

nginx的url规则小tips的更多相关文章

  1. 简明 Nginx Location Url 配置笔记

    基本配置 为了探究nginx的url配置规则,当然需要安装nginx.我使用了vagrant创建了一个虚拟环境的ubuntu,通过apt-get安装nginx.这样就不会污染mac的软件环境.通过vr ...

  2. 前端必备,5大mock省时提效小tips,用了提前下班一小时

    ​ 一.一些为难前端的业务场景 在我的工作经历里,需要等待后端童鞋配合我的情形大概有以下几种: a.我们跟外部有项目合作,需要调用到第三方接口. 一般这种情况下,商务那边谈合同,走流程,等第三方审核, ...

  3. thinkphp nginx php-fpm url rewrite 导致 404 错误

    ## thinkphp nginx php-fpm url rewrite 导致 404 错误 之前thinkphp的系统部署在apache上,考虑到在并发性能nginx比apache强悍得多,所以在 ...

  4. PHPCMS V9静态化HTML生成设置及URL规则优化

    先讲讲Phpcms V9在后台怎么设置生成静态化HTML,之后再讲解怎么自定义URL规则,进行URL地址优化.在这一篇中,伪静态就不涉及了,大家可以移步到Phpcms V9全站伪静态设置方法. 一.静 ...

  5. Nginx return 关键字配置小技巧

    Nginx的return关键字属于HttpRewriteModule模块: 语法:return http状态码 默认值:无 上下文:server,location,if 该指令将结束执行直接返回htt ...

  6. Nginx的Rewrite规则与实例

    通过Rewrite规则可以实现规范的URL.根据变量来做URL转向及选择配置,用好Rewrite有时起到事半功倍的效果. 语法 Nginx的Rewrite相比Apache的要好理解很多,主要使用指令有 ...

  7. 4.Nginx的URL重写应用

    Nginx的URL重写应用 nginx的URL重写模块是用得比较多的模块之一,所以我们需要好好地掌握运用.常用的URL重写模块命令有if,rewrite,set,break等. if命令 if用于判断 ...

  8. Nginx location 匹配规则详解

    语法规则 location [=|~|~*|^~] /uri/ { … } 模式 含义 location = /uri = 表示精确匹配,只有完全匹配上才能生效 location ^~ /uri ^~ ...

  9. Nginx实现URL重写

    本文利用Nginx实现URL重写,本文使用Nginx与静态页面配合重写URL. 1.准备工作. 结合本文场景,需要安装Nginx. 1.1 关于Linux系统安装Nginx可以参考我的文章---(传送 ...

随机推荐

  1. 《统计学习方法》笔记(3):k近邻

    k近邻(KNN)是相对基本的机器学习方法,特点是不需要建立模型,而是直接根据训练样本的数据对测试样本进行分类. 1.k近邻的算法? 算法对测试样本进行分类的一般过程如下: 1)根据给定的k值,搜索与测 ...

  2. 正则表达式的lastIndex属性

    js中正则表达式的使用方式有两种,一种是正则表达式对象的方法,一种是字符串对象的方法,前者有exec(str).test(str)两个方法,后者有match(regexp).replace(regex ...

  3. SQL注入之Sqli-labs系列第二十一关(基于复杂性的cookie POST报错注入)和二十二关(基于双引号的cookie POST报错注入)

    开始挑战第二十一关(Cookie Injection- Error Based- complex - string) 和二十二关(Cookie Injection- Error Based- Doub ...

  4. 正则表达式 —— Cases 与 Tricks

    1. cases 匹配任意单词(两侧可以有多个空格): ( +[a-zA-Z]+ +) 上述表达式无法匹配句子末尾的单词,若想匹配句尾或者逗号前的单词,则可拓展为: ( +[a-zA-Z]+[?,.] ...

  5. 索引rebuild与rebuild online区别

    索引rebuild与rebuild online区别 1.0目的,本篇文档探讨索引rebuild 与 rebuild online的区别 2.0猜测:已有的知识 2.1对索引rebuild重建会对表申 ...

  6. Putty CentOS SSH 总是自动断开连接

    /********************************************************************** * Putty CentOS SSH 总是自动断开连接 ...

  7. Python中的print、input函数以及Python中交换两个变量解析

    一.Python中的值交换操作 首先明确一点点,Python中的一切都是面向对象的,可以理解为Python的中一切都是对象. 我们知道Java也是面向对象的语言,但是在Java中定义一个值变量如下: ...

  8. C#LinQ语法

    Unity开发VR之Vuforia 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  9. xdoj 1241--余神的rp机(区间dp)

    xdoj  1241---余神的rp机 核

  10. python 闭包和迭代器

    一  函数名的运用:(函数名是一个变量,但它是一个特殊变量,与括号配合可以执行变量. (1) 函数名可以赋值给其他变量 def chi(): print("吃月饼") fn=chi ...