服务器上一个域名对应多个前端项目的nginx转发配置

news2024/11/24 19:05:04

场景:

当有两个前端项目A,B的时候,项目A(对应端口8000)和项目B(对应端口8001)分别部署在服务器的不同位置,通过服务器ip+端口都能正常访问单独的项目A和项目B;现在要求两个项目共用一个域名~~也就是说访问http://10.111.182.xxx:8000的时候默认访问项目A的资源,访问http://10.111.182.xxx:8000/pages的时候自动代理到项目B的资源

业务场景:h5嵌入原生开发,有多套独立的h5,要求嵌入原生的域名不分不变,但是路由发生变化的时候代理到不同的独立h5项目,也就是2个前端项目,如何通过一个端口来访问

服务器配置

部署单个项目并为其配置单独的ngx转发

1.将打包后的静态资源放置服务器上,位置自己选择但是记住路径

2.配置nginx;通常在服务器上的/etc/nginx/conf.d

新建一个后缀为.conf的文件

server {
    #指定服务器监听的端口号,这里是 8001
    listen 8001;
    #定义服务器名称,在这里是 localhost。
    server_name localhost;
    # 根请求会指向的页面,指定服务器的根目录,将请求映射到该目录下的文件。
    root /home/wwwroot/testB; 
    #在响应头中添加跨域请求的允许访问源。这里的配置允许来自任何来源的请求。
    add_header 'Access-Control-Allow-Origin' '*'; 
    # 根请求会指向的页面定义请求路径为根路径时的处理逻辑。使用 try_files 指令尝试按照顺序查找            
     对应的文件,如果找不到则返回 index.html。
	location / {
            try_files $uri $uri/ /index.html;	    
        }
     # 开启gzip 压缩
    gzip on;
    # 设置gzip所需的http协议最低版本 (HTTP/1.1, HTTP/1.0)
    gzip_http_version 1.1;
    # 设置压缩级别,压缩级别越高压缩时间越长  (1-9)
    gzip_comp_level 4;
    # 设置压缩的最小字节数, 页面Content-Length获取
    gzip_min_length 1000;
    # 设置压缩文件的类型  (text/html)
    gzip_types text/plain application/javascript text/css;

}

 到此B项目的部署完成可以用ip+端口进行访问

接下来要在A项目的ngxin配置文件中进行代理的转发,使在访问A项目的遇到/pages就将资源代理到B项目

server {
    listen 8000;
    server_name localhost;

    root /home/wwwroot/test-A;
 #遇到、pages转项目B
    location ~ ^/pages/.  {
        proxy_buffer_size                       128k;
        proxy_buffers                           32 32k;
        proxy_busy_buffers_size                 128k;
        proxy_set_header   X-Forwarded-Proto    $scheme;
        proxy_set_header   Host                 $http_host;
        proxy_set_header   X-Real-IP            $remote_addr;
        proxy_pass                                      
   http://1xx.1xx.1.xx:8001$1$is_args$args;
    }
#核心对项目B的静态资源的代理
   location ~ ^/static/  {
        proxy_buffer_size                       128k;
        proxy_buffers                           32 32k;
        proxy_busy_buffers_size                 128k;
        proxy_set_header   X-Forwarded-Proto    $scheme;
        proxy_set_header   Host                 $http_host;
        proxy_set_header   X-Real-IP            $remote_addr;
        proxy_pass                              http://1xx.1xx.1.xx:8001$request_uri;
    }
      
#默认访问项目A
        location / {
	
	       try_files $uri $uri /index.html$is_args$query_string;

    }
}
   

资源目录如上。当在进行转发的时候会发现nginx代理转发后报错,无法显示页面。原因是指找到了index.html文件,没有对静态资源js,css等进行匹配,所以这部分资源并没有代理到,所以访问不了。出现在配置nginx的时候,proxy_pass 单独访问可以访问,配置后代理不过去报错 Unexpected token '<'。

解决办法是找到没有代理到的资源将其加入ngx代理匹配;例如

 location ~ ^/static/  {
        proxy_buffer_size                       128k;
        proxy_buffers                           32 32k;
        proxy_busy_buffers_size                 128k;
        proxy_set_header   X-Forwarded-Proto    $scheme;
        proxy_set_header   Host                 $http_host;
        proxy_set_header   X-Real-IP            $remote_addr;
        proxy_pass                              http://1xx.1xx.1.xx:8001$request_uri;
    }

如果资源目录是其他的情况的就看是什么资源没有代理到,就去配置一个

核心调试:浏览器打开,看资源请求是否成功,未成功的是什么资源分析未成功原因,是为代理到还是资源本身不存在,一般来说是没有请求到资源,然后对对应的资源进行代理配置

tip:参数详解

在 Nginx 的配置文件中,location ~ ^/pages/. 是一个正则表达式匹配规则,它匹配以 “/pages/” 开头的 URL 路径。

而 proxy_pass http://1xx.1xx.1.xxx:8001$1$is_args$args; 是将匹配到的请求代理到目标服务器的指令。其中的 $1$is_args$args 是一个变量,表示将匹配到的路径传递给代理服务器。

具体解释如下:

  • $1 表示正则表达式 ^/pages/(.*) 中的捕获组,即匹配到的路径片段。
  • $is_args 表示一个内置变量,如果请求包含参数则值为 “?”,否则为空。
  • $args 表示一个内置变量,保存请求中的参数部分(例如 ?key=value)。

所以,proxy_pass 配置中的 $1$is_args$args 的作用是将匹配到的路径片段、参数部分传递给代理目标的 URL。最终形成类似 http://1xx.1xx.1.xxx:8001/pages/abc?key=value 的代理请求。

如果在 proxy_pass 配置中没有 $1,则代表没有使用正则表达式捕获组来获取匹配到的路径片段。在这种情况下,proxy_pass 配置将直接代理原始请求的完整 URL(包括路径、参数、协议等)到目标服务器。

例如,假设原始请求的 URL 是 http://example.com/pages/abc?key=value,而 proxy_pass 配置为 proxy_pass http://1xx.1xx.1.xxx:8001;,那么代理服务器将会将请求发送到 http://1xx.1xx.1.xxx:8001,并保留原始的路径和参数。

需要注意的是,如果没有使用正则表达式捕获组来获取路径片段,那么目标服务器将无法获取和处理原始请求的路径信息。

在 Nginx 中,$request_uri 是一个变量,它包含了当前请求中的完整原始 URI,包括路径和参数。当使用 proxy_pass 指令进行代理时,可以将 $request_uri 添加到目标 URL 中,以便将完整的原始 URI 发送到目标服务器。

在你提供的配置中,proxy_pass 指令使用了 http://192.168.1.252:8002$request_uri; 这个目标 URL。这意味着对于每个请求,Nginx 会将完整的原始 URI 添加到目标 URL 后面,以便代理服务器可以接收完整的请求路径和参数。

例如,如果发起的请求是 http://your-domain.com/static/js/app.js?key=value,那么 proxy_pass 将会将请求代理到 http://192.168.1.252:8002/static/js/app.js?key=value

通过使用 $request_uri 变量,可以确保代理请求中包含原始 URI 的所有信息,以便目标服务器正确处理和响应请求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1006758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工作中有许多比较常用的SQL脚本

工作中有许多比较常用的SQL脚本&#xff0c;今天开始分几章分享给大家。 1、行转列的用法PIVOTCREATE table test (id int,name nvarchar(20),quarter int,number int) insert into test values(1,N苹果,1,1000) insert into test values(1,N苹果,2,2000) insert into test va…

整理一下5个全国化的股票十倍杠杆正规平台(2023最大十倍杠杆炒股平台)

在全国范围内&#xff0c;有诸多优秀的杠杆平台可供选择。本文将介绍5个全国化的股票十倍杠杆正规平台&#xff1a;红腾网、广瑞网、一鼎盈、广盛网、富灯网。 1. 红腾网 红腾网是国内的一家知名杠杆交易平台&#xff0c;平台以高效、便捷、安全的特点著称。 2. 广瑞网 广瑞…

拿走吧你,Fiddler模拟请求发送和修改响应数据

模拟伪造请求 方法一&#xff1a;打断点模拟HTTP请求 1、浏览器页面填好内容后&#xff08;不要操作提交&#xff09;&#xff0c;打开fiddler&#xff0c;设置请求前断点&#xff0c;点击菜单fiddler,”Rules”\”Automatic Breakpoints”\”Before Requests” 2、在页面上点…

数字孪生的实用性为何遭受质疑?这篇文章为你解答

数字孪生技术的实用性体现在哪&#xff1f;数字孪生技术不仅是当今科技领域的热点&#xff0c;也是各行各业不断探索和应用的新兴领域。这项技术的实用性在于它的多领域适用性和巨大潜力。然而&#xff0c;目前有许多声音认为数字孪生技术是一项“没用”的技术&#xff0c;仅仅…

扑克牌QB/T 2228标准

QB/T 2228-2013扑克牌 本标准规定了扑克牌的术语和定义、分类及组成、要求、试验方法、检验规则和标志、包装、运输、贮存。 本标准适用于纸质扑克牌。 规范性引用文件 下列文件对于本文件的应用是必不可少的.凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期…

抖音生活服务“整编”,一场消费与产业的生态共赢

团券、到店、核销&#xff0c;这已经成为当代年轻人出去吃饭、理发等的日常&#xff0c;如同上网买衣服、买手机一样。这样的消费日常背后&#xff0c;稳定已久的生活服务行业再次硝烟弥漫。搅动一池春水的&#xff0c;是抖音等互联网后来者。 根据媒体报道&#xff0c;抖音生…

市场开始复苏,三星传调涨内存芯片高达20% | 百能云芯

随着行动内存芯片市场迹象显示出复苏迹象&#xff0c;并且最早在第四季度供不应求&#xff0c;三星电子已宣布将提高动态随机存取存储器&#xff08;DRAM&#xff09;和NAND闪存芯片的价格&#xff0c;幅度达到10%~20%。 韩国经济日报报道&#xff0c;知情人士透露&#xff0c;…

四川玖璨电子商务有限公司:怎么做视频运营?

视频运营是指通过策划、发布和推广视频内容&#xff0c;以吸引更多的用户观看&#xff0c;并实现商业价值的过程。在当今数字化时代&#xff0c;视频已经成为人们获取信息、娱乐消遣的重要方式之一&#xff0c;因此&#xff0c;如何做好视频运营成为了各大平台和个人所关注的焦…

有了这个Python库,免费实现验证码识别

在做UI自动化时&#xff0c;无论是APP还是Web在登录页面经常会遇到需要输入验证码的时候&#xff0c;网上也有很多方法进行帮助我们&#xff0c;比如通过百度OCR的接口或者其他平台的开源接口&#xff0c;但是大多数都是收费的&#xff0c;对于我们个人学习非常不友好。 以前小…

[Java] String详解

愿一分耕耘,一份收获 文章目录 前言1. String基础概念2. String对象的比较2.1 与equals()的应用 3. 字符串的转化3.1 数字与字符串的转化3.2 大小写转换3.3 字符串与字符数组转换4. 字符串修改1.引入库2.读入数据 总结 前言 String这部分是面试中常常考到的题.string常量池,Sr…

流量录制回放工具在自动化测试领域应用探索

引言&#xff1a; 随着中国农业银行技术架构的日益更迭与业务场景的不断创新&#xff0c;测试工作正在面临数据构造繁琐、案例维护成本较高且质量参差不齐等诸多问题与挑战&#xff0c;主要体现在以下四方面&#xff1a; 一是在系统架构升级与代码重构时&#xff0c;大量原始接…

01_kafka_环境搭建安装_topic管理

文章目录 安装jdk配置主机名Zookeeper 下载与安装Kafka 下载与安装测试集群版安装测试输出 安装jdk 略 配置主机名 hostnamectl set-hostname kafka_1 /etc/sysconfig/network HOSTNAMEkafka_1/etc/hosts ip kafka_1ping kafka_1 测试 Zookeeper 下载与安装 由于 集群…

科技云报道:青云科技为何成为IDC云转型的“神队友”?

科技云报道原创。 如今随着出海企业数量的不断增长&#xff0c;跨境业务也逐渐从蓝海变红海&#xff0c;从“价格战”到“智能战”。 一个明显的变化&#xff0c;来自企业对于出海效率的提升。《埃森哲2022中国企业国际化研究》指出&#xff0c;企业想要在出海浪潮中取胜&…

智能合约平台开发指南

随着区块链技术的普及&#xff0c;智能合约平台已经成为了这个领域的一个重要趋势。智能合约可以自动化执行合同条款&#xff0c;大大减少了执行和监督合同条款所需的成本和时间。那么&#xff0c;如何开发一个智能合约平台呢&#xff1f;以下是一些关键步骤。 一、选择合适…

赴日IT工作 日本的IT工作怎么样?

有许多朋友困惑去日本做IT需要什么条件&#xff1f;日本的IT工作怎么样&#xff1f;今天我来给大家简单分析一下。如果你想要去做赴日IT工作&#xff0c;需要国内正规本科或大专学历及以上才可以&#xff0c;然后就是你的技术和日语要过关&#xff0c;比较重要的是日语&#xf…

cleanmymac这个软件怎么样?好用吗

cleanmymac是我必装的mac端清理软件&#xff0c;界面简洁好看&#xff0c;完美适配mac系统&#xff0c;文件清理的速度、精度都比较优秀&#xff0c;还是比较不错的呢。 虽然说mac平时不需要大量维护进行清理但是有一些临时文件、软件残留、系统缓存、下载安装包还是会日积月累…

Java笔记:GC日志

1. 启用GC日志 -verbose:gc -XX:PrintGC -XX:PrintGCDetails -XX:PrintGCDateStamps -Xloggc:/opt/logs/gc.log在JDK 8中&#xff0c; -verbose:gc是 -XX:PrintGC一个别称&#xff0c;日志格式等价与&#xff1a; -XX:PrintGC。 不过在JDK 9中 -XX:PrintGC被标记deprecated…

香港渣打银行个人开户

渣打银行成立于1853年&#xff0c;全称为标准渣打银行&#xff0c;总部设在英国伦敦&#xff0c;渣打银行是香港最大的外商独资注册银行&#xff0c;是香港的三大发钞银行之一。 一、渣打银行开个人户条件&#xff1f; 在渣打银行开户所需要的条件和在其他银行开户所需要的条件…

若依注册的时候给个默认部门出现获取用户信息异常

想在注册的时候在数据库中查询一个部门给它一个默认部门&#xff0c;结果出现异常——【[handleServiceException,59] - 获取用户信息异常】 经分析代码&#xff0c;此方法有如下注解 以上注解会在mapper.xml中做如下操作 在做此操作之前会进入一个拦截器&#xff0c;根据token…

Win10 update version 22H2

下载 Windows 10 下载新版本win10 安装新版本win10 1703 更新到最新版本 22H2 2023.09.12 20:20 到 2023.09.12 23:44