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

2024-02-13 06:44

本文主要是介绍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/;}
      

这篇关于nginx用域名http://xx.com/aaa/代理一个网页http://ff.com但是请求资源时发生404的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/704778

相关文章

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

Python如何获取域名的SSL证书信息和到期时间

《Python如何获取域名的SSL证书信息和到期时间》在当今互联网时代,SSL证书的重要性不言而喻,它不仅为用户提供了安全的连接,还能提高网站的搜索引擎排名,那我们怎么才能通过Python获取域名的S... 目录了解SSL证书的基本概念使用python库来抓取SSL证书信息安装必要的库编写获取SSL证书信息

Nginx配置location+rewrite实现隐性域名配置

《Nginx配置location+rewrite实现隐性域名配置》本文主要介绍了Nginx配置location+rewrite实现隐性域名配置,包括基于根目录、条件和反向代理+rewrite配置的隐性... 目录1、配置基于根目录的隐性域名(就是nginx反向代理)2、配置基于条件的隐性域名2.1、基于条件

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超