溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

HAProxy 高級應(yīng)用(一)

發(fā)布時間:2020-06-08 03:01:12 來源:網(wǎng)絡(luò) 閱讀:1054 作者:逐夢小濤 欄目:系統(tǒng)運維

HAProxy 高級應(yīng)用

================================================================================

概述:

  本章將繼續(xù)上章的內(nèi)容介紹haprosy代理配置段的相關(guān)參數(shù),具體如下:

  • ACL控制訪問列表;

  • 4層檢測機制:dst,dst_port,src,src_port

  • 7層檢查機制:path、req.hdr、res.hdr;

  • http層訪問控制相關(guān)的參數(shù):

  • block,http-request

  • TCP層的訪問控制參數(shù)

================================================================================

 10.修改請求或響應(yīng)報文首部相關(guān):

option forwardfor [ except <network> ] [ header <name> ] [ if-none ]

作用:

  • AProxy把請求報文發(fā)往后端主機之前在請求報文添加“X-Forwared-For”首部;其值為客戶端地址,

范圍:都可以使用

參數(shù):

  • [ except <network> ]:除了xxx不添加外,如從本地訪問

  • [ header <name> ]可以自定義首部名稱;

  • [ if-none ]:沒有首部時才添加

Examples :

# Public HTTP address also used by stunnel on the same machine
frontend www
    mode http
    option forwardfor except 127.0.0.1  # stunnel already adds the header
# Those servers want the IP Address in X-Client
backend www
    mode http
    option forwardfor header X-Client

添加或刪除請求,響應(yīng)報文的首部

reqadd <string> [{if | unless} <cond>]

  • 在請求報文添加一個首部信息

rspadd <string> [{if | unless} <cond>]

  • 在響應(yīng)報文添加一個首部信息

reqdel  <search> [{if | unless} <cond>]

    reqidel <search> [{if | unless} <cond>]  (ignore case)忽略大小寫

  • 刪除請求報文首部

rspdel  <search> [{if | unless} <cond>]

     rspidel <search> [{if | unless} <cond>]  (ignore case)

  • 刪除響應(yīng)報文首部

注意:

  • 添加或者刪除請求響應(yīng)報文首部的參數(shù)的使用范圍是frontend、listen和backend

演示1:HAProxy把請求報文發(fā)往后端主機之前在請求報文添加“X-Forwared-For”首部;

 1.首先編輯haproxy的配置文件,定義除了本機之外,所有的請求報文均添加X-Forwared-For,首部記錄客戶端信息發(fā)往后端主機,如下:

HAProxy 高級應(yīng)用(一)


 2.編輯后端主機RS1的httpd服務(wù)的配置文件/etc/httpd/conf/httpd.conf,修改日志的格式,如下:

HAProxy 高級應(yīng)用(一)

 3.在啟動RS1后端主機,在瀏覽器中訪問,在RS1中查看日志,可以看到記錄的日志為用戶遠端地址,而非haproxy的代理地址;

[root@centos7 ~]# tail -5  /var/log/httpd/access_log
192.168.1.105 - - [21/Nov/2016:23:48:54 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36"
192.168.1.105 - - [21/Nov/2016:23:49:39 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36"
192.168.1.105 - - [21/Nov/2016:23:50:29 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36"
192.168.1.105 - - [21/Nov/2016:23:50:30 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36"
192.168.1.105 - - [21/Nov/2016:23:50:30 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36"

------------------------------------------------------------------------------------------

演示2:

  1.添加響應(yīng)客戶端報文的首部為經(jīng)由haproxy轉(zhuǎn)發(fā)的首部信息,如下:

HAProxy 高級應(yīng)用(一)


  重載haproxy服務(wù),請求查看首部信息如下:

[root@centos7 ~]# curl -I http://192.168.1.111
HTTP/1.1 200 OK
Date: Mon, 21 Nov 2016 16:31:02 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
Last-Modified: Fri, 18 Nov 2016 16:09:35 GMT
ETag: "1a-54195883a68b2"
Accept-Ranges: bytes
Content-Length: 26
Content-Type: text/html; charset=UTF-8
X-Via: HAProxy/1.5

 2.刪除響應(yīng)首部信息Server,編輯配置文件如下:

HAProxy 高級應(yīng)用(一)


 重載haproxy服務(wù),請求查看首部信息,發(fā)現(xiàn)已經(jīng)刪除了Server的首部,如下:

[root@centos7 ~]# curl -I http://192.168.1.111
HTTP/1.1 200 OK
Date: Mon, 21 Nov 2016 16:33:59 GMT
Last-Modified: Fri, 18 Nov 2016 16:09:35 GMT
ETag: "1a-54195883a68b2"
Accept-Ranges: bytes
Content-Length: 26
Content-Type: text/html; charset=UTF-8
X-Via: HAProxy/1.5


 11.超時時長:

timeout client <timeout>:

  • 作用:設(shè)置客戶端連接最大非活動時長,默認單位是毫秒;

timeout server <timeout>

  • 作用:設(shè)置服務(wù)端連接最大非活動時長,默認單位是毫秒;

timeout connect <timeout>

  • 作用:向服務(wù)端建立連接時的超時時長;

timeout http-keep-alive <timeout>

  • 作用:面向客戶端一側(cè)啟用保持連接功能的超時時長,默認單位為ms;

timeout client-fin <timeout>

  • 作用:客戶端一側(cè)的半連接超時時長;

timeout server-fin <timeout>

  • 作用:服務(wù)端一側(cè)的半連接超時時長;

 12.ACL控制訪問列表

語法格式:

  • acl <aclname> <criterion> [flags] [operator] [<value>] ...

<aclname>:

  • ACL names must be formed from upper and lower case letters, digits, '-' (dash), '_' (underscore) , '.' (dot) and ':' (colon). ACL names are case-sensitive. ACL名稱可由,大小寫字母,數(shù)字,'-','_','.'和':' 并且區(qū)分大小寫。

<value>的類型:

  • - boolean                             //布爾型值

  • - integer or integer range   //整數(shù)或整數(shù)范圍

  • - IP address / network        //ip地址

  • - string (exact, substring, suffix, prefix, subdir, domain)  //字符串

  • - regular expression           //正則表達式

  • - hex block

[flags]

  • -i :  被模式匹配時忽略字符大小寫,比較常用

  • -f : load patterns from a file.

  • -m : use a specific pattern matching method

  • -n : forbid the DNS resolutions

  • -M : load the file pointed by -f like a map file.

  • -u : force the unique id of the ACL

  • -- :  force end of flags. Useful when a string looks like one of the flags.   //轉(zhuǎn)義

[operator]

數(shù)值匹配:

  • eq : true if the tested value equals at least one value

  • ge : true if the tested value is greater than or equal to at least one value

  • gt : true if the tested value is greater than at least one value

  • le : true if the tested value is less than or equal to at least one value

  • lt : true if the tested value is less than at least one value

字符串匹配:

  • - exact match (-m str) : 字符串精確匹配

  • - substring match (-m sub) : 子串匹配

  • - prefix match (-m beg) : 前綴匹配

  • - suffix match  (-m end) : 后綴匹配

  • - subdir match (-m dir) : 子目錄匹配

  • - domain match (-m dom) : 域匹配

條件的邏輯連接

  • - AND (implicit)

  • - OR  (explicit with the "or" keyword or the "||" operator)

  • - Negation with the exclamation mark ("!")

<creterion>:

4層檢測機制:

  • dst : ip

  • dst_port : integer

  • src : ip

  • src_port : integer

block { if | unless } <condition>

  • 作用:條件匹配就阻斷一個7層請求

Example:

acl invalid_src  src          0.0.0.0/7 224.0.0.0/3
acl invalid_src  src_port     0:1023
acl local_dst    hdr(host) -i localhost
block if invalid_src || local_dst

演示:

  1.阻斷來自非 10.1.250.25 的ip(瀏覽器地址)請求,編輯配置文件,如下:

HAProxy 高級應(yīng)用(一)

 重載haproxy服務(wù),在瀏覽器中訪問可以發(fā)現(xiàn),拒絕訪問

HAProxy 高級應(yīng)用(一)

 在本機使用curl命令可以正常訪問,說明僅拒絕了來自10.1.250.25的ip的請求。

[root@centos7 haproxy]# curl http://10.1.252.153
<h2>Backend Server 1</h2>
[root@centos7 haproxy]# curl http://10.1.252.153
<h2>Backend Server 1</h2>
[root@centos7 haproxy]# curl http://10.1.252.153
<h2>Backend Server 2</h2>

-------------------------------------------------------------------------------------------

  2.僅允許本瀏覽器(10.1.250.25)可以訪問8080端口,編輯配置文件如下:

HAProxy 高級應(yīng)用(一)


 重載haproxy服務(wù),在瀏覽器中訪問可以發(fā)現(xiàn),可以正常訪問

HAProxy 高級應(yīng)用(一)


 在本機使用curl命令訪問8080端口,拒絕訪問,如下:

[root@centos7 haproxy]# curl http://10.1.252.153:8080
<html><body><h2>403 Forbidden</h2>
Request forbidden by administrative rules.
</body></html>













向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI