内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析-創(chuàng)新互聯(lián)

  小生博客:http://xsboke.blog.51cto.com

創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、淮安網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為淮安等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

               -------謝謝您的參考,如有疑問,歡迎交流


目錄

  • varnishi簡介

  • varnish配置組成

-------------------------------------- vcl內(nèi)置預(yù)設(shè)變量

-------------------------------------- 功能語句與對象

-------------------------------------- varnish中內(nèi)置子程序

-------------------------------------- varnish緩存模式和子程序的關(guān)系

  • varnish的安裝

  • varnish實(shí)例配置解析

  • 啟動varnish

  • varnish acl配置解析


一、 Varnish簡介

 1. 作用

  • Web應(yīng)用加速器,同時(shí)作為http反向緩存代理

 2. 特點(diǎn)

  • Varnish可以使用內(nèi)存也可以使用硬盤進(jìn)行數(shù)據(jù)緩存

  • 支持虛擬內(nèi)存的使用

  • 有精確的時(shí)間管理機(jī)制

  • 狀態(tài)引擎架構(gòu):通過特定的配置語言設(shè)計(jì)不同的語句

  • 以二叉堆格式管理緩存數(shù)據(jù)

 3. Varnish的優(yōu)勢

  • Varnish訪問速度快,因?yàn)椴捎昧恕癡isual Page Cache”技術(shù),在讀取數(shù)據(jù)時(shí)直接從內(nèi)存中讀取

  • Varnish支持更多的并發(fā)連接,因?yàn)関arnish的TCP連接比squid快

  • Varnish通過管理端口,使用正則表達(dá)式批量的清除部分緩存

 4. Varnish的劣勢

  • 進(jìn)程一旦crash或重啟,緩存的數(shù)據(jù)將從內(nèi)存中完全釋放

  • 在多臺varnish實(shí)現(xiàn)負(fù)載均衡時(shí),每次請求都會落到不同的varnish服務(wù)器中,造成url請求可能會穿透到后端

    1)劣勢解決方案

    A、在varnish的后端添加squid/nignx代理,這樣防止了當(dāng)varnish緩存被清空時(shí),瞬間大量的請求發(fā)往web服務(wù)器

    B、在負(fù)載均衡上做url哈西,讓單個(gè)url請求固定請求到一臺varnish服務(wù)器上

 5. Varnish的組成

  1) Management進(jìn)程(管理進(jìn)程)

   對child進(jìn)程進(jìn)行管理,同時(shí)對vcl配置進(jìn)行編譯

  2) Child進(jìn)程(子進(jìn)程)

   生成線程池,負(fù)責(zé)處理用戶請求

 6. Varnish配置組成

l  后端配置:指定后端服務(wù)器

l  ACL配置:為varnish添加訪問控制列表,用于規(guī)則設(shè)置

l  Probes配置:實(shí)現(xiàn)后端服務(wù)器的健康檢查

l  Directors配置:為varnish添加集群

l  核心子進(jìn)程:為后端服務(wù)器、緩存、訪問控制、錯(cuò)誤處理等功能添

一、 arnish配置簡介

 1. vcl內(nèi)置預(yù)設(shè)變量

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  • 這些變量一般用于設(shè)置各個(gè)階段的對象值

  • 預(yù)設(shè)變量是系統(tǒng)固定的,請求進(jìn)入vcl子程序后便生成,這些變量可以方便子進(jìn)程進(jìn)行提取或者自定義

  • 格式一般為:階段 .對象運(yùn)算符值

1)階段

  • Req:處理客戶端發(fā)送的請求時(shí)使用

  • Bereq:處理varinish向后端服務(wù)器發(fā)送的請求時(shí)使用

  • Beresp:處理后端服務(wù)器響應(yīng)時(shí)使用,用于varnish未緩存前

  • Resp:處理返回給客戶端的響應(yīng)時(shí)使用

  • Obj:處理存儲在內(nèi)存中的對象時(shí)使用

2)對象

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  3)   運(yùn)算符

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

 2. 功能語句與對象

l  一般功能語句都用于匹配對象,就是對某個(gè)對象實(shí)現(xiàn)什么操作

l  格式為:功能語句(對象)

1)功能語句

  • ban():清除指定對象緩存

  • call():調(diào)用子程序

  • hash_data():生成hash鍵值,只能在vcl_hash子程序中使用

  • new():創(chuàng)建一個(gè)vcl對象,只能在vcl_init子程序中使用

  • return():結(jié)束當(dāng)前子程序并執(zhí)行下一步動作

  • rollback():恢復(fù)http頭到原來的狀態(tài),現(xiàn)在使用std.rollback()代替。

  • .synthetic():合成器,用于自定義一個(gè)響應(yīng)內(nèi)容,只能在vcl_synth和vcl_backend_error子程序中使用

  • regsub(待處理字符,正則表達(dá)式,替換為的字符):使用正則替換第一次出現(xiàn)的字符串

  • regsuball(待處理字符,正則表達(dá)式,替換為的字符):使用正則替換所有字符串

2)return的常用動作

 語法:return(action)

  • abandon:放棄處理,并生成一個(gè)錯(cuò)誤。

  • deliver:交付處理

  • fetch:從后端取出響應(yīng)對象

  • hash:哈希緩存處理

  • lookup:從緩存中查找應(yīng)答數(shù)據(jù)并返回,如果查找不到,則調(diào)用pass函數(shù),從后端服務(wù)器調(diào)用數(shù)據(jù)。

  • ok:繼續(xù)執(zhí)行

  • pass:繞過緩存,直接向后端服務(wù)器調(diào)用數(shù)據(jù)

  • pipe:建立客戶端和后端服務(wù)器之間的直接連接,從后端服務(wù)器調(diào)用數(shù)據(jù)

  • purge:清除緩存對象,構(gòu)建響應(yīng)

  • restart:重新開始

  • retry:重試后端處理

  • synth(status code,reason):合成返回客戶端狀態(tài)信息

 3. varnish中內(nèi)置子程序

  • 子進(jìn)程也叫狀態(tài)引擎,每一個(gè)狀態(tài)引擎均有自己限定的返回動作 return (動作);  不同的動作將調(diào)用對應(yīng)下一個(gè)狀態(tài)引擎。

  • 我們可以把一個(gè)請求分為多個(gè)階段,每個(gè)階段都會調(diào)用不同的狀態(tài)引擎去操作,這樣,我們只要編寫出相應(yīng)的狀態(tài)引擎,就可以控制每個(gè)請求階段。

  • varnish內(nèi)置子程序均有自己限定的返回動作 return (動作);  不同的動作將調(diào)用對應(yīng)下一個(gè)子程序

  • 每個(gè)內(nèi)置子程序都需要通過關(guān)鍵字sub進(jìn)行定義

  1) vcl_recv子程序

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  2) vcl_pipe子程序

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  3) vcl_pass子程序

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  4) vc_hit子程序

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  5) vcl_miss子進(jìn)程

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  6) vcl_hash子進(jìn)程

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  7) acl_purge子進(jìn)程

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  8) vcl_deliver子進(jìn)程

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  9) vcl_backend——fetch子程序

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  10) vcl_backend_response子程序

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  11) vcl_backend_error子程序

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  12) vcl_synth子程序

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  13) vcl_init子進(jìn)程

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  14) acl_fini子進(jìn)程

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

4. varnish緩存模式和子程序的關(guān)系

l  varnish的配置文件,就是通過各種子程序組成的,當(dāng)varnish運(yùn)行時(shí),也是通過子程序的配置進(jìn)行相應(yīng)的操作

l 子程序的關(guān)系如下圖

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  1) 右上角的兩個(gè)圖代表:加載vcl時(shí)執(zhí)行vcl_init子程序,卸載vcl時(shí)執(zhí)行vcl_fini子程序

  2) 當(dāng)vcl_recv調(diào)用 hash函數(shù)時(shí)

   進(jìn)入該狀態(tài)后,會通過vcl_hash子程序,根據(jù)請求的url或其他信息生成hash鍵值,

   然后查找hash鍵值相同的緩存數(shù)據(jù),若找到,則進(jìn)入val_hit狀態(tài),否則進(jìn)入vcl_miss狀態(tài)

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  3) 當(dāng)vcl_recv調(diào)用pass 函數(shù)時(shí)

  • 當(dāng)vcl_recv調(diào)用pass 函數(shù)時(shí),pass將當(dāng)前請求直接轉(zhuǎn)發(fā)到后端服務(wù)器。而后續(xù)的請求仍然通過varnish處理。

  • pass (varnish)通常只處理靜態(tài)頁面。即只在GET 和 HEAD 類型的請求中時(shí)才適合調(diào)用pass函數(shù)。另外,需要注意的一點(diǎn)是,pass模式不能處理POST請求,為什么呢?因?yàn)镻OST請求一般是發(fā)送數(shù)據(jù)給服務(wù)器,需要服務(wù)器接收數(shù)據(jù),并處理數(shù)據(jù),反饋數(shù)據(jù)。是動態(tài)的,不作緩存

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  4) 當(dāng)vcl_recv判斷需要調(diào)用 pipe 函數(shù)時(shí)

  • 當(dāng)vcl_recv判斷需要調(diào)用 pipe 函數(shù)時(shí),varnish會在客戶端和服務(wù)器之間建立一條直接的連接,之后客戶端的所有請求都直接發(fā)送給服務(wù)器,繞過varnish,不再由varnish檢查請求,直到連接斷開。

  • 類型是POST時(shí)用pipe,舉個(gè)例子,當(dāng)客戶端在請求一個(gè)視頻文件時(shí),或者一個(gè)大的文檔,如.zip .tar 文件,就需要用pipe模式,這些大的文件是不被緩存在varnish中的。

    Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  5) 當(dāng)vcl_recv指定purge模式時(shí)

   Purge模式用于清除緩存

 5. 優(yōu)雅模式garce mode

1) 請求合并

  • 當(dāng)幾個(gè)客戶端請求同一個(gè)頁面的時(shí)候,varnish只發(fā)送一個(gè)請求到后端服務(wù)器,然后讓其他幾個(gè)請求掛起并等待返回結(jié)果

2) 問題

  • 如果數(shù)以千計(jì)或更多的這種請求同時(shí)出現(xiàn),那么這個(gè)等待隊(duì)列將變得龐大,這將導(dǎo)致2類潛在問題:驚群問題(thundering herd problem),即突然釋放大量的線程去復(fù)制后端返回的結(jié)果,將導(dǎo)致負(fù)載急速上升;沒有用戶喜歡等待;

3) 解決問題

  • 配置varnish在緩存對象因超時(shí)失效后再保留一段時(shí)間,以給那些等待的請求返回過去的文件內(nèi)容(stale content)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14


案例:
  Sub vcl_recv {
   If (! req.backend.healthy) {     判斷如果不健康
    set req.grace = 5m;varnish向前端提供5分鐘的過期內(nèi)容
   }
   else {               如果健康
    set req.grace = 15s;varnish向前段提供15秒的過期內(nèi)容
   }
  }
 
  sub vcl_fetch {
    set beresp.grace = 30m;將失效的緩存對象再多保留30分鐘
  }

三、 varnish的安裝

 1. 下載varnish壓縮包

  有兩個(gè)地方可下載

  1) 通過Varnish的官方網(wǎng)址http://varnish-cache.org,可以在這里下載最新版本的軟件。

   但是有時(shí)候varnish的官網(wǎng)會被墻

  2) GIT下載:git clone https://github.com/varnish/Varnish-Cache/var/tmp/

   但是在安裝時(shí)需要先使用./autogen.sh生成configure編譯配置文件

 2. Varnish的安裝

   首先安裝依賴包

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

   配置varnish

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

   編譯并安裝

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

   拷貝vcl文件

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

   官方提供的vcl配置文件沒有提示太多的配置信息,在生產(chǎn)環(huán)境中還是需要自己進(jìn)行配置

四、 Varnish VCL實(shí)例配置解析

  拓?fù)洵h(huán)境

  Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

五、 啟動varnish

  Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

六、 varnish vcl配置解析

  Varnish有自己的編程語法vcl,varnish啟動時(shí),會將配置文件編譯為C語言,然后再執(zhí)行

 1. 后端服務(wù)器地址池配置及后端服務(wù)器健康檢查

  1)   后端服務(wù)器定義,用于varnish連接指定的后端服務(wù)器

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20


例:將監(jiān)控塊定義在后端服務(wù)器中
    backend web{
        .host="192.168.31.83";指定后端服務(wù)器的IP
        .port="80";后端服務(wù)器的暴露端口
        .probe={    直接追加監(jiān)控塊.probe是一個(gè)的參數(shù)
            .url="/";
            .timeout=2s;
         }
     }
或:先定義監(jiān)控塊,在定義后端服務(wù)器列表
    probe web_probe{    監(jiān)控必需定義在前面,否則后端調(diào)用找不到監(jiān)控塊。
        .url="/";
        .timeout=2s;
    }
 
    backend web{
        .host="192.168.31.83";
        .port="80";
        .probe=web_probe;   調(diào)用外部共用監(jiān)控塊
    }

  2)   監(jiān)視器定義

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

   Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

1
2
3
4
5
6
7
8


例:創(chuàng)建健康監(jiān)測,定義健康檢查名稱為backend_healthcheck
    probe backend_healthcheck {   創(chuàng)建名為backend_healthcheck的健康檢查
       .url = "/";監(jiān)控入口地址為/的
       .timeout = 1s;請求超時(shí)時(shí)間
       .interval = 5s;每次輪詢間隔5秒
       .window = 5;輪詢5次
       .threshold = 3;必須有3次輪詢正常才算該節(jié)點(diǎn)正常
    }

  3)   負(fù)載均衡群集directors

  • 負(fù)載均衡群集需要directors模塊的支持,import directors

  • Directors負(fù)載均衡支持的算法:

   使用random,hash 必須配置權(quán)重值,用于提高隨機(jī)率

    Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36


例:
 
    加載directors模塊
    import directors;
  
    配置后端服務(wù)器
    backend web1 {
        .host = "192.168.0.10";
        .port = "80";
        .probe = backend_healthcheck;
    }
    backend web2 {
    .host = "192.168.0.11";
    .port = "80";
    .probe = backend_healthcheck;
    }
  
    初始化處理
    sub vcl_init {           
    調(diào)用vcl_init初始化子程序創(chuàng)建后端主機(jī)組,即directors
        new  web_cluster =directors.round_robin();
        使用new關(guān)鍵字創(chuàng)建drector對象,使用round_robin算法
        web_cluster.add_backend(web1);
        添加后端服務(wù)器節(jié)點(diǎn)
        web_cluster.add_backend(web2);
    }
    
    開始處理請求
    sub vcl_recv {
    調(diào)用vcl_recv子程序,用于接收和處理請求
        set req.backend_hint = web_cluster.backend();
        選取后端
    }

說明:

  • set命令是設(shè)置變量

  • unset命令是刪除變量

  • web_cluster.add_backend(backend , real );  添加后端服務(wù)器節(jié)點(diǎn),backend 為后端配置別名,real 為權(quán)重值,隨機(jī)率計(jì)算公式:100 * (當(dāng)前權(quán)重 / 總權(quán)重)。

  • req.backend_hint是varnish的預(yù)定義變量,作用是指定請求后端節(jié)點(diǎn)

  • vcl對象需要使用new關(guān)鍵字創(chuàng)建,所有可創(chuàng)建對象都是內(nèi)定的,使用前必需import,所有new操作只能在vcl_init子程序中。

 2. 訪問控制列表(acl)

  • 創(chuàng)建一個(gè)地址列表,用于后面的判斷

  • 如果列表中包含了無法解析的主機(jī)地址,它會匹配任何地址。

  • 不想匹配的IP,在前面加個(gè)!即可

    Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

 3. 緩存規(guī)則設(shè)置

Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

  說明:

  • X-Forwarded-For 是用來識別通過HTTP代理或負(fù)載均衡方式連接到Web服務(wù)器的客戶端最原始的IP地址的HTTP請求頭字段

  • 要想后端服務(wù)器記載客戶端的真實(shí)IP,只在varnish中設(shè)置不行,還需要修改后端web服務(wù)器的配置(這里是apache做后端web服務(wù)器):

    Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析

    修改框中的變量,指定為varnish中設(shè)置的變量

七、 varnish將不同的url發(fā)送到不同的后端server

 AutoIt Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58


import directors;   # load the directors
backend web1 {
.host = "192.168.0.10";
.port = "80";
.probe = backend_healthcheck;
}
backend web2 {
.host = "192.168.0.11";
.port = "80";
.probe = backend_healthcheck;
}
定義后端服務(wù)器web1和web2


backend img1 {
    .host = "img1.lnmmp.com";
    .port = "80";
    .probe = backend_healthcheck;
}
backend img2 {
    .host = "img2.lnmmp.com";
    .port = "80";
    .probe = backend_healthcheck;
}
定義后端服務(wù)器img1和img2



//初始化處理
sub vcl_init {            
//調(diào)用vcl_init初始化子程序創(chuàng)建后端主機(jī)組,即directors
    new  web_cluster = directors.round_robin(); 
    //使用new關(guān)鍵字創(chuàng)建drector對象,使用round_robin算法
      web_cluster.add_backend(web1);
      //添加后端服務(wù)器節(jié)點(diǎn)
      web_cluster.add_backend(web2);
    new img_cluster = directors.random();
    //創(chuàng)建第二個(gè)集群
      img_cluster.add_backend(img1,2); 
      添加后端服務(wù)器節(jié)點(diǎn),并且設(shè)置權(quán)重值
      img_cluster.add_backend(img2,5);
}


//根據(jù)不同的訪問域名,分發(fā)至不同的后端主機(jī)組
sub vcl_recv {
   if (req.http.host  ~  "(?i)^(www.)?benet.com$") { 
       如果請求頭為www.benet.com或benet.com
         set  req.http.host = "www.benet.com";
         set  req.backend_hint = web_cluster.backend();  //選取后端
   } 
   elsif (req.http.host  ~  "(?i)^images.benet.com$") {
        set  req.backend_hint = img_cluster.backend();
    }
}
說明:中的i就是忽略大小寫的意思。(?i)表示開啟忽略大小寫,而(?-i)表示關(guān)閉忽略大小寫

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)頁標(biāo)題:Web架構(gòu):varnish緩存代理服務(wù)器超詳細(xì)剖析-創(chuàng)新互聯(lián)
URL地址:http://www.rwnh.cn/article46/doeohg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、Google、ChatGPT、關(guān)鍵詞優(yōu)化、網(wǎng)站內(nèi)鏈、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
永泰县| 兰州市| 武鸣县| 巴东县| 健康| 山阴县| 博白县| 夏河县| 平湖市| 屏边| 浠水县| 张家口市| 长丰县| 微山县| 凤庆县| 株洲县| 乌鲁木齐县| 庄浪县| 顺昌县| 大同县| 襄汾县| 广宗县| 田东县| 聂拉木县| 安庆市| 桃园县| 龙门县| 彩票| 商河县| 聂荣县| 凤山市| 肇东市| 景东| 自贡市| 多伦县| 新巴尔虎左旗| 中方县| 武安市| 建阳市| 长武县| 泰来县|