haproxy:获取主机名

2024-03-08

我正在尝试获取请求者主机/IP,因为它涉及 haproxy 节点。 我的 haproxy 配置如下:

frontend www-http
    bind *:9000
    http-request redirect location https://%fi:9143

frontend www-https
    bind *:9143 ssl crt /root/keys.pem
    reqadd X-Forwarded-Proto:\ https
    default_backend www-backend

backend www-backend
    balance roundrobin
    cookie SERVERID insert indirect nocache
    server server1 1.1.1.1:9080 cookie server1 weight 1 maxconn 1024 check

所以在这里,如果有任何http请求到来,那么我需要转发到https。 现在请求可能带有完全限定形式的 IP 地址或主机名,例如

http://10.10.10.10:9000 

这需要转发到https://10.10.10.10:9143 https://10.10.10.10:9143

同样,请求可能以完全限定的形式出现主机名,例如

http://myhost.domain.com:9000

这需要转发到https://myhost.domain.com:9143 https://myhost.domain.com:9143

基本上 10.10.10.10 和 myhost.domain.com 是同一系统。

现在有了上面的 haproxy 配置,我无法得到下面的内容,因为它是 %fi (frontend_ip),所以它重定向到https://10.10.10.10:9143 https://10.10.10.10:9143

所以我的问题是如何获取 haproxy 节点的 ip/主机。

我尝试了以下选项,但不起作用:

http-request redirect location https://%f:9143
http-request redirect location https://%[req.hdr(Host)]:9143

from https://www.haproxy.com/doc/aloha/7.0/haproxy/log_format_rules.html https://www.haproxy.com/doc/aloha/7.0/haproxy/log_format_rules.html


See 如何在 HAProxy 中设置动态变量? https://stackoverflow.com/questions/39333496/how-do-i-set-a-dynamic-variable-in-haproxy有关更多详细信息,但以此为基础,以下内容应该适合您:

frontend www-http
    bind *:9000

    # Redirect user from http port to https port
    http-request set-var(req.hostname) req.hdr(Host),field(1,:),lower
    http-request redirect code 301 location https://%[var(req.hostname)]:9143 if !{ ssl_fc }

frontend www-https
    bind *:9143 ssl crt /root/keys.pem
    reqadd X-Forwarded-Proto:\ https
    default_backend www-backend

backend www-backend
    balance roundrobin
    cookie SERVERID insert indirect nocache
    server server1 1.1.1.1:9080 cookie server1 weight 1 maxconn 1024 check

我的情况有点不同,因为我只想重定向统计 UI URL,所以我不必去更新内部文档中的每个统计 URL。这是适合我的情况的方法(如果它对其他人有帮助):

userlist stats-auth
    group admin users adminuser
    group readonly users readonlyuser

    # Passwords created via mkpasswd -m sha-512 PASSWORD_HERE
    user adminuser password NOT_REAL_PASSWORD
    user readonlyuser password NOT_REAL_PASSWORD

listen stats

    # Used just for the initial connection before we redirect the user to https
    bind *:4711

    # Combined file containing server, intermediate and root CA certs along
    # with the private key for the server cert.
    bind *:4712 ssl crt /etc/ssl/private/my-site-name_combined_cert_bundle_with_key.pem

    option dontlognull
    mode http
    option httplog

    # Redirect user from http port to https port
    http-request set-var(req.hostname) req.hdr(Host),field(1,:),lower
    http-request redirect code 301 location https://%[var(req.hostname)]:4712/ if !{ ssl_fc }

    acl AUTH            http_auth(stats-auth)
    acl AUTH_ADMIN      http_auth_group(stats-auth) admin

    stats enable

    # The only "site" for using these ports is the admin UI, so use '/' as
    # the base path instead of requiring something like '/haproxy_stats' or
    # '/stats' in order to display the UI.
    stats uri /

    # Force a login if not already authenticated
    stats http-request auth unless AUTH

    # Allow administrator functionality if user logged in using admin creds
    # (there are separate read-only username and password pairs)
    stats admin if AUTH_ADMIN

我省略了前端和后端配置,因为它们更长/更详细。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

haproxy:获取主机名 的相关文章

随机推荐

  • schema 中的方法和属性:Scheme 中是否可以实现 OOP?

    我将用一个简单的例子来说明我的问题 在 Java C 或任何其他 OOP 语言中 我可以创建一个pie类的方式类似于 class Apple public String flavor public int pieces private in
  • 短信 url 方案不适用于 IOS5

    在我的针对 iphone 和 android 的网络应用程序中 我有一个 发短信给我 按钮 单击该按钮后 用户会收到预先填写了号码和正文的短信 这在 ios 5 之前的 iphone 中运行良好 在IOS 5中 点击按钮不会导致短信应用 I
  • C++ 默认构造函数缺失,我无法编译

    我有这个非常简单的课程 class myclass public int id double x y z myclass default If I omit this line I get an error myclass int ID d
  • iPhone - 时区便利方法之间的差异

    我看到NSTimeZone有这些方法 defaultTimeZone localTimeZone systemTimeZone 有人可以简单地向我解释一下这些调用之间有什么区别 以及何时应该使用其中一个而不是另一个 我不明白苹果文档中关于此
  • 如何在使用 STS (WIF) 进行身份验证的 MVC 应用程序中设置滑动过期

    我们正在使用 STS 开发一个 MVC 应用程序 我们使用 WIF 工具创建了一个简单的 STS 应用程序进行开发 我希望能够在我的令牌 在 RP 中 中设置滑动到期时间 我看到代码像这儿 http social msdn microsof
  • Spark 流自定义指标

    我正在开发一个 Spark Streaming 程序 它检索 Kafka 流 对流进行非常基本的转换 然后将数据插入到数据库 如果相关 则为 voltdb 我正在尝试测量向数据库插入行的速率 我认为metrics http metrics
  • 通过配置强制在 WCF 客户端 C# 中使用 tls 1.0

    我们有一个 Web 应用程序 其中有一个使用 WCF 实现的客户端 该客户端使用 SSL LVL3 与外部服务进行握手 原来该服务只是禁用了SSL LVL3 所以我们需要将其更改为TLS 1 0 有一种方法可以在 C 中强制使用 TLS 安
  • 为什么 `myfloat in myset` 变得超级慢?

    当我重新插入相同的float值进入我的设置几次 x in s本来应该花费恒定时间的检查变得非常慢 为什么 定时输出x in s 0 06 microseconds 0 09 microseconds 0 16 microseconds 0
  • 在 React Form 中更新 props 变化的状态

    我在使用 React 表单和正确管理状态时遇到问题 我在表单 模态 中有一个时间输入字段 初始值设置为状态变量getInitialState 并从父组件传入 这本身就很好用 当我想通过父组件更新默认的 start time 值时 问题就出现
  • sed — 连接一系列选定的行

    我是初学者sed 我知道可以将一个命令 或一组命令 应用于一定范围的行 如下所示 sed begin end some command where begin 是一个正则表达式 指定范围的起始行并且 end 是一个正则表达式 指定范围的结束
  • 如何要求电子邮件的收件人在其回复下方添加“-- 在本行上方回复 --” 标签?

    我想解析传入的电子邮件 这是对我发送的电子邮件的回复 的实际消息 没有 原始消息 部分 签名等 为了实现这一点 我想在回复中包含一个分隔符 例如 在本行上方回复 就像我读过的许多帖子中建议的那样 但是 当用户回复我的一封电子邮件时 如何要求
  • .NET 部署 Office 2003 可再发行主互操作程序集 (o2003pia.msi)

    有没有人真正成功地为 o2003 msi 创建先决条件 有一个lot很多人问这个问题 但我找不到真正成功的人 我发现一些极其复杂的解决方案 您需要完成可能提供也可能不提供源的 cpp 文件 我什至尝试遵守其中之一 但在目标计算机上出现配置错
  • 如何将事件分发到(Wildfly)集群中的所有节点?

    当我的进程中运行时间较长的进程的状态时 我想通知集群中的所有节点JavaEE 7WebApp 发生变化 因此每个节点都可以通过 WebSocket 依次通知其客户端该变化 我正在集群环境中使用 Wildfly 10 What JavaEE
  • 使用 JSF 暂时抑制 beanvalidation

    我有一个用户类 其中包含电子邮件地址和密码字段 NotNull Size min 6 Pattern flags Pattern Flag CASE INSENSITIVE regexp private String password nu
  • jquery .animate 不同的速度

    我正在 Jquery 中使用 animate 函数 我有一个使用 marginLeft 滑动的 div 但我也需要它淡入 但我需要它比 marginLeft 效果慢 对于 animate 我似乎只能应用一个速度参数
  • 在reactjs材料ui进度条中显示百分比数字

    I use 线性确定 https material ui com demos progress 我想显示完成了多少进度 就像下图一样 我不认为 Material UI 提供进度条 如上图所示 但是 您可以使用 React Bootstrap
  • 如何将表标记为只读?

    我正在处理 django 站点的迁移 我想将除 django session 表之外的所有表设为只读 我怎样才能做到这一点 REVOKE INSERT UPDATE DELETE TRUNCATE ON ALL TABLES IN SCHE
  • MVC5 Ajax.BeginForm刷新整个页面

    为什么表单发布没有通过 ajax 发生 而是重新加载到新页面 我的 js 包括 我的剃须刀观点 div using Ajax BeginForm Login null new AjaxOptions div
  • 在主程序之前在 lambda 中加载 S3 文件

    我正在编写一个 lambda 函数 需要加载存储在 S3 中的密钥 它不会经常改变 所以我不想每次调用 lambda 函数时都获取它 所以我想在容器旋转时加载它一次 然后在 lambda 容器的生命周期内保留该值 但是 由于异步方法 get
  • haproxy:获取主机名

    我正在尝试获取请求者主机 IP 因为它涉及 haproxy 节点 我的 haproxy 配置如下 frontend www http bind 9000 http request redirect location https fi 914