負載均衡服務之HAProxy基礎配置(五)

来源:https://www.cnblogs.com/qiuhom-1874/archive/2020/04/29/12797913.html
-Advertisement-
Play Games

errorloc和errorloc302都是同樣的效果,都是以臨時重定向到指定的url上;這裡還需要註意一點,這兩種方式都是跳轉前請求的方法是什麼,跳轉對應url也是同樣的方法;這樣一來對於其他非GET方法請求出現403錯誤碼的時候,對應的錯誤頁就無法正常處理(通常只允許GET方法去請求別的URL... ...


  前文我們聊了下haproxy的修改報文首部的配置、壓縮功能以及haproxy基於http協議自定義健康狀態檢測機制;回顧請參考https://www.cnblogs.com/qiuhom-1874/p/12789175.html;今天這篇博客主要來說一下haproxy的錯誤頁面定義,日誌相關配置;

  首先來說說錯誤頁面的配置吧;haproxy同nginx是一樣可自定義錯誤頁面;在nginx里我們用error_page 指令來指定對應錯誤狀態碼加location,根據錯誤狀態碼指定的location來指定對應錯誤狀態碼的狀態頁面文件;haproxy自定義錯誤頁面的思想類似,不同的是nginx作為web伺服器可以自定義404錯誤頁面,而haproxy通常作為代理伺服器,對於404錯誤頁面通常不會由haproxy自己指定,因為haproxy作為代理伺服器對於後端server的資源是否能夠找到,它不知道;即便我們在配置中指定了404錯誤對應的響應頁面,在haproxy重啟後是不會生效的;haproxy指定錯誤頁面的方式兩種,第一種是指定本地文件系統文件作為對應錯誤狀態碼的錯誤頁;第二種是指定對應錯誤狀態碼跳轉的URL;

  errorfile <code> <file>:指定對應錯誤狀態碼對應文件系統上的文件作為該狀態碼響應的頁面

  示例:自定義錯誤403的錯誤頁面

  提示:為了能夠模仿出403錯誤,上面使用了acl來拒絕源地址為192.168.0.232的訪問;後面我們會說acl的用法;上圖紅框中的內容就是表示對於錯誤403響應頁面上/etc/haproxy/error403.html;

  測試:在192.168.0.232主機上用瀏覽器訪問haproxy對外提供服務端介面,看看是否響應我們自定義的頁面?

  提示:從上面的測試結果看,haproxy是能夠把我們指定錯誤狀態碼對應文件內容響應給我們;這裡挺奇怪的在消息頭裡只看得到請求報文,沒有響應報文;

  示例:指定403錯誤頁面跳轉至nginx.org/aaa.html

  提示:紅框中的配置就表示對於403錯誤就跳轉到指定http://nginx.org/aaa.html

  測試:在232主機上訪問192.168.0.22看看是否跳轉到nginx.org/aaa.html?

  提示:errorloc和errorloc302都是同樣的效果,都是以臨時重定向到指定的url上;這裡還需要註意一點,這兩種方式都是跳轉前請求的方法是什麼,跳轉對應url也是同樣的方法;這樣一來對於其他非GET方法請求出現403錯誤碼的時候,對應的錯誤頁就無法正常處理(通常只允許GET方法去請求別的URL);比如跳轉前用PUT方法,出現錯誤403後,按照上面的配置,對應指定的錯誤頁的url也會用PUT方法去請求;為瞭解決這樣的問題,我們這裡需要用到errorloc303來指定;該指令的意思是返回303響應碼;如果請求前非GET方法,而出現對應錯誤後,用GET方法去請求對應錯誤狀態碼指定的URL;

  示例:非GET方法錯誤頁面重定向到其他URL上

  提示:以上配置就表示如果我們用非GET方法請求某資源,出現403錯誤後,返回303狀態碼;303表示請求重定向頁面的方法要總是使用GET方法;

  測試:先使用errorloc302指定url跳轉,然後在瀏覽器上跳轉前使用PUT方法請求,看看跳轉後到指定URL看看使用的什麼方法?

  提示:可以看到當我們用PUT方法請求192.168.0.22時,跳轉到指定的URL也是用的PUT方法;

  測試:用errorloc303指定跳轉url,然後用PUT方法請求192.168.0.22看看跳轉URL使用什麼方法?

  提示:可以看到用errorloc303指定錯誤url後,跳轉指定URL不是跳轉前的PUT方法請求,而是GET;

  以上就是haproxy關於錯誤頁面的定義的配置,更多說明請參考官方文檔http://cbonte.github.io/haproxy-dconv/;說了haproxy的錯誤頁面配置後,接下來在來瞭解下haproxy的日誌;

  log:啟用事件和流量的每個實例日誌記錄。

  no log:關閉日誌記錄;

  log global:調用全局配置段中日誌的定義;

  log<address> [len <length>] <facility> [<level> [<minlevel>]]:定義一個用於接收haproxy日誌的rsyslog伺服器地址,facility;預設是發往本機的rsyslog伺服器上的local2上;有關rsyslog的相關說明請參考https://www.cnblogs.com/qiuhom-1874/p/12091118.html

  log-format <string>:設定日誌格式;日誌格式的設定變數表請參照下表

  +---+------+-----------------------------------------------+-------------+
  | R | var  | field name (8.2.2 and 8.2.3 for description)  | type        |
  +---+------+-----------------------------------------------+-------------+
  |   | %o   | special variable, apply flags on all next var |             |
  +---+------+-----------------------------------------------+-------------+
  |   | %B   | bytes_read           (from server to client)  | numeric     |
  | H | %CC  | captured_request_cookie                       | string      |
  | H | %CS  | captured_response_cookie                      | string      |
  |   | %H   | hostname                                      | string      |
  |   | %ID  | unique-id                                     | string      |
  |   | %ST  | status_code                                   | numeric     |
  |   | %T   | gmt_date_time                                 | date        |
  |   | %Tc  | Tc                                            | numeric     |
  |   | %Tl  | local_date_time                               | date        |
  | H | %Tq  | Tq                                            | numeric     |
  | H | %Tr  | Tr                                            | numeric     |
  |   | %Ts  | timestamp                                     | numeric     |
  |   | %Tt  | Tt                                            | numeric     |
  |   | %Tw  | Tw                                            | numeric     |
  |   | %U   | bytes_uploaded       (from client to server)  | numeric     |
  |   | %ac  | actconn                                       | numeric     |
  |   | %b   | backend_name                                  | string      |
  |   | %bc  | beconn      (backend concurrent connections)  | numeric     |
  |   | %bi  | backend_source_ip       (connecting address)  | IP          |
  |   | %bp  | backend_source_port     (connecting address)  | numeric     |
  |   | %bq  | backend_queue                                 | numeric     |
  |   | %ci  | client_ip                 (accepted address)  | IP          |
  |   | %cp  | client_port               (accepted address)  | numeric     |
  |   | %f   | frontend_name                                 | string      |
  |   | %fc  | feconn     (frontend concurrent connections)  | numeric     |
  |   | %fi  | frontend_ip              (accepting address)  | IP          |
  |   | %fp  | frontend_port            (accepting address)  | numeric     |
  |   | %ft  | frontend_name_transport ('~' suffix for SSL)  | string      |
  |   | %hr  | captured_request_headers default style        | string      |
  |   | %hrl | captured_request_headers CLF style            | string list |
  |   | %hs  | captured_response_headers default style       | string      |
  |   | %hsl | captured_response_headers CLF style           | string list |
  |   | %ms  | accept date milliseconds (left-padded with 0) | numeric     |
  |   | %pid | PID                                           | numeric     |
  | H | %r   | http_request                                  | string      |
  |   | %rc  | retries                                       | numeric     |
  |   | %rt  | request_counter (HTTP req or TCP session)     | numeric     |
  |   | %s   | server_name                                   | string      |
  |   | %sc  | srv_conn     (server concurrent connections)  | numeric     |
  |   | %si  | server_IP                   (target address)  | IP          |
  |   | %sp  | server_port                 (target address)  | numeric     |
  |   | %sq  | srv_queue                                     | numeric     |
  | S | %sslc| ssl_ciphers (ex: AES-SHA)                     | string      |
  | S | %sslv| ssl_version (ex: TLSv1)                       | string      |
  |   | %t   | date_time      (with millisecond resolution)  | date        |
  |   | %ts  | termination_state                             | string      |
  | H | %tsc | termination_state with cookie status          | string      |
  +---+------+-----------------------------------------------+-------------+

  capture cookie <name> len <length>:捕獲並記錄請求報文和響應報文中的cookie信息

  capture request header <name> len <length>:捕獲並記錄指定請求標頭的最後一次出現

  capture response header <name> len <length>:捕獲並記錄指定響應標頭的最後一次出現

  結合上面的內容,我們就可以自定義訪問日誌了;通常我們通過capture去捕獲對應首部的信息,然後通過上面的變數定義成日誌格式

  示例:

  測試:用瀏覽器訪問對應haproxy的前端,看看日誌格式

  提示:可以看到我們訪問對應haproxy的前端,日誌就和預設的日誌不一樣了;日誌格式中的變來可參照上邊的表去找對應表示什麼;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 需求:如題,C#本地要調用Webservice介面,上傳本地的照片到伺服器中; 參考:客戶端: https://blog.csdn.net/tiegenZ/article/details/79927670 服務端: https://www.cnblogs.com/zzzili/archive/201 ...
  • 通過介面調取博客園文章的實現 註冊了個功能變數名稱(Nineksy.cn),在阿裡雲申請了個雲虛主機。今天功能變數名稱備案通過了,準備給網站做幾個個頁面,因為博客園用的很順手了就不准備自己內容管理了,準備直接調用博客園的內容。由於阿裡雲的雲虛主機不支持.net core, 但支持.NET Framework,就用. ...
  • 眾所周知,List<T>創建的對象是引用類型,也就是說,兩個完全相同的List<T>對象(其中元素及其元素的屬性也相同),但引用地址不同,在使用Contains判斷兩List<T>中元素包含比較時,返回都是False,因此,我們需要重新“定義”Contains,實際上,Contains內部是Equa ...
  • 本筆記摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/18/Thread.html,記錄一下學習,方便後面資料查找 一、線程的介紹 進程(Process)是應用程式的實例要使用的資源的一個集合,每個應用程式都在各自的進程中運行來確保應用程式不受其他 ...
  • 1.前端輸出後端返回的html內容,例如後端ViewBag.PayQrCode = “<img src="abc/a.jpg"”/> 則前端輸出方式為: @Html.Raw(ViewBag.PayQrCode) 2.EF發佈時需註意伺服器版本,修改Entities.edmx文件,用xml方式打開,例 ...
  • //調用ResXResourceReader類,需要引用System.Windows.Forms.dll,下同 ResXResourceReader resxReader = new ResXResourceReader(@"資源文件路徑"); IDictionaryEnumerator dict ...
  • 昨天發現線上試跑期的一個程式掛了,平時都跑的好好的,查了下日誌是因為昨天運營跑了一家美妝top級淘品牌店,會員量近千萬,一下子就把128G的記憶體給爆了,當時並行跑了二個任務,沒轍先速寫一段代碼限流,後面再做進一步優化。 一: 背景 1. 背景介紹 因為是自己寫的代碼,所以我知道問題出現在哪裡,如果大 ...
  • 1. 什麼是Expression Web Expression Studio是微軟在2007年推出的一套針對設計師的套件,其中包含專業的設計工具和新技術,可以彈性且自由地將設計方案轉為實際——無論設計的是標準的網站、擁有豐富用戶經驗的桌面應用,或是管理數字資產和內容。它包含以下部分: Express ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...