## 1. 配置詳解
~~~
###########全局配置#########
global
log 127.0.0.1 local0 #[日志輸出配置,所有日志都記錄在本機,通過local0輸出]
log 127.0.0.1 local1 notice #定義haproxy 日志級別[error warringinfo debug]
daemon #以后臺形式運行harpoxy
nbproc 1 #設置進程數量
maxconn 4096 #默認最大連接數,需考慮ulimit-n限制
#user haproxy #運行haproxy的用戶
#group haproxy #運行haproxy的用戶所在的組
#pidfile /var/run/haproxy.pid #haproxy 進程PID文件
#ulimit-n 819200 #ulimit 的數量限制
#chroot /usr/share/haproxy #chroot運行路徑
#debug #haproxy 調試級別,建議只在開啟單進程的時候調試
#quiet
########默認配置############
defaults
log global
mode http #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
option httplog #日志類別,采用httplog
option dontlognull #不記錄健康檢查日志信息
retries 2 #兩次連接失敗就認為是服務器不可用,也可以通過后面設置
#option forwardfor #如果后端服務器需要獲得客戶端真實ip需要配置的參數,可以從Http Header中獲得客戶端ip
option httpclose #每次請求完畢后主動關閉http通道,haproxy不支持keep-alive,只能模擬這種模式的實現
#option redispatch #當serverId對應的服務器掛掉后,強制定向到其他健康的服務器,以后將不支持
option abortonclose #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的鏈接
maxconn 4096 #默認的最大連接數
timeout connect 5000ms #連接超時
timeout client 30000ms #客戶端超時
timeout server 30000ms #服務器超時
#timeout check 2000 #心跳檢測超時
#timeout http-keep-alive10s #默認持久連接超時時間
#timeout http-request 10s #默認http請求超時時間
#timeout queue 1m #默認隊列超時時間
balance roundrobin #設置默認負載均衡方式,輪詢方式
#balance source #設置默認負載均衡方式,類似于nginx的ip_hash
#balnace leastconn #設置默認負載均衡方式,最小連接數
########統計頁面配置########
listen stats
bind 0.0.0.0:1080 #設置Frontend和Backend的組合體,監控組的名稱,按需要自定義名稱
mode http #http的7層模式
option httplog #采用http日志格式
#log 127.0.0.1 local0 err #錯誤日志記錄
maxconn 10 #默認的最大連接數
stats refresh 30s #統計頁面自動刷新時間
stats uri /stats #統計頁面url
stats realm XingCloud\ Haproxy #統計頁面密碼框上提示文本
stats auth admin:admin #設置監控頁面的用戶和密碼:admin,可以設置多個用戶名
stats auth Frank:Frank #設置監控頁面的用戶和密碼:Frank
stats hide-version #隱藏統計頁面上HAProxy的版本信息
stats admin if TRUE #設置手工啟動/禁用,后端服務器(haproxy-1.4.9以后版本)
########設置haproxy 錯誤頁面#####
#errorfile 403 /home/haproxy/haproxy/errorfiles/403.http
#errorfile 500 /home/haproxy/haproxy/errorfiles/500.http
#errorfile 502 /home/haproxy/haproxy/errorfiles/502.http
#errorfile 503 /home/haproxy/haproxy/errorfiles/503.http
#errorfile 504 /home/haproxy/haproxy/errorfiles/504.http
########frontend前端配置##############
frontend main
bind *:80 #這里建議使用bind *:80的方式,要不然做集群高可用的時候有問題,vip切換到其他機器就不能訪問了。
acl web hdr(host) -i www.abc.com #acl后面是規則名稱,-i為忽略大小寫,后面跟的是要訪問的域名,如果訪問www.abc.com這個域名,就觸發web規則,。
acl img hdr(host) -i img.abc.com #如果訪問img.abc.com這個域名,就觸發img規則。
use_backend webserver if web #如果上面定義的web規則被觸發,即訪問www.abc.com,就將請求分發到webserver這個作用域。
use_backend imgserver if img #如果上面定義的img規則被觸發,即訪問img.abc.com,就將請求分發到imgserver這個作用域。
default_backend dynamic #不滿足則響應backend的默認頁面
########backend后端配置##############
backend webserver #webserver作用域
mode http
balance roundrobin #balance roundrobin 負載輪詢,balance source 保存session值,支持static-rr,leastconn,first,uri等參數
option httpchk /index.html HTTP/1.0 #健康檢查, 檢測文件,如果分發到后臺index.html訪問不到就不再分發給它
server web1 10.16.0.9:8085 cookie 1 weight 5 check inter 2000 rise 2 fall 3
server web2 10.16.0.10:8085 cookie 2 weight 3 check inter 2000 rise 2 fall 3
#cookie 1表示serverid為1,check inter 1500 是檢測心跳頻率
#rise 2是2次正確認為服務器可用,fall 3是3次失敗認為服務器不可用,weight代表權重
backend imgserver
mode http
option httpchk /index.php
balance roundrobin
server img01 192.168.137.101:80 check inter 2000 fall 3
server img02 192.168.137.102:80 check inter 2000 fall 3
backend dynamic
balance roundrobin
server test1 192.168.1.23:80 check maxconn 2000
server test2 192.168.1.24:80 check maxconn 2000
listen tcptest
bind 0.0.0.0:5222
mode tcp
option tcplog #采用tcp日志格式
balance source
#log 127.0.0.1 local0 debug
server s1 192.168.100.204:7222 weight 1
server s2 192.168.100.208:7222 weight 1
~~~
## 2. 負載均衡算法
> 1. roundrobin
表示簡單的輪詢,`每個服務器根據權重輪流使用`,在服務器的處理時間平均分配的情況下這是最流暢和公平的算法。該算法是動態的,對于實例啟動慢的服務器權重會在運行中調整。
> 2. static-rr
> 表示根據權重,建議關注;`每個服務器根據權重輪流使用,類似roundrobin,但它是靜態的`,意味著運行時修改權限是無效的。另外,它對服務器的數量沒有限制。
> 3. leastconn
表示最少連接者先處理,建議關注;leastconn建議用于長會話服務,例如LDAP、SQL、TSE等,而不適合短會話協議。如HTTP.該算法是動態的,對于實例啟動慢的服務器權重會在運行中調整。
> 4. source,表示根據請求源IP,建議關注;對請求源IP地址進行哈希,用可用服務器的權重總數除以哈希值,根據結果進行分配。
> 只要服務器正常,同一個客戶端IP地址總是訪問同一個服務器。如果哈希的結果隨可用服務器數量而變化,那么客戶端會定向到不同的服務器;
> 該算法一般用于不能插入cookie的Tcp模式。它還可以用于廣域網上為拒絕使用會話cookie的客戶端提供最有效的粘連;
> 該算法默認是靜態的,所以運行時修改服務器的權重是無效的,但是算法會根據“hash-type”的變化做調整。
> 5. uri
表示根據請求的URI;表示根據請求的URI左端(問號之前)進行哈希,用可用服務器的權重總數除以哈希值,根據結果進行分配。
> 只要服務器正常,同一個URI地址總是訪問同一個服務器。
> 一般用于代理緩存和反病毒代理,以最大限度的提高緩存的命中率。該算法只能用于HTTP后端;
> 該算法一般用于后端是緩存服務器;
> 該算法默認是靜態的,所以運行時修改服務器的權重是無效的,但是算法會根據“hash-type”的變化做調整。
> 6. url_param
表示根據請求的URl參數'balance url_param' requires an URL parameter name
> 在HTTP GET請求的查詢串中查找<param>中指定的URL參數,基本上可以鎖定使用特制的URL到特定的負載均衡器節點的要求;
> 該算法一般用于將同一個用戶的信息發送到同一個后端服務器;
> 該算法默認是靜態的,所以運行時修改服務器的權重是無效的,但是算法會根據“hash-type”的變化做調整。
> 7. hdr(name)
表示根據HTTP請求頭來鎖定每一次HTTP請求;
> 在每個HTTP請求中查找HTTP頭<name>,HTTP頭<name>將被看作在每個HTTP請求,并針對特定的節點;
> 如果缺少頭或者頭沒有任何值,則用roundrobin代替
> 該算法默認是靜態的,所以運行時修改服務器的權重是無效的,但是算法會根據“hash-type”的變化做調整。
> 8. rdp-cookie(name)
表示根據據cookie(name)來鎖定并哈希每一次TCP請求。
> 為每個進來的TCP請求查詢并哈希RDP cookie<name>;
> 該機制用于退化的持久模式,可以使同一個用戶或者同一個會話ID總是發送給同一臺服務器。
> 如果沒有cookie,則使用roundrobin算法代替;
> 該算法默認是靜態的,所以運行時修改服務器的權重是無效的,但是算法會根據“hash-type”的變化做調整。
> #其實這些算法各有各的用法,我們平時應用得比較多的應該是roundrobin、source和lestconn。
>
## 3. ACL規則定義
ACL定制法則:
開放策略:拒絕所有,只開放已知
拒絕策略:允許所有,只拒絕某些
事實上實現安全策略,無非也就是以上兩種方法
~~~
########ACL策略定義#########################
1. #如果請求的域名滿足正則表達式返回true -i是忽略大小寫
acl denali_policy hdr_reg(host) -i ^(www.inbank.com|image.inbank.com)$
2、#如果請求域名滿足www.inbank.com 返回 true -i是忽略大小寫
acl tm_policy hdr_dom(host) -i www.inbank.com
3、#在請求url中包含sip_apiname=,則此控制策略返回true,否則為false
acl invalid_req url_sub -i sip_apiname=#定義一個名為invalid_req的策略
4、#在請求url中存在timetask作為部分地址路徑,則此控制策略返回true,否則返回false
acl timetask_req url_dir -i timetask
5、#當請求的header中Content-length等于0時返回 true
acl missing_cl hdr_cnt(Content-length) eq 0
#########acl策略匹配相應###################
1、#當請求中header中Content-length等于0 阻止請求返回403
block if missing_cl
2、#block表示阻止請求,返回403錯誤,當前表示如果不滿足策略invalid_req,或者滿足策略timetask_req,則阻止請求。
block if !invalid_req || timetask_req
3、#當滿足denali_policy的策略時使用denali_server的backend
use_backend denali_server if denali_policy
4、#當滿足tm_policy的策略時使用tm_server的backend
use_backend tm_server if tm_policy
5、#reqisetbe關鍵字定義,根據定義的關鍵字選擇backend
reqisetbe ^Host:\ img dynamic
reqisetbe ^[^\ ]*\ /(img|css)/ dynamic
reqisetbe ^[^\ ]*\ /admin/stats stats
6、#以上都不滿足的時候使用默認mms_server的backend
default_backend mms
~~~
1. 如果符合某種特定條件,則返回某種新的前綴
~~~
aclclear dst_port 80
acl secure dst_port 8080
acl login_page url_beg /login #如果url的地址,除了主機名之外是login的頁面則定義成logon,如果是登錄頁面卻又屬于不安全的連接 那么
acl logout url_beg /logout
acl uid_given url_reg /login?userid=[^&]+
acl cookie_set hdr_sub(cookie)SEEN=1 #取得cookie的子串,如果沒有cookie則:
redirect prefix https://mysite.com set-cookie SEEN=1 if!cookie_set #如果定義的第一個用戶來訪問我們的站點的時候,沒有被設置cookie 在將用戶的請求轉為https
redirect prefix https://mysite.com iflogin_page !secure
redirect prefix http://mysite.com drop-query if login_page !uid_given
redirect locationhttp://mysite.com/ if !login_page secure
redirect location / clear-cookie USERID= if logout
~~~
2. 我們自定定義一個acl
如果訪問的是/bbs開頭的地址,那么將其跳轉到/forum
~~~
acl acbbs url_beg/bbs
redirect /forum if/bbs #if判斷是否匹配/bbs 如果匹配則將/bbs 跳轉至/forum
~~~
只不過對于haproxy來講需要基于acl的機制來實現,所以要比nginx要麻煩一點
reqadd
如果訪問的是ssl則則加入X-Proto首部
acl is-ssldst_prot 81
reqadd X-Proto:\SSL if is-ssl
rspadd
響應報文首部,所有響應首部都需要經過haproxy,因此經過haproxy的時候,想通告其客戶端是通過haproxy來轉發過來的,因此這時候會在首部添加一個 X-Via首部,明確說明是通過代理服務器轉發的
#只要是通過haproxy轉發的請求統統添加首部信息,如下所示:
rspadd X-Via:\ 10.0.10.61 #haproxy的IP地址
Server的檢測機制
backup
check
disabled
fall #檢測機[1]制,檢測超過幾次認為失敗
inter #檢測的時間間隔
另外inter還可以對其做優化:
fastinter #快速檢測
downinter #慢速檢測
以上可以做啟發式檢測,如果發現故障了可以將其快速檢測幾次
限制最大連接數
Maxconn參數為最大連接數,可以將其限制最大連接數,如下所示
backend webserver
balance uri
hash-type consistent
server web1 10.0.10.82:80 check weight 1 maxconn 2000
server web2 10.0.10.83:80 check weight 1 maxconn 3000
訪問管理頁面:
wKiom1OuQ6Oi_aP-AAFu_XJOHmA317.jpg
如果請求過多,所有超出這個最大連接數 ,如果還被轉發至這個服務器中會被放入至等待隊列中,如果隊列也超時了,這個請求則會直接被響應403
maxqueue
維持每個隊列的長度
minconn
最少連接,用來將maxconn定制為動態值
observer<mode>
健康狀態監測,如果存活則不對其檢查
可以根據4/7層做觀測
redir
所有發往這個服務器的請求做重定向,因此可以實現單臺服務器的重定向
實現重定向:
server web1 10.0.10.82:80 check weight 1 maxconn 2000 redir http://www.baidu.com
訪問測試,可發現最后訪問其haproxy的IP地址 最后被跳轉至百度頁面中了
slowstart
讓haproxy支持慢啟動,但是對于haproxy來講第一啟動是沒有任何意義的
慢啟動只在服務器故障又重新上線的時候才有效果
weight
權重
HAproxy 的 ACL 機制
http訪問控制參數
rediect blockhttp-request use_backend
但凡是使用if的時候必須使用acl進行定義,訪問控制列表的定義可以通過源地址/目標地址,源端口目標端口來定義,所以acl中所支持定義的標準和機制還是比較多的
·ACL 基本定義語法
·acl 名稱 acl標準 [標志位][操作]
·acl 區分大小寫
通常參數都是 -i
值的類型
e.g 1024:65535
比較操作
eg ge gt le lt
字符串
常用參數 -i
常用的匹配標準:
dst 目標地址
dst_port 目標端口
src 源地址
src_prot 源端口
acl goodguys src ip/24 如果是goodguys則允許訪問
tcp-request content accept if goodguys 如果是goodguys則允許發起連接請求
tcp-request content reject 沒有if語句 則拒絕所有(reject)
定義ACL
基于SRC做訪問控制
我們期望用戶訪問的時候如果來源地址是10.0.10.1則拒絕訪問
frontend web_server
bind*:80
default_backendwebservers
acl badguy src 10.0.10.1
block if badguy
acl定義規則名稱為badguy,并且定義如果來源是10.0.10.1的IP地址拒絕訪問
block表示拒絕的意思,if后面加判斷,如果匹配badguy名稱定義的規則那么就執行block的操作
再次訪問
wKioL1OuQ5qjjODGAACwq9LSQOg694.jpg
使用重定向
如果想訪問403頁面重定向到其他頁面的話,則:
frontend web_server
bind *:80
default_backend webserver
acl badguy src 10.0.10.1
block if badguy
errorloc 403 http://baidu.com/ #定義錯誤頁面重定向
在七層做其他的匹配
hdr
檢查首部是否屬于某個指定字符的
frontend web_server
bind *:80
default_backend webserver
acl badguy src 10.0.10.1
acl dstipaddrhdr(Host) 10.0.10.61
redirectlocation http://www.qq.com/ if dstipaddr
errorloc 403 http://baidu.com
以上,通過har機制檢測 如果頭部信息包含此IP地址那么將其重定向至qq.com
如果非此IP地址,那么請求的uri返回是403,那么則直接跳轉到baidu.com
hdr_reg 正則表達式匹配
說明某個首部的值只要匹配這個正則,則執行跳轉
http_first_req
第一次請求匹配
method 訪問方法匹配(GET或POST等)
實現簡單動靜分離功能
acl read method GET
acl read methodHEAD
acl write methodPUT
acl write methodPOST
use_backend imgserif read
use_backend uploadif write
基于path http路徑做訪問控制
是做精確匹配的,因此通常只匹配用戶已經知道的文件路徑
來自某個ip的主機訪問的是1.html 則拒絕訪問,其他全部放行,則:
#首先定義acl 名稱denyfile 根據path來做訪問控制,而path一定跟的是具體訪問路徑
#http-reques 來做規則 如果是badguy 并且訪問的是denyfile 如果匹配兩者則deny掉
frontend web_server
bind *:80
default_backend webserver
acl badguy src 10.0.10.1
acl denyfile path/1.html
http-request deny if badguy denyfile
重新加載配置文件,并且訪問測試:
wKiom1OuQ-ThlEeLAAEOaoZfaWs288.jpg
訪問/1.html 則返回403 ,訪問其他uri則正常返回
path_beg
path只能定義單一路徑或文件,但是path_beg可以定義多個文件或路徑
實例:實現動靜分離功能
首先定義兩個backend,分別以動態和靜態進行分組
backend jingtai
balance roundrobin
server web1 10.0.10.82:80 check weight 1maxconn 2000
backend dongtai
balance roundrobin
server web2 10.0.10.83:80 check weight 1maxconn 3000
配置frontend
frontend web_server
bind *:80
default_backend webservers
acl badguy src 10.0.10.1
acl denyfile path /1.html
#http-request deny if badguy denyfile
acl static path_end .html
use_backend jingtai if static
default_backend dongtai
定義acl名稱為static ,如果訪問匹配是.html的文件,那么直接跳轉至jingtai 這個backend
如果訪問的不匹配.html 那么直接跳轉至默認backend dongtai組
重新加載規則,訪問測試:
wKioL1OuQ9Hzaxd6AAELWeDuSss192.jpg
實現完全動靜分離
在path_end中可以使用-i參數指定多個選項
修改配置信息,將一系列盡可能出現的靜態內容文件類型加入acl的static組內
bind *:80
default_backend webservers
acl badguy src 10.0.10.1
acl denyfile path /1.html
#http-request deny if badguy denyfile
acl static path_end -i .html .jpg .png.jpeg .gif .swf .css .xml .txt .pdf
use_backend jingtai if static
default_backend dongtai
path_reg
正在表達式匹配
acl url_static path_reg -i .jpg$ .html$ 等 ^/static ^/images^/stylsheets
基于正則表達式匹配要比基于字符匹配慢很多,所以如果可以寫成字符匹配就盡可能使用 path_end path_end 而不要使用path_reg
url
之前我們在用path做匹配的時候發現,path不包含頭部信息,而url全部包含
做url匹配要做整個路徑匹配,但事實上用的最多的是path 而不是url,以為用戶訪問文件的時候,可能是這樣訪問:
http://xxx.com/login.php?name=test&password=xxxx
很顯然login.php 才是訪問的文件,而根據整個路徑結尾進行判斷的話則不能判斷其類型的,所以更多用到的是path_end ,因為path_end頂多只能匹配到login.php
而不包含后面的內容
url_beg
url開頭
url_end
url結尾
有些時候我們用url做匹配的時候可能會使用多條進行組合起來
比如:
#如果badguy 訪問的是除了denyfile之外的其他文件,則將被拒絕
http-request denyif badguy !denyfile
如果badguy 或其他人 訪問的是除了denyfile之外的其他文件,則將被拒絕
http-request denyif badguy OR denyfile
健康狀態檢查機制
monitor-uri
通過web組件實現監控的,明確指定監控哪個uri而不是內部監控機制(check)
frontend www
bind :80
monitor-uri /haproxy
意思為做狀態監測必須去請求這個uri的頁面,能請求到并且狀態為200則認為正常的
httpchk
做服務器的健康狀態監測的時候明確說明http協議,可以指定檢查那個uri,還可以指定那種方式檢查uri,只啟用就明確說明只做uri監測 而后面的監測方法全部省略了
backendhttps_relay
mode tcp
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
server apache1 192.168.1.1:443 check port 80
也就意味著我們做健康檢測的時候,是發送自定義信息去check
也就是說httpchk是發送的自定義的方法以及發送的請求報文格式的,只有發送的請求返回值是200,才認為正常否則失敗的
http請求格式:
<method><uri> <version>
<header>
<body>
將OPTIONS *HTTP/1.1\r\nHost:\ www 轉換成標準格式,如下所示:
OPTIONS * HTTP/1.1
Host: www
例:定義對mysql進行檢測
option mysqlchkuser mysqlusername
使用option參數套mysqlchk插件以mysqlusername的名稱去連接mysql,只要能連接上,則認為數據庫正常,否則不允許連接
綜合示例:
示例1.實現動靜分離
匹配以/static/images /img /css 目錄的URI,并匹配以靜態文件內容的URI
acl usr_staticpath_beg -i /static /images /img /css
acl usr_staticpath_end -i .gif .png .jpg
#判斷用戶訪問如果主機名以www開頭的話則標示為host_www
acl host_wwwhdr_beg(host) -i www
如果主機是以img video download 的域名開頭,都被認為是靜態內容
acl host_statichdr_beg(host) -i img. video. download.
#而后做匹配內容,如果三者匹配其中一個則分發至backend static組
use_backend static if host_static or host_www or url_static
default_backendappservers
實例2
global
pidfile /var/run/haproxy.pid
log 127.0.0.1 local0 info
defaults
mode http
clitimeout 600000 # maximum inactivity time on the client side
srvtimeout 600000 # maximum inactivity time on the server side
timeout connect 8000 # maximum time to wait for aconnection
attempt to a server to succeed
stats enable
stats auth admin:password
stats uri /monitor
stats refresh 5s
option httpchk GET /status
retries 5
option redispatch
errorfile 503 /path/to/503.text.file
balance roundrobin # each server isused in turns, according to assigned weight
frontend http
bind :80
monitor-uri /haproxy # end point tomonitor HAProxy status (returns 200)
#只要用戶訪問的path路徑是以api開頭則匹配
acl api1 path_reg ^/api1/?
acl api2 path_reg ^/api2/?
如果是api1的話則使用backend api1 以此類推
use_backend api1 if api1
use_backend api2 if api2
backend api1
# option httpclose
server srv0 127.0.0.1:9000 weight 1 maxconn 100 check inter4000
server srv1 127.0.0.1:9001 weight 1 maxconn 100 check inter4000
server srv2 127.0.0.1:9002 weight 1 maxconn 100 check inter4000
backend api2
option httpclose
server srv01 127.0.0.1:8000 weight 1 maxconn 50 check inter 4000
但是沒有默認服務器也就意味著只允許用戶請求api1api2,以別的任何方式都訪問不到
haproxylisten配置示例:
基于COOKIE做持久連接
只要在listen中還是在backend中是要使用cookie指令 就意味著server中去引用這個cookie的,每個用戶都加上sessionid,因此會為每個用戶請求插入一個會話ID,因此基于這個會話id做負載均衡調度
listen webfarm
bind 192.168.0.99:80
mode http
stats enable
stats auth someuser:somepassword #指定某個用戶某個密碼
balance roundrobin #指定調度算法
cookie JSESSIONID prefix #基于cookie做負載均衡
option httpclose
option forwardfor #添加首部信息
option httpchk HEAD /check.txt HTTP/1.0 #http首部請求的方法是head 請求的是 /check.txt 協議是1.0 ,沒有跟主機就意味著請求的是默認主機,而不是檢測虛擬主機
server webA 192.168.0.102:80 cookie A check #使用cookie做了負載均衡
server webB 192.168.0.103:80 cookie B check
對mysql讀集群做負載均衡
只是對于讀請求可以做負載均衡,如果對于寫做負載均衡的時候直接這樣調度是不合適的
frontendmysqlservers
bind *:3306
default_backend myservs
backend myservs
balance leastconn
option mysqlchk user root
server myserv1 172.16.100.11:3306 check
server myserv2 172.16.100.12:3306 check
- Docker
- 什么是docker
- Docker安裝、組件啟動
- docker網絡
- docker命令
- docker swarm
- dockerfile
- mesos
- 運維
- Linux
- Linux基礎
- Linux常用命令_1
- Linux常用命令_2
- ip命令
- 什么是Linux
- SELinux
- Linux GCC編譯警告:Clock skew detected. 錯誤解決辦法
- 文件描述符
- find
- 資源統計
- LVM
- Linux相關配置
- 服務自啟動
- 服務器安全
- 字符集
- shell腳本
- shell命令
- 實用腳本
- shell 數組
- 循環與判斷
- 系統級別進程開啟和停止
- 函數
- java調用shell腳本
- 發送郵件
- Linux網絡配置
- Ubuntu
- Ubuntu發送郵件
- 更換apt-get源
- centos
- 防火墻
- 虛擬機下配置網絡
- yum重新安裝
- 安裝mysql5.7
- 配置本地yum源
- 安裝telnet
- 忘記root密碼
- rsync+ crontab
- Zabbix
- Zabbix監控
- Zabbix安裝
- 自動報警
- 自動發現主機
- 監控MySQL
- 安裝PHP常見錯誤
- 基于nginx安裝zabbix
- 監控Tomcat
- 監控redis
- web監控
- 監控進程和端口號
- zabbix自定義監控
- 觸發器函數
- zabbix監控mysql主從同步狀態
- Jenkins
- 安裝Jenkins
- jenkins+svn+maven
- jenkins執行shell腳本
- 參數化構建
- maven區分環境打包
- jenkins使用注意事項
- nginx
- nginx認證功能
- ubuntu下編譯安裝Nginx
- 編譯安裝
- Nginx搭建本地yum源
- 文件共享
- Haproxy
- 初識Haproxy
- haproxy安裝
- haproxy配置
- virtualbox
- virtualbox 復制新的虛擬機
- ubuntu下vitrualbox安裝redhat
- centos配置雙網卡
- 配置存儲
- Windows
- Windows安裝curl
- VMware vSphere
- 磁盤管理
- 增加磁盤
- gitlab
- 安裝
- tomcat
- Squid
- bigdata
- FastDFS
- FastFDS基礎
- FastFDS安裝及簡單實用
- api介紹
- 數據存儲
- FastDFS防盜鏈
- python腳本
- ELK
- logstash
- 安裝使用
- kibana
- 安準配置
- elasticsearch
- elasticsearch基礎_1
- elasticsearch基礎_2
- 安裝
- 操作
- java api
- 中文分詞器
- term vector
- 并發控制
- 對text字段排序
- 倒排和正排索引
- 自定義分詞器
- 自定義dynamic策略
- 進階練習
- 共享鎖和排它鎖
- nested object
- 父子關系模型
- 高亮
- 搜索提示
- Redis
- redis部署
- redis基礎
- redis運維
- redis-cluster的使用
- redis哨兵
- redis腳本備份還原
- rabbitMQ
- rabbitMQ安裝使用
- rpc
- RocketMQ
- 架構概念
- 安裝
- 實例
- 好文引用
- 知乎
- ACK
- postgresql
- 存儲過程
- 編程語言
- 計算機網絡
- 基礎_01
- tcp/ip
- http轉https
- Let's Encrypt免費ssl證書(基于haproxy負載)
- what's the http?
- 網關
- 網絡IO
- http
- 無狀態網絡協議
- Python
- python基礎
- 基礎數據類型
- String
- List
- 遍歷
- Python基礎_01
- python基礎_02
- python基礎03
- python基礎_04
- python基礎_05
- 函數
- 網絡編程
- 系統編程
- 類
- Python正則表達式
- pymysql
- java調用python腳本
- python操作fastdfs
- 模塊導入和sys.path
- 編碼
- 安裝pip
- python進階
- python之setup.py構建工具
- 模塊動態導入
- 內置函數
- 內置變量
- path
- python模塊
- 內置模塊_01
- 內置模塊_02
- log模塊
- collections
- Twisted
- Twisted基礎
- 異步編程初探與reactor模式
- yield-inlineCallbacks
- 系統編程
- 爬蟲
- urllib
- xpath
- scrapy
- 爬蟲基礎
- 爬蟲種類
- 入門基礎
- Rules
- 反反爬蟲策略
- 模擬登陸
- problem
- 分布式爬蟲
- 快代理整站爬取
- 與es整合
- 爬取APP數據
- 爬蟲部署
- collection for ban of web
- crawlstyle
- API
- 多次請求
- 向調度器發送請求
- 源碼學習
- LinkExtractor源碼分析
- 構建工具-setup.py
- selenium
- 基礎01
- 與scrapy整合
- Django
- Django開發入門
- Django與MySQL
- java
- 設計模式
- 單例模式
- 工廠模式
- java基礎
- java位移
- java反射
- base64
- java內部類
- java高級
- 多線程
- springmvc-restful
- pfx數字證書
- 生成二維碼
- 項目中使用log4j
- 自定義注解
- java發送post請求
- Date時間操作
- spring
- 基礎
- spring事務控制
- springMVC
- 注解
- 參數綁定
- springmvc+spring+mybatis+dubbo
- MVC模型
- SpringBoot
- java配置入門
- SpringBoot基礎入門
- SpringBoot web
- 整合
- SpringBoot注解
- shiro權限控制
- CommandLineRunner
- mybatis
- 靜態資源
- SSM整合
- Aware
- Spring API使用
- Aware接口
- mybatis
- 入門
- mybatis屬性自動映射、掃描
- 問題
- @Param 注解在Mybatis中的使用 以及傳遞參數的三種方式
- mybatis-SQL
- 逆向生成dao、model層代碼
- 反向工程中Example的使用
- 自增id回顯
- SqlSessionDaoSupport
- invalid bound statement(not found)
- 脈絡
- beetl
- beetl是什么
- 與SpringBoot整合
- shiro
- 什么是shiro
- springboot+shrio+mybatis
- 攔截url
- 枚舉
- 圖片操作
- restful
- java項目中日志處理
- JSON
- 文件工具類
- KeyTool生成證書
- 兼容性問題
- 開發規范
- 工具類開發規范
- 壓縮圖片
- 異常處理
- web
- JavaScript
- 基礎語法
- 創建對象
- BOM
- window對象
- DOM
- 閉包
- form提交-文件上傳
- td中內容過長
- 問題1
- js高級
- js文件操作
- 函數_01
- session
- jQuery
- 函數01
- data()
- siblings
- index()與eq()
- select2
- 動態樣式
- bootstrap
- 表單驗證
- 表格
- MUI
- HTML
- iframe
- label標簽
- 規范編程
- layer
- sss
- 微信小程序
- 基礎知識
- 實踐
- 自定義組件
- 修改自定義組件的樣式
- 基礎概念
- appid
- 跳轉
- 小程序發送ajax
- 微信小程序上下拉刷新
- if
- 工具
- idea
- Git
- maven
- svn
- Netty
- 基礎概念
- Handler
- SimpleChannelInboundHandler 與 ChannelInboundHandler
- 網絡編程
- 網絡I/O
- database
- oracle
- 游標
- PLSQL Developer
- mysql
- MySQL基準測試
- mysql備份
- mysql主從不同步
- mysql安裝
- mysql函數大全
- SQL語句
- 修改配置
- 關鍵字
- 主從搭建
- centos下用rpm包安裝mysql
- 常用sql
- information_scheme數據庫
- 值得學的博客
- mysql學習
- 運維
- mysql權限
- 配置信息
- 好文mark
- jsp
- jsp EL表達式
- C
- test