1.在nginx中配置proxy_pass代理转发时:

  • 如果在proxy_pass后面的url加/,表示绝对根路径;

  • 如果没有/,表示相对路径,把匹配的路径部分也给代理走。

在 Nginx 的反向代理配置中,location后面的规则带斜杆和不带斜杆是有区别的。如果 location 后面的规则不带斜杆,如 location /api,那么只有完全匹配 /api 的请求才会被转发到指定的代理服务器。如果location后面的规则带斜杆,如 location /api/,那么以 /api 开头的所有请求都会被转发到指定的代理服务器。

  • 举个例子,如果 location /api 转发到 http://backend/api,那么以下请求将被转发:

  • http://example.com/api

  • http://example.com/api/123

  • http://example.com/api/hello

  • 但是以下请求不会被转发:

  • http://example.com/api123

  • http://example.com/apixyz

  • 如果 location /api/ 转发到 http://backend/api/,那么以下请求将被转发:

  • http://example.com/api

  • http://example.com/api/123

  • http://example.com/api/hello

  • http://example.com/api/xyz

总之,需要根据实际情况选择是否在 location 后面的规则带斜杆,以确保请求能够正确地转发到指定的代理服务器。

反向代理配置:proxy_pass URL后面加斜杆和不加斜杆的区别


在Nginx反向代理中,URL后面加斜杆和不加斜杆是有区别的。如果URL后面不加斜杆,Nginx会认为这是一个文件或目录,会根据所配置的代理规则进行转发。

例如,如果请求的URL为 http://example.com/myapp,而代理规则为 proxy_pass http://127.0.0.1:8080/myapp;,则Nginx会将请求转发到 http://127.0.0.1:8080/myapp。

如果URL后面加斜杆,Nginx会认为这是一个目录,会将请求转发到该目录下的默认页面或索引文件。例如,如果请求的URL为 http://example.com/myapp/,而代理规则为 proxy_pass http://127.0.0.1:8080/myapp/;,则Nginx会将请求转发到 http://127.0.0.1:8080/myapp/index.html 或 http://127.0.0.1:8080/myapp/index.php 等默认页面。

因此,在配置Nginx反向代理时,需要根据实际情况选择是否在URL后面加斜杆,以确保请求能够正确地转发到目标服务器。当在后面的url加上了/,相当于是绝对根路径,则 nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走。

location与proxy_pass结合实现反向代理的四种问题


问题描述

  • 问题1:location后面规则带斜杆,proxy_pass URL后面也带斜杆

  • 问题2:location后面规则不带斜杆,proxy_pass URL后面带斜杆

  • 问题3:location后面规则带斜杆,proxy_pass URL后面不带斜杆

  • 问题4:location后面规则不带斜杆,proxy_pass URL后面不带斜杆

上面四种情况下的转发请求的效果是啥?

问题剖析

问题1:后面规则带斜杆,proxy_pass URL后面也带斜杆

  • 这种情况下,请求的URL中如果有斜杆,那么斜杆将被保留,请求将被转发到以 /proxy_pass_url/ 开头的URL。

# 例如,如果配置如下:
location /api/ {
proxy_pass http://backend/api/;
}
  • 那么以下请求将被转发:

  • http://example.com/api/ -> http://backend/api/

  • http://example.com/api/users -> http://backend/api/users

  • http://example.com/api/users/123 -> http://backend/api/users/123

问题2:location后面规则不带斜杆,proxy_pass URL后面带斜杆

  • 这种情况下,请求的URL中如果没有斜杆,那么斜杆将被添加,请求将被转发到以 /proxy_pass_url/ 结尾的URL。


# 例如,如果配置如下:
location /api {
proxy_pass http://backend/api/;
}
  • 那么以下请求将被转发:

  • http://example.com/api -> http://backend/api/

  • http://example.com/api/users -> http://backend/api/users/

  • http://example.com/api/users/123 -> http://backend/api/users/123/

问题3:location后面规则带斜杆,proxy_pass URL后面不带斜杆

  • 这种情况下,请求的URL中如果有斜杆,那么斜杆将被保留,请求将被转发到以 /proxy_pass_url 结尾的URL。


# 例如,如果配置如下:
location /api/ {
proxy_pass http://backend/api;
}
  • 那么以下请求将被转发:

  • http://example.com/api/ -> http://backend/api

  • http://example.com/api/users -> http://backend/api/users

  • http://example.com/api/users/123 -> http://backend/api/users/123

问题4:location后面规则不带斜杆,proxy_pass URL后面不带斜杆

  • 这种情况下,请求的URL中如果没有斜杆,那么斜杆将被添加,请求将被转发到以 /proxy_pass_url 结尾的URL。


# 例如,如果配置如下:
location /api {
proxy_pass http://backend/api;
}
  • 那么以下请求将被转发:

  • http://example.com/api -> http://backend/api

  • http://example.com/api/users -> http://backend/api/users

  • http://example.com/api/users/123 -> http://backend/api/users/123

问题总结

通过上述四种情况的说明,我们可以得出以下结论:

  • 当location后面规则和proxy_pass URL后面都带斜杆时,如果请求的URL中也带有斜杆,Nginx会将请求转发到proxy_pass指定的URL;如果请求的URL中没有斜杆,Nginx会自动加上一个斜杆后再进行转发。

  • 当location后面规则不带斜杆,但proxy_pass URL后面带斜杆时,如果请求的URL中带有斜杆,Nginx会将请求转发到proxy_pass指定的URL;如果请求的URL中不带斜杆,Nginx会自动加上一个斜杆后再进行转发。

  • 当location后面规则带斜杆,但proxy_pass URL后面不带斜杆时,如果请求的URL中也带有斜杆,Nginx会将请求转发到proxy_pass指定的URL;如果请求的URL中没有斜杆,Nginx会自动去掉location后面规则中的斜杆后再进行转发。

  • 当location后面规则和proxy_pass URL后面都不带斜杆时,如果请求的URL中也不带斜杆,Nginx会将请求转发到proxy_pass指定的URL;如果请求的URL中带有斜杆,Nginx会自动去掉proxy_pass URL后面的斜杆后再进行转发。

这些区别可能看起来微小,但它们对于URL的匹配和转发却有很大的影响,因此在Nginx的配置中要特别注意。

2. location配置

语法规则

location [=|~|~*|^~|!~|!~*] /uri/ { … }

模式含义

location = /uri= 表示精确匹配

location ^~ /uri^ 进行前缀匹配,~ 表示区分大小写

location ~ pattern~ 区分大小写的匹配

location ~* pattern~* 不区分大小写的匹配

location /uri不带任何修饰符,也表示前缀匹配,但是在正则匹配之后

location /通用匹配,任何未匹配到其它 location 的请求都会匹配到,相当于 switch 中的 default

location !~区分大小写不匹配

location !~*不区分大小写不匹配


匹配优先级

  • 首先精确匹配 =

  • 其次前缀匹配 ^~

  • 其次是按文件中顺序的正则匹配

  • 然后匹配不带任何修饰的前缀匹配

  • 最后是交给 / 通用匹配

  • 当有匹配成功时候,停止匹配,按当前匹配规则处理请求

3、关系,区别及用法:

Nginx 中有两个模块都有proxy_pass指令。

  • ngx_http_proxy_module 的 proxy_pass:

语法: proxy_pass URL;场景: location, if in location, limit_except说明: 设置后端代理服务器的协议(protocol)和地址(address),以及location中可以匹配的一个可选的URI。协议可以是"http"或"https"。地址可以是一个域名或ip地址和端口,或者一个 unix-domain socket 路径。 详见官方文档: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_passURI的匹配,本文第四部分重点讨论。

  • ngx_stream_proxy_module 的 proxy_pass:

语法: proxy_pass address;场景: server说明: 设置后端代理服务器的地址。这个地址(address)可以是一个域名或ip地址和端口,或者一个 unix-domain socket路径。 详见官方文档: http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_pass

反向代理配置:location 后面的规则带斜杆和不带斜杆的区别相关推荐

  1. linux nginx反向代理配置

    linux  nginx反向代理配置 location ^~/api/ {proxy_pass http://192.168.1.50:82/; }

  2. Nginx配置location及rewrite规则

    Nginx配置location及rewrite规则 示例: location  = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location ...

  3. nginx location 匹配 多个规则_nginx配置location与rewrite规则教程

    nginx配置location与rewrite规则教程 location 教程 示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ...

  4. Nginx安装/负载均衡/反向代理配置与调优

    [Nginx安装] Linux下直接使用包管理安装 sudo apt-get install nginx 使用whereis命令查看安装位置 whereis nginx #sbin下代表nginx可执 ...

  5. nginx反向代理模块配置详解_nginx反向代理配置详解

    反向代理配置 修改部署目录下conf子目录的nginx.conf文件(如/opt/nginx/conf/nginx.conf)内容,可调整相关配置. 将默认配置里面带#号注释内容去掉 grep -v ...

  6. ci框架 反向代理配置_docker-compose配置Nginx反向代理禅道

    本次项目会用到3个镜像分别是nginx.mysql 和禅道,以后若迁移服务器环境则只需下载这3个镜像即可 mysql与禅道镜像下载与构建参考:mysql   禅道 目录介绍 cloud # 文件名 + ...

  7. isam 驱动程序 下载_将ISAM反向代理配置为与OpenID连接提供程序的PEP

    isam 驱动程序 下载 注意:截至2017年5月9日,"执行测试流程"部分(在"步骤2.将反向代理配置为OpenID Connect的联系点"部分中)下的代码 ...

  8. 正向代理和Nginx反向代理配置介绍

    正向代理和Nginx反向代理配置介绍 * Author QiuRiMangCao 秋日芒草* 正向代理(代理对象是pc) 是一个位于客户端(pc)和原始服务器(google.com)之间的服务器 场景 ...

  9. Nginx http和反向代理配置实例介绍

    Nginx  是一个高性能的 HTTP 和反向代理服务器,本节以实际实例介绍如何实现Nginx 反向代理. 1.  安装Nginx 安装Nginx之前,首先安装相关模块的依赖库: 这里安装Pcre和O ...

最新文章

  1. 从脸部识别到火星机器人,正在改变世界的计算机视觉
  2. HDOJ(HDU) 2502 月之数(进制)
  3. 袜子商店应用:一个云原生参照应用
  4. java学习之路之播放一首简单的音乐
  5. Linux shell 脚本中, $@ 和$# 分别是什么意思?
  6. 家族关系查询系统程序设计算法思路_七大查找算法(附C语言代码实现)
  7. Spark入门阶段一之扫盲笔记
  8. 理解Attention机制原理及模型
  9. NYOJ题目96 n-1位数
  10. 电脑音量图标不见了,该如何找回?
  11. 信贷违约风险评估模型(下篇):机器学习模型
  12. 《深入理解Java虚拟机》读书总结
  13. mysql hibernate 乱码_mysql hibernate 乱码
  14. 【数学模拟卷总结】2022李林四套卷数学二第一套
  15. win10修改用户名/指纹无法置入/用户文件没有重命名的选项
  16. 京东物流IPO:商流、物流、资金流,“三流”难归一
  17. 羞羞的和成人机器人恋爱,或许这是“寂寞经济”催生的新风口
  18. 大数据命令,一文在手,全部都有(送纯净版文档)
  19. MATLAB 用拉格朗日插值验证龙格现象
  20. wsappx导致系统崩溃

热门文章

  1. Hash的简介与hashlib模块的使用、模拟撞库与密码加盐
  2. 第十一章 文件操作_C语言fscanf和fprintf函数的用法详解(格式化读写文件)
  3. pc前端js调起电脑本地应用程序(需要客户端配合 自定义URL Protocol 协议 )
  4. 淘宝客如何通过闲鱼引流?淘宝客的推广方法有哪些?
  5. AdaBoost 算法解析
  6. 输入过压保护电路OVP原理和仿真
  7. Maven | filtering,filter和profile标签使用
  8. win10开机一直转圈圈进不去系统怎么办
  9. 你必须知道的家庭急救常识
  10. Python安装Pillow时出现The headers or library files could not be found for zlib/jpeg错误