当前位置: 首页 > news >正文

nginx用域名http://xx.com/aaa/代理一个网页http://ff.com但是请求资源时发生404

哎,还得是chatgpt,难道就没有人有这种使用场景吗?没查到一个配置是有效的。

  • 我:

    我配置了nginx反向代理,用域名http://xx.com/aaa/代理一个网页http://ff.com,
    但是请求资源时发生404,如何解决,我能够正确获取到dom

  • gpt-4-1106-preview:

    如果你已经成功配置了 Nginx 以使用 http://xx.com/aaa/ 代理到 http://ff.com,但在访问资源时遇到了 404 错误,可能的原因之一是资源的相对路径问题。当你使用子路径代理到另一个网站时,目标网站页面中的资源可能会因为路径不匹配而加载失败。

    例如,如果目标网站(http://ff.com)中有一张图片,其路径为 /images/pic.jpg,则该请求将在代理服务器上转换为 http://xx.com/aaa/images/pic.jpg。但是,如果 Nginx 配置中没有正确地重写资源的路径,资源请求会被发向错误的 URL,导致 404 错误。

    为了解决这个问题,你需要确保 Nginx 的配置能够正确处理路径重写。下面是一个基本的例子,展示如何为 Nginx 设置代理并重写 URL 路径:

      server {listen 80;server_name xx.com;location /aaa/ {proxy_pass http://ff.com/; # 确保末尾有斜杠proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 重写路径:移除 `aaa`rewrite ^/aaa/(.*) /$1 break;# 如果需要,处理 HTML 内嵌资源的路径问题sub_filter 'src="/' 'src="/aaa/';sub_filter 'href="/' 'href="/aaa/';sub_filter_once off;}}
    

    在这个配置中,rewrite 指令用于从传入的请求 URL 中删除 /aaa/ 子路径,保持后端请求的正确性。sub_filter 指令用于处理返回的 HTML 内容,将资源的路径前缀修改为 /aaa/,使它们在反向代理环境中有效。请注意,这可能需要 Nginx 的 ngx_http_sub_module 模块支持。

    确保重写规则和替换操作符合你的实际需求,它们可能需要根据实际网站的结构进行调整。

    最后,不要忘记重新加载或重新启动 Nginx 以应用更新后的配置:

    sudo nginx -s reload
    # 或者
    sudo systemctl reload nginx
    

    一定要仔细检查网站的 HTML 和相关资源请求,确保所有的资源路径都能正确反映反向代理的结构。

    剩余的问题

    • 对于*.svg文件请求依然是404,不看图又不会死,直接不解决。

    • 对于api请求是404,哎懒得折腾了,直接把api请求单独重定向到一个同名路由成功访问,出现冲突了再说吧。
      像这样:

         location /api/ {proxy_pass http://127.0.0.1:8085/api/;}
      

相关文章:

  • Transformer的PyTorch实现之若干问题探讨(一)
  • CSP-动态规划-最长公共子序列(LCS)
  • Zig、C、Rust的Pk1
  • C++ //练习 6.30 编译第200页的str_subrange函数,看看你的编译器是如何处理函数中的错误的。
  • λ-矩阵的多项式展开
  • Socket.D 开源输传协议 v2.4.0 发布
  • 基金分类
  • vLLM vs Text Generation Interface:大型语言模型服务框架的比较
  • C#使用密封类密封用户信息
  • 2023全球云计算市场份额排名
  • Oracle中怎么设置时区和系统时间
  • Bitcoin Bridge:治愈还是诅咒?
  • tsgctf-2021-lkgit-无锁竞争-userfaultfd
  • 电路设计(15)——篮球赛24秒违例倒计时报警器的proteus仿真
  • Flink从入门到实践(二):Flink DataStream API
  • 深入了解以太坊
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Android开源项目规范总结
  • crontab执行失败的多种原因
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • gcc介绍及安装
  • interface和setter,getter
  • Java-详解HashMap
  • laravel5.5 视图共享数据
  • magento2项目上线注意事项
  • MobX
  • Mysql5.6主从复制
  • node学习系列之简单文件上传
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • TCP拥塞控制
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue 配置sass、scss全局变量
  • vue-cli在webpack的配置文件探究
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 读懂package.json -- 依赖管理
  • 关于List、List?、ListObject的区别
  • 我的zsh配置, 2019最新方案
  • 消息队列系列二(IOT中消息队列的应用)
  • 《天龙八部3D》Unity技术方案揭秘
  • 7行Python代码的人脸识别
  • Nginx实现动静分离
  • 国内开源镜像站点
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​插件化DPI在商用WIFI中的价值
  • # 飞书APP集成平台-数字化落地
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #WEB前端(HTML属性)
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (七)Knockout 创建自定义绑定
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化