反向代理时URI的处理

技术文档网 2021-04-16

当使用proxy_pass的时候,请求的URI传递给服务器是有一定的规则的。

proxy_pass带有URI

比如下面的配置:

location /name/ {
    proxy_pass http://127.0.0.1/remote/;
}

location /name/{
    proxy_pass http://127.0.0.1/
}

后面的/remote//都是URI。在这种情况下,location中匹配的URI会被替换为proxy_pass中的URI,其他的则保持不变传递给服务器。 比如访问http://xxx/name/test.php,那么实际到达服务器的是:http://xxx/remote/test.php

请求如果是http://xxx/name那么会返回一个301的永久跳转http://xxx/name

proxy_pass没有带URI

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

这个时候,原请求的URI原封不动地传递给服务器。比如http://xxx/name/,则最后传递给服务器的是http://127.0.0.1/name/

location中使用了正则表达式

这种情况下,proxy_pass不该带有URI.

location配置中含有重写

这个时候,重写之后的URI整个被传递给服务器。

proxy_pass中含有变量

这个时候,则会替换原有请求的URI。

比如:

location /test/ {
    set $uritest "/abc/";
    proxy_pass http://127.0.0.1:91$uritest;
}

访问http://xxx/test/output.php的话,那么实际上发现服务器的会是:http://127.0.0.1/abc/,而不会是http://127.0.0.1/abc/output.php,因为这个是替换全部的URI,而不是跟第一条一样,是替换部分URI。

nginx中关于proxy_pass的描述:https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

相关文章

  1. app多版本的服务端部署

    背景 手机客户端按一定周期发版,但是客户不一定会及时更新到最新版本,所以需要服务端能支持旧版手机客户端。 服务端支持旧版手机客户端的方式主要有: 相同的接口支持不同版本手机端的请求,需要服务端接口

  2. 反向代理时URI的处理

    当使用proxy_pass的时候,请求的URI传递给服务器是有一定的规则的。 proxy_pass带有URI 比如下面的配置: location /name/ { proxy_pass htt

  3. nginx-echo-命令引发的探索

    起因 最初在 nginx.conf 中调试时,当时希望 echo 出对应的变量值,并没有成功。起初认为是 nginx 安装时,并没有安装 echo 模块,然而事后发现实际用的是 openresty,o

  4. nginx499状态码产生的原因

    什么是 nginx 的 499 499 是 nginx 扩展的 4xx 错误,目的只是用于记录,并没有实际的响应。看一下 nginx 源码 ngx_http_request.h 对 499 的定义:

  5. Nginx配置文件参数说明

    定义Nginx运行的用户和用户组 user www www; nginx进程数,建议设置为等于CPU数量*核数。 worker_processes 8; 全局错误日志定义类型,[ debug |

随机推荐

  1. app多版本的服务端部署

    背景 手机客户端按一定周期发版,但是客户不一定会及时更新到最新版本,所以需要服务端能支持旧版手机客户端。 服务端支持旧版手机客户端的方式主要有: 相同的接口支持不同版本手机端的请求,需要服务端接口

  2. 反向代理时URI的处理

    当使用proxy_pass的时候,请求的URI传递给服务器是有一定的规则的。 proxy_pass带有URI 比如下面的配置: location /name/ { proxy_pass htt

  3. nginx-echo-命令引发的探索

    起因 最初在 nginx.conf 中调试时,当时希望 echo 出对应的变量值,并没有成功。起初认为是 nginx 安装时,并没有安装 echo 模块,然而事后发现实际用的是 openresty,o

  4. nginx499状态码产生的原因

    什么是 nginx 的 499 499 是 nginx 扩展的 4xx 错误,目的只是用于记录,并没有实际的响应。看一下 nginx 源码 ngx_http_request.h 对 499 的定义:

  5. Nginx配置文件参数说明

    定义Nginx运行的用户和用户组 user www www; nginx进程数,建议设置为等于CPU数量*核数。 worker_processes 8; 全局错误日志定义类型,[ debug |