返回顶部
首页 > 资讯 > 精选 >我无法使用反向代理更改主机标头
  • 195
分享到

我无法使用反向代理更改主机标头

2024-02-10 08:02:22 195人浏览 泡泡鱼
摘要

在进行网站开发或维护过程中,有时我们会遇到无法使用反向代理来更改主机标头的问题。这可能会给我们带来一些困扰和限制。在这篇文章中,PHP小编小新将为大家解释为什么会出现这个问题,以及如何

在进行网站开发或维护过程中,有时我们会遇到无法使用反向代理来更改主机标头的问题。这可能会给我们带来一些困扰和限制。在这篇文章中,PHP小编小新将为大家解释为什么会出现这个问题,以及如何解决这个问题。无论你是初学者还是有经验的开发者,本文都将为你提供有用的解决方案和技巧,帮助你克服这个难题,顺利完成你的网站开发工作。

问题内容

我正在为我的后端构建一个反向代理,但我不明白为什么即使我使用我在文档中看到的任何方法更改主机标头它也不会改变。 后端需要真正的主机才能提供正确的内容。

这是代码:

proxy := &Httputil.ReverseProxy{
    Director: func(req *http.Request) {
        targetURL := url.URL{
            Scheme: "http",
            Host:   "backend.com",
            Path:   req.URL.Path,
        }

        req.URL.Scheme = targetURL.Scheme
        req.URL.Host = targetURL.Host
        req.URL.Path = targetURL.Path
        req.Header.Set("Host", targetURL.Host)

    },
    Transport: transport,
}

// Listen on a local port and serve the reverse proxy without buffer method
server := &http.Server{
    Addr:    "localhost:8080",
    Handler: proxy,
}
fmt.Println("Listening on :8080...")
err = server.ListenAndServe()
if err != nil {
    fmt.Println(err)
}

解决方法

如果可以使用(*proxyrequest).seturl添加在 Go1.20 中,这将很简单:

proxy := &httputil.reverseproxy{
    rewrite: func(pr *httputil.proxyrequest) {
        targeturl := url.url{
            scheme: "http",
            host:   "backend.com",
            path:   req.url.path,
        }
        pr.seturl(&targeturl)
    },
    transport: transport,
}

有关更多信息,请参阅此提案:net/http/httputil:用 rewrite 替换 director.

如果无法升级到go1.20,这里有一个针对director的解决方法:

proxy := &httputil.ReverseProxy{
    Director: func(req *http.Request) {
        targetURL := url.URL{
            Scheme: "http",
            Host:   "backend.com",
            Path:   req.URL.Path,
        }

        req.URL.Scheme = targetURL.Scheme
        req.URL.Host = targetURL.Host
        req.URL.Path = targetURL.Path
-       req.Header.Set("Host", targetURL.Host)
+       req.Host = targetURL.Host
+       // or simply:
+       // req.Host = ""
    },
    Transport: transport,
  }

请参阅 http.request.host 的文档:

对于客户端请求,主机可以选择覆盖要发送的主机标头。如果为空,request.write 方法将使用 url.host 的值。

以上就是我无法使用反向代理更改主机标头的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 我无法使用反向代理更改主机标头

本文链接: https://lsjlt.com/news/562946.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 我无法使用反向代理更改主机标头
    在进行网站开发或维护过程中,有时我们会遇到无法使用反向代理来更改主机标头的问题。这可能会给我们带来一些困扰和限制。在这篇文章中,php小编小新将为大家解释为什么会出现这个问题,以及如何...
    99+
    2024-02-10
  • WSL2-解决无法ping通主机/配置使用主机代理
    WSL2无法ping通主机 省流:如果主机能ping通wsl从机,从机ping不通主机,大概率是防火墙拦截了,可以以管理员身份在powershell中运行下面的代码,或者手动在防火墙设置中添加相应的出...
    99+
    2023-09-10
    服务器 windows linux
  • centos7更改机器名后oracle无法使用
     1、更改机器名称 ~]# hostnamectl --static set-hostname oracle2、 ~]# su ...
    99+
    2024-04-02
  • 阿里云虚拟主机反向代理怎么用不了了呀
    简介 阿里云虚拟主机是一种基于云计算技术的虚拟主机服务,可以提供稳定可靠的网站托管环境。在使用阿里云虚拟主机时,有时候可能会遇到反向代理无法正常使用的问题。本文将为您介绍可能导致反向代理无法使用的原因,并提供相应的解决方法。反向代理无法使用...
    99+
    2024-01-30
    阿里 虚拟主机
  • 苹果手机如何在阿里云上使用反向代理
    反向代理是一种网络技术,通过服务器代理访问其他服务器。对于苹果手机用户来说,他们可以通过使用反向代理来访问阿里云上的资源。本文将详细介绍如何在苹果手机上设置反向代理,以访问阿里云上的资源。 一、准备工作首先,你需要有一台支持反向代理的服务器...
    99+
    2023-11-12
    阿里 苹果 如何在
  • 阿里云的IP组建代理池在苹果手机上无法使用的原因及解决方法
    在使用阿里云的IP组建代理池时,如果苹果手机无法使用,可能是因为以下几个原因:苹果手机的网络设置、系统版本、防火墙设置、网络环境等。本篇文章将针对这些原因,给出相应的解决方法。 一、苹果手机网络设置问题苹果手机的网络设置问题可能是造成无法...
    99+
    2023-11-18
    阿里 解决方法 机上
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作