AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 422128
Accepted
Greg Dubicki
Greg Dubicki
Asked: 2018-02-06 13:31:15 +0800 CST2018-02-06 13:31:15 +0800 CST 2018-02-06 13:31:15 +0800 CST

为什么使用“http-response set-status <not-200>”时haproxy会记录状态码200?

  • 772

我正在使用 haproxy 1.7.8。

我有一个配置可以阻止 HTTP Referer 标头中某些特定滥用者域的请求。

我的 haproxy 配置的重要部分如下所示:

 frontend https_l1_xxxxx

    (...)

    acl is_abuser_by_referer capture.req.hdr(7) -m reg -i ^https?:\/\/(.+\.)?(someabuser.com|someabuser2.com|someabuser3.com)(\?.*|\/.*)?$
    acl return_html_path path_beg /urlICareAbout
    use_backend abuser if is_abuser_by_referer return_html_path

 backend abuser

    # override standard 200 status code
    http-response set-status 418 reason "I'm a teapot"
    server nginx_abusers localhost:8091

... nginx 实际上在监听 8091 并提供一些 HTML。

这行得通,我已经通过在浏览器/curl 中设置这个 HTTP 标头并向我的 haproxy 发出请求来测试它 - 我得到 418。


问题是我的 haproxy 日志看起来像这样:

Feb 5 13:11:45 aaa-www05 haproxy_l1_xxxxx[38749]: 111.222.111.222:2605 [05/Feb/2018:13:11:44.849] DFDA00BD:0A2D_0A19800C:01BB_--_7BFDAD https_l1_xxxxx ~ abuser/nginx_abusers 280/0/1/0/282 200 6044 - - ---- 145/145/0/0/0 0/0 {e60b039c46a1e104a94558ce0e480654||07.mydomain.com|||Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET4.0C; .NET||http://someabuser.com/player.swf} {||} 467 "GET /urlICareAbout/?preview=true HTTP/1.1"

...记录状态码 200,而不是 418。


为什么会这样?


更新:请注意,我希望 haproxy 记录实际返回的状态代码,因为它的 HTTP 日志格式文档状态:

- "status_code" is the HTTP status code returned to the client. This status is generally set by the server, but it might also be set by haproxy when the server cannot be reached or when its response is blocked by haproxy.

http haproxy
  • 2 2 个回答
  • 3074 Views

2 个回答

  • Voted
  1. Best Answer
    Maciej Asembler
    2018-02-07T02:00:37+08:002018-02-07T02:00:37+08:00

    它按预期工作。您的后端返回 200 OK,这是记录的状态。覆盖这些是没有意义的,因为系统管理员希望日志中的实际后端响应数据用于调试。

    “status_code”是返回给客户端的HTTP状态码

    客户端的状态为 418,正如 Greg 所写的那样,这是正确的。

    • 1
  2. Greg Dubicki
    2018-02-08T06:36:43+08:002018-02-08T06:36:43+08:00

    (@Maciej Asembler回答正确,但可能不完全清楚,所以让我尝试重新措辞以供将来参考。)

    它按预期工作,因为我的后端服务器返回 200。

    为什么?

    如果您只阅读这行文档:

    “status_code”是返回给客户端的 HTTP 状态码。

    ..那么这将是一个明显的文档错误。但接下来就是这样。

    此状态一般由服务器设置,但也可能在服务器无法访问或响应被 haproxy 阻塞时由 haproxy 设置。

    由于这部分句子中的任何一种情况:“当服务器无法访问或当它的响应被 haproxy 阻止时,它也可能由 haproxy 设置”在这里发生,句子的第一部分确实:“这个状态是一般由服务器设置”。

    • 1

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve