[在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
]
但是,该站点已损坏:
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
,因此生成的静态网站路径仍然有效,因此该静态网站也将正常工作。还是我弄错了?
我愿意接受任何合理的建议。
谢谢
嗯,最后很简单
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