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吧。

Synology,haproxy

用HAProxy移除Sysnolgy Mail Station的/mail路徑

本文就DSM7的版本做說明。Synology Nas的套件中心提供兩種Mail Server,一種為Synology Mail Server,另一個為Synology MailPlus。對我來說Synology MailPlus好處,他可以在登入入口中,輕鬆指定域名,但限制最多五個帳號,多的就要買授權了。那如果使用Synoloyg Mail Server,則不會有帳號數的限制,但是他並沒有整合登入入口,如果安裝了Mail Station的webmail,會在網址的目錄多一個/mail的路徑,雖然不礙事,但我就是不喜歡。

fastapi,phpenv,docker

我如何用phpenv建立fastapi執行環境

雖然phpenv主要用於運行PHP Laravel的環境,但不代表他不能跑其他語言或其他容器。本文介紹,我如何讓phpenv跑python的fastapi環境,當然這只是一個概念,目前為止,我已經讓PHP api跑HAProxy了,並且自動申請及更新免費憑證,現在就讓他來跑Python的fastapi吧。phpenv沒有什麼限制,限制的是您的想像力😆