nginx代理去掉URl前缀

这篇具有很好参考价值的文章主要介绍了nginx代理去掉URl前缀。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天接到一个配置nginx的需求是:需要访问某个域名时,nginx可以去掉前缀去代理访问到后端

正常配置情况下:
在nginx配置文件中中设置了 location /prod-api/api 时 浏览器访问 /prod-api/api 反向代理到后端服务后,后端服务接收到的url地址实际还是 /prod-api/api

需要实现的功能需求:
访问url路径/prod-api/api经过nginx反向代理后,到达后端服务的实际url地址为/api

以下是原nginx配置文件中location部分的配置内容:

server {
        listen 80;
        server_name localhost;
        charset utf-8;
         
        location / {
        root /usr/share/nginx/html/cashier;
        try_files $uri $uri/ /index.html;
        index index.html index.htm;
    }

    location /prod-api/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:9076;
    }
       access_log /var/log/nginx/access.log main;
       error_log /var/log/nginx/error.log warn;
}

将上述代码修改为如下nginx location代码:

server {
        listen 80;
        server_name localhost;
        charset utf-8;
         
        location / {
        root /usr/share/nginx/html/cashier;
        try_files $uri $uri/ /index.html;
        index index.html index.htm;
    }

    location ^~/prod-api/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:9076/;
    }
       access_log /var/log/nginx/access.log main;
       error_log /var/log/nginx/error.log warn;
}

注意点:

  • 在proxy_pass 反向代理地址最后加一个/
  • 在location匹配的url路径前添加^~/

location ^~/prod-api/:匹配任何以 /prod-api/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条

  • 不可以使用:proxy_set_header Host $http_host;

我在现有环境的nginx里添加这段配置之后,访问会转不过去,查看nginx日志也只能看到是404信息,并没有更多定位问题的信息。检查了许久也没找到原因,于是注释掉location 里面所有配置,里面只加proxy_pass这段配置,结果nginx是能够转发成功的,这说明单独来看这条location的配置是没有问题的,很有可能是现有环境nginx里的某些配置影响到了这个转发。

为了定位问题原因,location下的配置逐个注释来定位问题,最后发现当注释掉proxy_set_header Host $http_host ;这条配置之后,就能成功转发了。这才注意到是反向代理配置的问题。

此配置的作用是:把原http请求的Header中的Host字段也放到转发的请求里。
如果不加这一行的话,nginx转发的请求header里就不会有Host字段,而服务器是靠这个Host值来区分你请求的是哪个域名的资源的。

但是现有环境中原有的配置也不能随便删掉,所以可以进行如下设置:

即,在location里面添加一条 proxy_set_header Host $proxy_host;配置。

设置 proxy_set_header Host $host 时,浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息。此时代码中如果有重定向路由,那么重定向时就会丢失端口信息,导致 404文章来源地址https://www.toymoban.com/news/detail-494965.html

到了这里,关于nginx代理去掉URl前缀的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • axios 多个baseURL配置、实现不同前缀代理到不同的服务器的几种方式

    前言: 在开发中,有可能遇到每部分的功能的需要调用另一台服务器的地址。这个时候就需要设置不同的请求前缀首先代理到不同的服务器地址。 一、axios封装实例以及代理:(不是完整的封装实例,重点在于baseURL的区别) 文件路径:/CMDB/src/utils/request.js 代理的时候有两个前

    2024年02月04日
    浏览(40)
  • windows 系统批量去掉文件名前缀 bat 脚本

    在 Windows 系统上,你可以使用批处理脚本(.bat 文件)来批量去掉文件名的前缀。以下是一个简单的示例脚本,你可以根据自己的需求进行修改: 将上述脚本保存为扩展名为 .bat 的文件,并将 \\\"C:PathToYourFolder\\\" 替换为你想要批量移除文件名前缀的文件夹路径,以及将 \\\"OldPr

    2024年02月13日
    浏览(64)
  • nginx部署vue项目,给访问路径加前缀的方法:vue.config.js配置publicPath和nginx配置alias

    本文主要涉及到 Vue.js 项目部署在 Nginx 上的相关问题。其中,publicPath 选项可以用于设置 Vue.js 项目的访问路径前缀,alias 指令可以用于 Nginx 中将请求路径映射到指定的文件系统路径。同时,通过设置 Nginx 配置文件,可以将多个 Vue.js 项目部署在同一个域名下的不同路径中。

    2024年02月16日
    浏览(53)
  • vue.config.js使用代理配置真实请求url

    前端请求接口过程中会统一配置代理请求url,配置之后浏览器只能看到local host路径。 为方便查看请求的真实ip,需要在vue.config.js中做如下配置,便能在浏览器实时查看到真实地址 配置完重启,效果如下:

    2024年02月13日
    浏览(57)
  • IIS配置反向代理URL rewrite.dll加载失败

    2022年10月9日17:58:33更新: 不要尝试了,以下方法只能转发静态资源,不能转发接口数据。 Windows Server 2012R2 + IIS8.5 + URL Rewrite2.1 安装URL ReWrite后,出现503报错, 事件查看器中显示: 模块 DLL C:Windowssystem32inetsrvrewrite.dll 未能加载。返回的数据为错误信息。 1、双击URLRewrite.ms

    2024年02月06日
    浏览(39)
  • Nginx配置 转发URL中包含特殊字符

    Nginx经常被用来作为代理服务器,可以有效的避免跨域问题。 老项目需要对接一个新的服务,但是存在跨域问题,然后就配置了一个代理 可是突然在某天,新接口出现了异常。接口报了400错误。 然后定位发现新接口url比较特殊还不能修改,在其他的地方也用了,整个URL中包

    2024年02月05日
    浏览(46)
  • 使用Nginx进行URL转发的配置示例

    Nginx是一个高性能的Web服务器和反向代理服务器,它还可以用于URL转发。在本教学文章中,我们将从安装Nginx开始,逐步介绍配置步骤,并展示一个URL转发的案例。 步骤1:安装Nginx 首先,我们需要安装Nginx。以下是在Ubuntu系统上安装Nginx的步骤: 打开终端窗口,并执行以下命

    2024年02月10日
    浏览(50)
  • Nginx代理nginx.conf配置——nginx对静态文件代理

    如果需要将资源代理到不同的目录下,则在nginx.conf中的server节点下进行如下配置: 修改后,重新加载nginx配置即可,nginx部分命令如下: 在server中添加如下配置(示例listen端口为80) 访问:localhost/video/demo.mp4即可访问

    2024年02月08日
    浏览(57)
  • 使用nginx简单搭建一个ChatGPT代理服务器

    作者:ChenZhen 本人不常看CSDN消息,有问题通过下面的方式联系: 邮箱:1583296383@qq.com vx: ChenZhen_7 我的个人博客地址:https://www.chenzhen.space/🌐 版权:本文为博主的原创文章,本文版权归作者所有,转载请附上原文出处链接及本声明。📝 如果对你有帮助,请给一个小小的sta

    2024年02月06日
    浏览(76)
  • Nginx代理nginx.conf配置——反向代理(对WebSocket支持)

    基于Nginx代理nginx.conf配置——反向代理,如果要添加websocket支持,需要进行如下配置 在http中添加一下配置,添加对websocket支持 配置后重新运行nginx后,websocket即可成功代理。 注意防火墙端口是否开放、nginx如果使用docker,其对应的端口是否映射出来。

    2024年02月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包