Haproxy路径操作

问题描述 投票:0回答:1

[在Google Cloud Platform中,我们确实有一个haproxy充当我们内部VPN的代理,并且将URL从GCP DNS重定向到proxy.mycompany.com(我们的haproxy),在此我们进行进一步的操作。

[Haproxy来自图像2.0.8-alpine

[Nginx基于图像1-alpine

最近我已经安装了提供静态文件的Nginx。

Nginx为autoindex on设置,可在URL static-files.mycompany.com上访问,并配置为显示gcs-bucket的根。因此,如果您访问static-files.mycompany.com,您将看到gcs-bucket的内容:

  • 目录static-files
  • 存储桶中的任何文件。

static-files目录包含由hugo生成的静态网站文件。这些文件包含类似/docu/file.md

的路径

我已经设法配置了haproxy,它将把对URL website.mycompany.com的任何请求转发到static-files.mycompany.com/static-files,并通过在haproxy config的backend section中进行配置来显示生成的静态网站:

acl p_root path -i /
http-request set-path /static-files/\1 if p_root

每次访问website.mycompany.com时,路径都会重定向到website.mycompany.com/static-files(实际上是static-files.mycompany.com/static-files]

但是,该站点已损坏:

  • css未加载,文件位于/中,并且请求针对website.mycompany.com/mycss.file,但是由于上面的路径操作,可以在website.mycompany.com/static-files/mycss.file下找到文件
  • 站点上的每个链接均失效,请求website.mycompany.com/my-link-to-file,但文件位于website.mycompany.com/static-files/my-link-to-file

我配置haproxy的可能性有限,很可能我可以将参数添加到现有的后端和前端部分,在这里我提供无法更改的参数

    global
    log stdout format raw local0 info
    maxconn  30000
    tune.ssl.default-dh-param 2048
resolvers vpc
    parse-resolv-conf
    hold valid 120s
defaults
    mode    http
    log     global
    option  dontlognull
    #option  tcplog
    option  httplog
    option  forwardfor
    option  redispatch
    maxconn 3000
    retries 3
    timeout connect 5s
    timeout client  50s
    timeout server  50s
    timeout tunnel  1h
    timeout client-fin 30s
    timeout http-keep-alive 4s
    balance roundrobin
    default-server check resolvers vpc
    default-server on-marked-down shutdown-sessions
    default-server max-reuse 100

frontend http
    bind *:80
    redirect scheme https code 302 if !{ ssl_fc }
    monitor-uri /_healtz
    use_backend %[hdr(host),lower]

frontend https
    bind *:443 ssl no-sslv3 crt /config/haproxy_certificate.pem alpn http/1.1,h2
    http-response add-header Via 1.1\ %[env(HOSTNAME)]
    http-request add-header Via 1.1\ %[env(HOSTNAME)]
    http-request add-header X-Forwarded-Proto https
    http-request capture req.hdr(Host) len 40
    http-request capture req.hdr(User-Agent) len 120
    use_backend %[hdr(host),lower]

backend proxy.mycompany.com
    stats enable
    stats uri /

我想实现以下目标:

通过访问website.mycompany.com,我将在后台转发到static-files.mycompany.com/static-files,但是URL将保持为website.mycompany.com,因此生成的静态网站路径仍然有效,因此该静态网站也将正常工作。还是我弄错了?

我愿意接受任何合理的建议。

谢谢

url proxy haproxy forward
1个回答
0
投票

嗯,最后很简单

http-request replace-uri ([^/:]*://[^/]*)?(.*) \1/static-files\2

有窍门。

编辑:

避免/ static-files / static-files /的无限循环>

    acl remove_static-files path_beg -i /architecture-diagrams
    http-request replace-uri ([^/:]*://[^/]*)?(.*) \1/static-files\2 if !remove_static-files
© www.soinside.com 2019 - 2024. All rights reserved.