背景信息:

被代理的服务器(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. Centos7防火墙开放8080端口

    查看已经开发的端口: firewall-cmd --list-ports 开启端口: firewall-cmd --zone=public --add-port=8080/tcp --permanen ...

  2. ejs-模板

    我今天第一次使用,使用的时候,遇到一些问题,还好有朋友帮我一起解决; 我先说说我使用过程中遇到的问题; 在express框架中引用 app.set('views',__dirname + '/view ...

  3. redis的哨兵模式

    我是在一台服务器上安装了三个redis  一主两从 想安装gcc gcc-c++ make tcl  lrzsz yum -y install gcc gcc-c++ make tcl  lrzsz ...

  4. Python学习笔记第十六周

    目录: 一.CSS补充 1.页面布局 二.JavaScript补充 1.条件判断 2.函数分类 3.序列化 4.转义 5.eval 6.时间 7.作用域 三.DOM 1.间接查找 文本操作 样式操作 ...

  5. DG搭建方式区分

    DG搭建三种方式: 一.异机恢复,restore database,recover database 二. duplicate target database for standby from act ...

  6. maven工程的多环境配置方案(profile)

    前言: 写一篇水文来打发下时间吧^_^. 在应用开发中, 总会遇到开发/测试/预发布/线上环境, 其环境不同, 其具体的配置项也有所不同, 因此如何快速的切换各个环境配置, 进行打包配置, 成了一个小 ...

  7. [err]default argument given for parameter 3 of '***'

    err ~/src/helper.cpp: In function ‘cv::Mat align_mean(cv::Mat, cv::Rect, float, float, float, float) ...

  8. ES最佳实践之分片使用优化

    Elasticsearch最佳实践之分片使用优化 作者:老生姜 一.遇到的问题 与大多数分布式系统一样,Elasticsearch按照一定的Hash规则把用户数据切分成多个分片,然后打散到不同机器进行 ...

  9. 01 mysql

    Sql语句: Structured Query Language, 结构化查询语言 分类: DDL (数据定义语句) 数据定义语言 - Data Definition Language 用来定义数据库 ...

  10. mvc core2.1 Identity.EntityFramework Core 实例配置 (四)

    https://docs.microsoft.com/zh-cn/aspnet/core/security/authentication/customize_identity_model?view=a ...