nginx反向代理配置里的location 反斜杠用法

两台nginx服务器

nginx A: 192.168.1.48

nginx B: 192.168.1.56

一. 测试方法

在nginx A中配置不同的规则,然后请求nginx A: http://192.168.1.48/foo/api

观察nginx B收到的请求,具体操作是查看:‘http://‘.$_SERVER[‘HTTP_HOST‘].$_SERVER[‘PHP_SELF‘].‘?‘.$_SERVER[‘QUERY_STRING‘];

二. 测试过程及结果

案例1

nginx A配置:

location /foo/ {
  proxy_pass http://192.168.1.56/;
} 

nginx B收到的请求:/api

案例2

nginx A配置:

location /foo {
  proxy_pass http://192.168.1.56/;
} 

nginx B收到的请求://api

案例3

nginx A配置:

location /foo {
  proxy_pass http://192.168.1.56;
} 

nginx B收到的请求:/foo/api

案例4

nginx A配置:

location /foo/ {
  proxy_pass http://192.168.1.56;
} 

nginx B收到的请求:/foo/api

案例5

nginx A配置:

location /foo/ {
  proxy_pass http://192.168.1.56/bar/;
} 

nginx B收到的请求:/bar/api

案例6

nginx A配置:

location /foo {
  proxy_pass http://192.168.1.56/bar/;
} 

nginx B收到的请求:/bar//api

案例7

nginx A配置:

location /foo/ {
  proxy_pass http://192.168.1.56/bar;
} 

nginx B收到的请求:/barapi

案例8

nginx A配置:

location /foo {
  proxy_pass http://192.168.1.56/bar;
} 

nginx B收到的请求:/bar/api

看到这里是不是都晕了呢,其实是有规律的

现在把这些案例按表格排列起来,结果表示nginx B收到的请求

表一

 
案例 location proxy_pass 结果
1 /foo/ http://192.168.1.48/ /api
2 /foo http://192.168.1.48/ //api
3 /foo/ http://192.168.1.48 /foo/api
4 /foo http://192.168.1.48 /foo/api

表二

 
案例 location proxy_pass 结果
5 /foo/ http://192.168.1.48/bar/ /bar/api
6 /foo http://192.168.1.48/bar/ /bar//api
7 /foo/ http://192.168.1.48/bar /barapi
8 /foo http://192.168.1.48/bar /bar/api

. 解析

原请求路径:本文中统一为 "/foo/api"

location: 上面表格中的location列

proxy_pass:上面表格中的proxy_pass列

新请求路径:nginx将原请求路径处理过后的字符串

重点对 proxy_pass 进行分析,可以分为3种形式

然后按照ip:port后是否接了字符串归为2类,"/"也是字符串,因此1归为一类,2、3归为一类,下面对这两类情况进行说明

当 proxy_pass 的 ip:port 后未接字符串的时候,nginx 会将原请求路径原封不动地转交给下一站 nginx,如案例3和4

当 proxy_pass 的 ip:port 后接了字符串的时候,nginx 会将 location 从 原请求路径 中剔除,再将剩余的字符串拼接到 proxy_pass 后生成 新请求路径,然后将 新请求路径 转交给下一站nginx(上面一种情况实际上和这个是一样的,只不过剔除的字符串是空串~~)

举个最让人疑惑的例子:案例7。proxy_pass 的 ip:port 后接了字符串 "/bar",因此将 location:"/foo/" 从 原请求路径:"/foo/api" 中剔除,变为"api",再将"api"拼接到proxy_pass: http://192.168.1.48/bar 后生成了新请求url:" http://192.168.1.48/barapi ",因此下一站的nginx收到的请求就是 "/barapi"。

案例6:proxy_pass 的 ip:port 后接了字符串 "/bar/",因此将 location:"/foo" 从 原请求路径 "/foo/api" 中剔除,变为 "/api",再将 "/api" 拼接到proxy_pass: http://192.168.1.48/bar/ 后生成了 新请求路径:" http://192.168.1.48/bar//api ",因此下一站的nginx收到的请求就是 /bar//api。

其它的案例都可以以此类推,现在终于搞明白了,再也不用一头雾水。

转载 https://www.jb51.net/article/146975.htm,仅供自己学习

原文地址:https://www.cnblogs.com/hualingyun/p/11125649.html

时间: 2024-10-25 20:08:10

nginx反向代理配置里的location 反斜杠用法的相关文章

nginx反向代理配置

nginx这块了解得不深,这里只简单记录下配置文件,后续再做补充. 一.反向代理的配置 server { listen 80; #配置监听的端口 server_name zxy1994.com; #访问域名 proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; p

nginx反向代理配置两个不同服务器

1.什么是反向代理通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet上的web服务器发起请求,最终达到客户机上网的目的(也就是正向代理). 而反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现

FastDFS安装与nginx反向代理配置

操作系统 Ubuntu Server nginx相关软件 nginx-1.10.1 http://nginx.org/en/download.html nginx清除缓存模块 ngx_cache_purge-2.3 http://labs.frickle.com/nginx_ngx_cache_purge/ pcre-8.36 https://sourceforge.net/projects/pcre/files/pcre/8.36/ zlib库 http://zlib.net/zlib-1.2

Nginx反向代理配置配置实例

为了节省支出,公司需要将分布在不同机器的站点都迁移到一台机器,而目前不同机器运行的是不同的web服务,部分是nginx,部分是apache,由于牵涉较多rewrite规则,为了节省修改功夫,打算迁移后相应站点依然使用原来的web服务,但是同一台机器80端口只能分配给一种web服务使用,于是计划nginx使用80,apache使用其它端口例如8088,通过nginx反向代理,使apache的站点从80端口跳转到8088端口. 1.nginx和apache的安装过程略过 2.nginx的api.12

nginx反向代理配置详解

反向代理配置 修改部署目录下conf子目录的nginx.conf文件(如/opt/nginx/conf/nginx.conf)内容,可调整相关配置. 将默认配置里面带#号注释内容去掉 grep -v "#" /opt/nginx/conf/nginx.conf > /opt/nginx/conf/nginx.confbak 将原先的配置修改名字备份一下,后面的没有注释内容的nginx.confbak修改名字为nginx.conf 反向代理配置示例: #定义Nginx运行的用户和用

centos安装Nginx,反向代理配置全过程

1.安装依赖 #gcc安装,nginx源码编译需要 yum install gcc-c++ #PCRE pcre-devel 安装,nginx 的 http 模块使用 pcre 来解析正则表达式 yum install -y pcre pcre-devel #zlib安装,nginx 使用zlib对http包的内容进行gzip yum install -y zlib zlib-devel #OpenSSL 安装,强大的安全套接字层密码库,nginx 不仅支持 http 协议,还支持 https(

(总结)Linux服务器上最简单的Nginx反向代理配置

Nginx不但是一款高性能的Web服务器,也是高性能的反向代理服务器.下面简单说说Nginx的反向代理功能. 反向代理是什么? 反向代理指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部或其他网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端. 简单实现方法: 例如我想在服务器上建一个google.ha97.com的域名用来反向代理访问Google,首先在域名注册商那里的域名管理上为域名google.ha97.com添加A记录到服务器的IP上,再

Nginx反向代理配置可跨域

由于业务需要,同一项目中的前端代码放在静态环境中,而后端代码放在tomcat中,但此时问题却出现了:前端使用ajax请求后端获取数据时出现如下报错 1 XMLHttpRequest cannot load http://b.domain.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://a.domain.com' is therefore not al

qa:c#文本字符串插入双引号:@用法和反斜杠用法

Excel中添加超链接,可以用hyperlink公式,即=hyperlink(src,display); 在stackoverflow中的示例中:http://stackoverflow.com/questions/2905633/add-hyperlink-to-cell-in-excel-2007-using-open-xml-sdk-2-0 CellFormula cellFormula1 = new CellFormula() { Space = SpaceProcessingModeV