HAProxy安裝及配置

一、安裝

一、安裝相關軟件庫

yum install  -y gccphp

二、建立路徑下載安裝包

mkdir –p /zjl/softwarehtml

wget http://download.openpkg.org/components/cache/haproxy/haproxy-1.8.6.tar.gz前端

 

三、建立一個不能登陸的用戶管理HAProxy

groupadd HAProxylinux

useradd -s /sbin/nologin –M –g  HAProxy  HAProxynginx

 

四、建立安裝目錄:

建立安裝目錄:  mkdir –p /zjl/programweb

 

五、編譯參數說明(轉載自:http://blog.sina.com.cn/s/blog_51d3553f0100u1bb.html):

make TARGET=os ARCH=arch CPU=cpu USE_xxx=1 …正則表達式

編譯以前,首先查看一下系統內核,由於參數與系統內核有關。   uname –r  或  uname –aredis

2.6.32-504.el6.x86_64算法

 

參數說明(在README文件中這些參數都有體現)數據庫

TARGET

指定對目標操做系統在編譯的時候進行優化,可選擇以下值之一:

linux22  for Linux 2.2

linux24  for Linux 2.4 and above (default)

linux24e  for Linux 2.4 with support for a working epoll (> 0.21)

linux26  for Linux 2.6 and above

solaris  for Solaris 8 or 10 (others untested)

freebsd  for FreeBSD 5 to 8.0 (others untested)

openbsd  for OpenBSD 3.1 to 4.6 (others untested)

cygwin  for Cygwin

generic  for any other OS.

custom  to manually adjust every setting

若是目標系統不肯定,則保持默認值generic便可。

 

CPU

指定對特定的cpu進行優化,能夠選擇值以下:

i686   for intel PentiumPro, Pentium 2 and above, AMD Athlon

i586   for intel Pentium, AMD K6, VIA C3.

ultrasparc :   Sun UltraSparc I/II/III/IV processor

generic :   any other processor or no specific optimization. (default)

 

ARCH

指定ARCH值可強制編譯成聖針對一個特定系統架構程序。

一般用於在一個系統架構的平臺上生成針對另外一個不一樣架構平臺的程序。

好比:在一個64位架構的目標系統上編譯生成一個32位的程序。

當前可選的值有:

x86_64

i386

i486

i586

i686

注意:若是選擇上述其中的一個值「-m32」或「-m64」會被添加到CFLAGS和LDFLAG選項中。

 

DEBUG

指定生成調試信息,可經過指定DEBUG= DDEBUG_xxx對特定的代碼部分生成調試信息。當前定義的DEBUG宏有:

DEBUG_FULL

DEBUG_MEMORY

DEBUG_FSM

DEBUG_HASH

DEBUG_AUTH

 

USE_PCRE和USE_STATIC_PCRE

能夠經過指定「USE_xxx=1」表示使用,「USE_xxx=」表示禁用。

指定是否使用libpcre庫中的正則表達式實現來替換系統的libc庫中的實現,考慮到使用libpcre庫的效率要比libc高,所以推薦此項使用。

注意:

由於libpcre尚未普遍普及,所以在動態連接的時候,須要確保目標系統安裝有libpcre的動態庫。針對上面的問題,可使用USE_STATIC_PCRE 指定動態連接libpcre。

使用libpcre編譯時,須要確保系統中已經安裝了libpcre庫。若不使用libpcre,則默認使用系統libc庫中的標準正則表達式實現。

強烈推薦使用STATIC_PCRE

 

PREFIX

指定安裝目錄,默認爲/usr/local,其餘諸如文檔之類的文件將會在PREFIX指定的相應目錄下。

 

DESTDIR

指定安裝目錄,默認沒有設置,若是想將haproxy安裝一個沙盒中則能夠指定該屬性。

考慮到咱們的系統爲Linux,內核2.6+版本的,CPU爲x86_64的,可使用以下命令編譯:

make TARGET=linux26 USE_STATIC_PCRE=1

以上參數值用於說明使用,重點是下面所要執行的命令:

爲了簡便,咱們這裏不加USE_STATIC_PCRE參數。

make TARGET=linux26  PREFIX=/usr/local/haproxy-1.8.6

 

六、編譯命令:

make TARGET=linux26 ARCH=x86_64 PREFIX=/usr/local/haproxy

make install PREFIX=/usr/local/haproxy

 

七、配置文件:

解壓後的安裝包裏examples 文件夾下一些cfg格式的文件都是簡單的配置

image

配置:

global
        daemon               # 後臺方式運行
        nbproc 1
        pidfile /zjl/program/haproxy/conf/haproxy.pid


defaults
        mode tcp               #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
        retries 2               #兩次鏈接失敗就認爲是服務器不可用,也能夠經過後面設置
        option redispatch       #當serverId對應的服務器掛掉後,強制定向到其餘健康的服務器
        option abortonclose     #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的連接
        maxconn 4096            #默認的最大鏈接數
        timeout connect 5000ms  #鏈接超時
        timeout client 30000ms  #客戶端超時
        timeout server 30000ms  #服務器超時
        #timeout check 2000      #=心跳檢測超時
        log 127.0.0.1 local0 err #[err warning info debug]


########test1配置#################
listen test1                         #這裏是配置負載均衡,test1是名字,能夠任意
        bind 0.0.0.0:80            #這裏是監聽的IP地址和端口,端口號能夠在0-65535之間,要避免端口衝突
        mode tcp                     #鏈接的協議,這裏是tcp協議
        #maxconn 4086
        #log 127.0.0.1 local0 debug
        server s1 192.168.244.131:80 #負載的機器
        server s2 192.168.244.130:80 #負載的機器,負載的機器能夠有多個,往下排列便可
View Code

八、啓動:

/zjl/program/haproxy/sbin/haproxy -f /zjl/program/haproxy/conf/haproxy.cfg

-f 是指定咱們的配置文件的路徑。

九、驗證

在另外兩臺機器192.168.244.130、192.168.244.131  上安裝了nginx

haproxy所在的機器爲:192.168.244.128

配置haproxy.cfg 監聽端口 80 , 協議爲http

重啓後屢次訪問http://192.168.244.128   把訪問負載到192.168.244.130、192.168.244.131   這兩臺機器上的nginx

十、配置監控頁面

haproxy帶有監控功能,並且配置簡單,直接在主配置文件中加入一下配置便可

用戶名/密碼   admin/admin

listen  admin_stats
        bind 0.0.0.0:8888
        mode  http
        stats uri   /haproxy
        stats realm     Global\ statistics
        stats auth  admin:admin

給監控配置端口檢測:注意(check port 3306)

listen test1
        bind 0.0.0.0:3306
        mode tcp
        #maxconn 4086
        #log 127.0.0.1 local0 debug
        server s1 192.168.111.101:3306 check port 3306
        server s2 192.168.111.102:3306 check port 3306

二、配置文件詳解

haproxy 配置中分紅五部份內容,分別以下:

1 、global:    參數是進程級的,一般是和操做系統相關。這些參數通常只設置一次,若是配置無誤,就不須要再次進行修改
2 、defaults:  配置默認參數,這些參數能夠被用到frontend,backend,Listen組件
3 、frontend: 接收請求的前端虛擬節點,Frontend能夠更加規則直接指定具體使用後端的backend
4 、 backend:後端服務集羣的配置,是真實服務器,一個Backend對應一個或者多個實體服務器
5 、 Listen:    是 Fronted和backend的組合體

 

有關haproxy配置文件咱們先簡單介紹,以下:

global配置段,用於設定全局配置參數。

代理配置段中,主要是使用defaults、frontend、backend、listen關鍵詞。

一、defaults配置段用於爲全部其它配置段提供默認參數,這配置默認配置參數可由下一個「defaults」所從新設定。

二、frontend配置段用於定義一系列監聽的套接字,這些套接字可接受客戶端請求並與之創建鏈接。

三、backend配置段用於定義一系列「後端」服務器,代理將會將對應客戶端的請求轉發至這些服務器。

四、listen配置段經過關聯「前端」和「後端」定義了一個完整的代理,一般只對TCP流量有用。

在上述haproxy配置文件中,咱們主要講解ACL的匹配規則。

acl is_dg hdr_beg(host) dg.test.com    該行定義一個is_dg規則,若是客戶端請求的是dg.test.com這個域名,則定義該規則爲is_dg。

use_backend dgserver if is_dg     該定義一個dgserver服務器組,若是客戶端請求符合is_dg定義的規則,則把該客戶端的請求分發到dgserver服務器組。

acl is_ip src 192.168.5.140     該行定義一個is_ip規則,若是客戶端的IP地址是192.168.5.140,則定義該規則爲is_ip。

use_backend acl if is_171 is_ip    該定義一個acl服務器組,若是客戶端請求同時符合is_ip和is_171定義的規則,則把該客戶端的請求分發到acl服務器組。

default_backend backend_default    該行定義一個默認服務器組,若是客戶端請求不符合上述定義的任何一個規則,則把該客戶端的請求分發到backend_default服務器組。

##全局配置信息###
global
        log 127.0.0.1 local3                #[error warringinfo debug]#定義haproxy 日誌級別 
        #log 127.0.0.1  local1 notice 
        #log loghost    local0 info 
        maxconn 32768                      #默認最大鏈接數 
        chroot /usr/local/haproxy        #安裝目錄        

        uid 99                                     #運行haproxy 用戶 UID 

        gid 99                                     #運行haproxy 用戶組gid 
        daemon                                  #之後臺形式運行harpoxy 
        nbproc 1                                 #設置harpoxy 的進程數量 
        pidfile /usr/local/haproxy/run/haproxy.pid      #haproxy的進程PID文件 
        ulimit-n 65535                                                #ulimit 的數量限制 
        #debug                                                           #haproxy 調試級別,建議只在開啓單進程的時候調試 
        #quiet

####默認配置選項#######

defaults
        log    global
        mode    http                #設置haproxy的代理模式(7層代理http,4層代理tcp) 
        maxconn 65535         #最大鏈接數 
        option  httplog            #設置日誌類別爲http日誌 
        option  httpclose        #設置每次請求完畢後主動關閉http通道 
        option  dontlognull     #不記錄健康檢查日誌信息 
        option  forwardfor      #若是後端服務器須要得到客戶端的真實ip,須要配置此參數,能夠從http header 中獲取客戶端的IP 
        retries 3                       #3次鏈接失敗就認爲服務器不可用,也能夠經過後面設置 
        option redispatch         #設置serverID 對應的服務器掛掉後,強制定向到其餘健康的服務器 
        stats refresh 30            # 設置統計頁面刷新時間間隔 
        option abortonclose     #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的鏈接
        balance roundrobin      #設置默認負載均衡方式,輪詢方式 
       #balance source           # 設置默認負載均衡方式,對源ip的hash,原理相似於nginx的ip_hash 
       #balnace leastconn      #設置默認負載均衡方式,最小鏈接數 
        contimeout 5000          #設置鏈接超時時間 
        clitimeout 50000          #設置客戶端超時時間 
        srvtimeout 50000         #設置服務器超時時間 
        timeout check  2000    #設置心跳檢查超時時間 
        #timeout http-request  10s    #默認http請求超時時間 
        #timeout queue           1m     #默認隊列超時時間 
        #timeout connect        10s    #默認鏈接超時時間 
        #timeout client        1m         #默認客戶端超時時間 
        #timeout server        1m       #默認服務器超時時間 
        #timeout http-keep-alive10s  #默認持久鏈接超時時間

#########設置監控頁面######
 listen  admin_status
        bind 0.0.0.0:81          #設置Frontend和Backend的組合體,監控組的名稱,按須要自定義名稱 
        mode http                           #設置http的7 層模式層 
        log 127.0.0.1 local3 err      #錯誤日誌記錄 
        stats refresh 30s                #設置監控頁面刷新時間:5s 
        stats uri  /haproxy-stats      # 設置監控頁面的url 
        stats realm  Frank \Frank   #設置頁面提示信息 
        stats auth admin:admin123     #設置監控頁面的用戶名和密碼:admin,能夠設置多個用戶名 
        stats auth  Frank:Frank           #設置監控頁面的用戶和密碼:Frank 
        stats hide-version                    #隱藏監控頁面的HAproxy版本信息 
        stats  admin if TRUE               #設置手工啓動/禁用,後端服務器(haproxy-1.4.9之後版本)

########設置haproxy 錯誤頁面#####

errorfile 403 /usr/local/haproxy/errorfiles/403.http
errorfile 500 /usr/local/haproxy/errorfiles/500.http
errorfile 502 /usr/local/haproxy/errorfiles/502.http
errorfile 503 /usr/local/haproxy/errorfiles/503.http
errorfile 504 /usr/local/haproxy/errorfiles/504.http

##### 設置frontend#########

frontend http_80_in
      bind 0.0.0.0:80               #設置監聽端口,即haproxy提供的web服務端口,和lvs的vip 相似 
      mode http                       # http 的7層模式 
      log global                       #應用全局的日誌設置 
      option httplog                 #啓用http的log 
      option httpclose             #每次請求完畢後主動關閉http通道,HA-proxy不支持keep-alive模式 
      option forwardfor           #若是後端服務器須要得到客戶端的真實IP,須要配置此參數,將能夠從HttpHeader中得到客戶端IP

####acl 策略配置######
      acl  frank_web hdr_reg(host)  -i ^(www.test.com.sh|news.test.com.sh)$
      #若是請求的域名知足正則表達式中的2個域名返回true -i 是忽略大小寫 
      # acl frank_fund  hdr_dom(host)  -i fund.test.com.sh 
      #若是請求的域名知足fund.test.com.sh返回true -i是忽略大小寫 
      acl  frank    hdr(host) -i test.com.sh
      #若是請求的域名知足test.com.sh返回true -i是忽略大小寫 
      #acl file_req url_sub -i  killall= 
      #在請求url中包含killall=,則此控制策略返回true,不然爲false 
      # acl dir_req url_dir -i allow 
      #在請求url中存在allow做爲部分地址路徑,則此控制策略返回true,不然返回false 
      acl missing_cl hdr_cnt(Content-length)eq 0
      #當請求的header中Content-length等於0時返回true 
      #### Manage interface #### 
       acl Frank_Manage path_dir /Frank/manage/
       acl Frank_Network src  192.168.151.189 192.168.152.0/24
       ## deny lb.html### 
       acl Frank_lb  path /lb.html

########acl策略匹配相應#############

      block if Frank_lb
      block if Frank_Manage !Frank_Network
      #block if missing_cl 
      #當請求的header中Content-length等於0阻止請求返回403 
      #block if !file_req || dir_req 
      #block表示阻止請求,返回403錯誤,當前表示若是不知足策略file_req,或者知足策略dir_req,則阻止請求 
      redirect prefix http://192.168.151.249 code 301 if frank
      #當訪問test.com.sh的時候,用http的301挑轉到http://192.168.151.249 
      use_backend  server_web if frank_web
      #當知足frank_web的策略時使用server_web的backend服務器
      #use_backend  server_blog if frank_fund 
      #當知足frank_fund的策略時使用server_blog的backend服務器 
      default_backend server_web
      #以上都不知足的時候使用默認server_web的backend服務器

##########backend的設置##############
####################backend  server_web#########################
backend  server_web
      mode http            #http的7層模式 
      balance roundrobin  #負載均衡的方式,roundrobin平均方式  
      #cookie SERVERID insert indirect nocache   #容許serverid插入cookie中,serverid後面能夠定義      
      option httpchk GET /lb.html HTTP/1.0    #心跳檢測的文件 
      server 192.168.51.78 192.168.151.78:80  weight 1 cookie cookie78 check inter 1500 rise 3 fall 3
      #服務器定義,cookie 78表示serverid爲web78,check inter1500 是檢測心跳頻率,rise 3是3次正確認爲服務器可用,fall 3是3次失敗認爲服務器不可用,weight 1表明權重爲1 
      server 192.168.151.79 192.168.151.79:80 weight 1 cookie cookie79 check inter 1500 rise 3 fall 3
      #服務器定義,cookie 79表示serverid爲web79,check inter1500 是檢測心跳頻率,rise 3 是3次正確認爲服務器可用,fall 3 是3次失敗認爲服務器不可用,weight 1表明權重爲1

另:

global
    daemon
    maxconn 60000   #ulimit -n至少爲60018最大鏈接併發數
    #user /var/sbin/haproxy
    #user haproxy  #運行haproxy的用戶
    #chroot /usr/local/haproxy  #安裝根目錄
    pidfile /var/run/haproxy.pid
    log 127.0.0.1 local2

defaults
    mode http
    log global
    #option http-keep-alive   #使用keepAlive鏈接    
    option forwardfor    #若是後端服務器須要得到客戶端的真實ip,須要配置的參數,記錄客戶端IP在X-Forwarded-For頭域中
    option http-server-close # 後端爲動態應用程序建議使用http-server-close,後端爲靜態建議使用http-keep-alive 
    option httplog           #開啓httplog,HAProxy會記錄更豐富的請求信息
    option abortonclose #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的連接
    #option httpchk GET /healthCheck.html    #定義默認的健康檢查策略
    option redispatch #當serverid對應的服務器掛掉後,強制定向到其餘健康的服務器
    balance roundrobin  #設置默認負載均衡方式,輪詢方式
    #balance source 設置默認負載均衡方式,相似於nginx的ip_hash
    #balance leastconn 設置默認負載均衡方式,請求轉發到具備最少鏈接數目的後端服務器,在會話時間較長的場景中推薦使用此算法。例如數據庫負載均衡等
    timeout connect 2000ms #haproxy和服務端創建鏈接的最大時長,設置爲1秒就足夠了。局域網內創建鏈接通常都是瞬間的
    timeout client 10000ms #和客戶端保持空閒鏈接的超時時長,在高併發下可稍微短一點,可設置爲10秒以儘快釋放鏈接
    timeout server 8000ms #和服務端保持空閒鏈接的超時時長,局域網內創建鏈接很快,因此儘可能設置短一些,特別是併發時,如設置爲1-3秒    
    timeout http-request 12000ms  #從鏈接建立開始到從客戶端讀取完整HTTP請求的超時時間,用於避免類DoS攻擊
    timeout queue 5000ms #請求在隊列中排隊的最大時長

########frontend前端配置##############
frontend http-in
    bind *:80 #這裏建議使用bind *:80的方式,要否則作集羣高可用的時候有問題,vip切換到其餘機器就不能訪問了
    #maxconn 30000  #定義此端口上的maxconn最大鏈接併發數
    #url地址重寫,條件   
    #acl login_AuthCallBack path_beg -i /Account/AuthCallBack? 
    #acl login_AuthCallBack url_beg (/Account/AuthCallBack\?)
    #acl login_AuthCallBack path_reg (/Account/AuthCallBack\?)
    #acl login_AuthCallBack url_beg  -i /Account/AuthCallBack?  #測試可用1
    #acl url_ms1 path_beg -i /ms1/    #定義ACL,當uri以/ms1/開頭時,ACL[url_ms1]爲true
    #acl url_ms2 path_beg -i /ms2/    #同上,url_ms2
    #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規則。
    #redirect prefix http://192.168.21.201:8000  if login_AuthCallBack  #測試可用1  重定向
    #redirect prefix http://192.168.21.126:8089  if login_AuthCallBack  #測試可用1  重定向
    #redirect location http://192.168.21.126:8089 if login_AuthCallBack 
    #redirect prefix http://192.168.21.201:8000  if login_AuthCallBack     
    #redirect location http://0.0.0.0:8000/  if login_AuthCallBack  
    #use_backend youxi_pool if youxi  
    #use_backend ms1 if url_ms1       #當[url_ms1]爲true時,定向到後端服務羣ms1中
    #use_backend ms2 if url_ms2       #當[url_ms2]爲true時,定向到後端服務羣ms2中
    #use_backend webserver if web   #若是上面定義的web規則被觸發,即訪問www.abc.com,就將請求分發到webserver這個做用域。
    #use_backend imgserver if img   #若是上面定義的img規則被觸發,即訪問img.abc.com,就將請求分發到imgserver這個做用域。
    default_backend dynamic_servers  #其餘狀況時,定向到後端服務羣default_servers中    

backend dynamic_servers    #定義後端服務羣default_servers
   #balance roundrobin
    #棄用這行設置,會導致後端服務器誰優先寫入了cookie的值,則以後每次請求都會定向到此後端服務器(不會輪詢了) 
   #cookie app_cook insert indirect nocache
   #server webser1 192.168.21.126:8076 cookie webser1 maxconn 300 check
   server webser1 192.168.21.126:8070 cookie webser1 maxconn 300 check
   server webser2 192.168.21.126:8071 cookie webser2 maxconn 300 check
   server webser3 192.168.21.126:8072 cookie webser3 maxconn 300 check
   server webser4 192.168.21.126:8073 cookie webser4 maxconn 300 check

#backend ms1    #定義後端服務羣ms1
#    balance roundrobin    #使用RR負載均衡算法
#    cookie HA_STICKY_ms1 insert indirect nocache    #會話保持策略,insert名爲"HA_STICKY_ms1"的cookie
#	
#    #定義後端server[ms1.srv1],請求定向到該server時會在響應中寫入cookie值[ms1.srv1]
#    #針對此server的maxconn設置爲300
#    #應用默認健康檢查策略,健康檢查間隔和超時時間爲2000ms,兩次成功視爲節點UP,三次失敗視爲節點DOWN
#    server ms1.srv1 192.168.8.111:8080 cookie ms1.srv1 maxconn 300 check inter 2000ms rise 2 fall 3
#	
#    #同上,inter 2000ms rise 2 fall 3是默認值,能夠省略
#    server ms1.srv2 192.168.8.112:8080 cookie ms1.srv2 maxconn 300 check
#
#backend ms2    #定義後端服務羣ms2
#    balance roundrobin
#    cookie HA_STICKY_ms2 insert indirect nocache
#    server ms2.srv1 192.168.8.111:8081 cookie ms2.srv1 maxconn 300 check
#    server ms2.srv2 192.168.8.112:8081 cookie ms2.srv2 maxconn 300 check    

#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

########統計頁面配置########
listen stats    #定義監控頁面
    bind *:2000                   #綁定端口1080
    maxconn 10 #默認的最大鏈接數
    stats refresh 30s             #每30秒更新監控數據
    stats uri /stats              #訪問監控頁面的uri
    #stats realm HAProxy\ Stats    #監控頁面的認證提示
    #stats auth admin:admin #設置監控頁面的用戶和密碼:admin,能夠設置多個用戶名
    #stats auth Frank:Frank #設置監控頁面的用戶和密碼:Frank
    #stats hide-version #隱藏統計頁面上HAProxy的版本信息

#登錄回調端口監聽
listen port8070_8071_8072_8073
   bind *:8070
   bind *:8071
   bind *:8072
   bind *:8073
    #條件
   acl login_AuthCallBack url_beg  -i /Account/AuthCallBack?  #測試可用1
    #重定向
   redirect prefix http://192.168.21.201:8000  if login_AuthCallBack  #測試可用1 

#listen port8070
#   bind *:8070
#     #條件
#    acl login_AuthCallBack url_beg  -i /Account/AuthCallBack?  #測試可用1
#     #重定向
#    redirect prefix http://192.168.21.201:8000  if login_AuthCallBack  #測試可用1 
#
#listen port8071
#   bind *:8071
#     #條件
#    acl login_AuthCallBack url_beg  -i /Account/AuthCallBack?  #測試可用1
#     #重定向
#    redirect prefix http://192.168.21.201:8000  if login_AuthCallBack  #測試可用1 
#
#listen port8072
#   bind *:8072
#     #條件
#    acl login_AuthCallBack url_beg  -i /Account/AuthCallBack?  #測試可用1
#     #重定向
#    redirect prefix http://192.168.21.201:8000  if login_AuthCallBack  #測試可用1 
#
#listen port8073
#   bind *:8073
#     #條件
#    acl login_AuthCallBack url_beg  -i /Account/AuthCallBack?  #測試可用1
#     #重定向
#    redirect prefix http://192.168.21.201:8000  if login_AuthCallBack  #測試可用1 

 

 

參考:https://blog.csdn.net/king_kgh/article/details/75599083

        http://www.javashuo.com/article/p-giugnwju-bo.html

        http://www.javashuo.com/article/p-qxlniskh-dn.html

相關文章
相關標籤/搜索