by Devin Yang

建立于: 1年前 ( 更新: 1年前 )

HAProxy可以透过acl的定义来决定request要导向那台Backend,本文就来介绍本站的一些设置吧
在这里透过path_beg的acl,让送来的request导向其他的服务,而不是域名所指定的后端。

acl www_url hdr_beg(host) -i www.ccc.tc ccc.tc cn.ccc.tc en.ccc.tc
acl fastapi_rembg path_beg -i www_url /api/rembg

acl全名为Access Control List,这让我们可以透过一系列的访问控制来决定前端的request应导向那个后端。
acl后面即是此条件的名称,如果与url相关的条件,我习惯上会补上_url,例如上方我命名为www_url。
不难看出这里使用了hdr_beg(host),就是网址开头便会应用到这个条件规则,所以也可以简单的打www cn en等子域名。
第二条规则我命名为fastapi_rembg,不难看出这里用的是path_beg,即是路径开头符合/api/rembg,另外-i的后面我使用了www_url,也就是说必需预名也符合。
大至上用猜的都猜的出来,让我们继续看下去,backend的指定

use_backend fastapi_cv2_server if fastapi_rembg
use_backend ccc_server if www_url

在这里,很明显的use_backend后的即是后端主机的规则名称,我个人的习惯上会透过_server来代表。
在第一行中,您应该就可以猜出了,如果网址路径是/api/rembg开头的,便使用fastapi_cv2_server这个后端。
如果网址是www.ccc.tc、cn.ccc.tc或en.ccc.tc就使用ccc_server这个后端,非常清楚。

最后来看看backend的定义吧

backend fastapi_cv2_server
   mode http
   balance roundrobin
   http-request set-path "%[path,regsub(^/api/rembg/,/)]"
   server cv2 192.168.99.130:8000 check cookie cv2
   
backend ccc_server
   mode http
   balance roundrobin
   server ccc 192.168.99.130:1056 check cookie cc

在这里,基本上我连到相同的主机,当然也可以是不同的主机或是多台主机。
我透过了port来拆分fastapi及nginx主机。

在fastapi_cv2_server的后端设置中,多了一项有趣的设置,set-path。
从语法上应该不难看出,就是把原本request的路径/api/rembg改为/后再打去后端。
这样后端的路径就不需要进行额外的调整了,就FastAPI来说需补上root_path这个设置,这样docs的路径才会正确。
root_path可以启动时透过参数设置,也可采用进程的方式设置,这里就看看进程中如何设置

app = FastAPI(root_path="/api/rembg")

@app.get("/")
def DemoAPI(request: Request):
    return {"message": "Running on Synology Nas phpenv Container", "root_path": request.scope.get("root_path")}

在HAProxy的set-path帮助下,可以看见我这里get("/")唯持在根目录,而不需要调整进程成/api/rember/,您可以点这个网址看看
https://www.ccc.tc/api/rembg/

而当路径非/api/rembg时,则会将request送到port 1056的nginx服务,而不是fastapi。

HAProxy功能真的相当强大,当您细细研究时,就会发现别有一翻天地。
本文仅是抛砖引玉,提供一小部份的功能介绍跟说明。

Tags: fastapi haproxy

Devin Yang

文章内容无法一一说明,如果您有什么不了解处,欢印提问哦:)

No Comment

Post your comment

需要登入才可留言!

类似文章


laravel,letsencrypt,haproxy

PHPENV的HAProxy环境设置与免费SSL证书申请

PHPENV已经添加了haproxy.yml的支持了罗,如果您有外网IP及域名,想弄HAProxy及证书申请透过deviny/phpenv 应该相当简单。本文就让我们看看如何在PHPENV中的HAProxy环境中设置中使用HAProxy吧。

fastapi,phpenv,docker

我如何用phpenv创建fastapi运行环境

虽然phpenv主要用於运行PHP Laravel的环境,但不代表他不能跑其他语言或其他容器。本文介绍,我如何让phpenv跑python的fastapi环境,当然这只是一个概念,目前为止,我已经让PHP api跑HAProxy了,并且自动申请及更新免费证书,现在就让他来跑Python的fastapi吧。phpenv没有什么限制,限制的是您的想像力😆

ssl,haproxy,certbot

完美SSL证书自动化更新环境(HAProxy加certbot)

HAProxy的重载速度很快,跟本感觉不出有重启,所有证书都给HAProxy处理真的很方便。主机环境需求,请确认您已有下面两个命令(Ubuntu怎么装? apt-get install -y haproxy cerbot,我猜的,如果不是请自行Google)