自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

因為沒有網(wǎng)關(guān),我的服務(wù)器被DDoS了

運維 數(shù)據(jù)庫運維
按照正常的用戶量,平常的上班時間不會出現(xiàn)如此大的流量,而且還是在這么短的時間里,對比了下往常的數(shù)據(jù),發(fā)現(xiàn)訪問量飆升幾十倍,為了不影響正常的用戶,緊急聯(lián)系運維擴容服務(wù)器,穩(wěn)定業(yè)務(wù)。然后緊急分析問題,一開始以為是客戶端的 APP 升級出現(xiàn)了問題,導(dǎo)致死循環(huán)了,但是問了下終端負(fù)責(zé)人,并沒有發(fā)布新的 APK。然后事情都這里想必大家都猜到原因了,沒錯,那就是我們被 DDoS 了。

大家好,我是鴨血粉絲,想起來之前生產(chǎn)發(fā)生的事故,阿粉我的內(nèi)心到現(xiàn)在都還很忐忑不安,今天我們來學(xué)習(xí)一個 Kong 以及跟你們聊聊做好網(wǎng)關(guān)限流控制的重要性。

[[318264]]

背景

事情是這樣的,阿粉記得那是一個陽光明媚的早上,窗外一片祥和,整個世界充滿了和諧。誰知九點半的時候突然微信報警消息如狂風(fēng)暴雨般襲來,讓人猝不及防,原來是線上的一個接口流量突然暴增,而且居高不下,導(dǎo)致部分業(yè)務(wù)癱瘓,無法使用。

[[318265]]

按照正常的用戶量,平常的上班時間不會出現(xiàn)如此大的流量,而且還是在這么短的時間里,對比了下往常的數(shù)據(jù),發(fā)現(xiàn)訪問量飆升幾十倍,為了不影響正常的用戶,緊急聯(lián)系運維擴容服務(wù)器,穩(wěn)定業(yè)務(wù)。然后緊急分析問題,一開始以為是客戶端的 APP 升級出現(xiàn)了問題,導(dǎo)致死循環(huán)了,但是問了下終端負(fù)責(zé)人,并沒有發(fā)布新的 APK。然后事情都這里想必大家都猜到原因了,沒錯,那就是我們被 DDoS 了。

關(guān)于什么是 DDoS,我想大家都是有經(jīng)驗的開發(fā)人員,應(yīng)該都知道,不知道的朋友可以在公眾號后臺回復(fù)【安全】,獲取一份 Web 安全相關(guān)電子書。

那么遇到這種情況,我們除了擴容服務(wù)器還有哪些解決方案呢?

知乎上有一篇問答,里面提到有下面幾種方式

  1. 高防服務(wù)器
  2. 黑名單
  3. DDoS 清洗
  4. CDN 加速

這幾種方案都有相應(yīng)的特性,不過阿粉我在這里想給大家介紹另一種方案,簡單,快速,但是對用戶不友好,那就是采用網(wǎng)關(guān)限流。當(dāng)然不同的業(yè)務(wù)有不同的特性,需要選擇適合自己的方式,如果是金融證券企業(yè)的話還是請第三方專業(yè)的公司去做防護。

API 網(wǎng)關(guān) Kong

介紹

Next-Generation API Platform for Multi-Cloud and Hybrid Organizations. Connect all your microservices and APIs with the industry’s most performant, scalable and flexible API platform.

在 Kong 的官網(wǎng)赫然的寫了上面的一句話,翻譯起來有點別扭,我就不直譯了,大家自己看英文更能理解。簡單來說 Kong 就是下一代的 API 網(wǎng)關(guān),用起來就對了。

[[318266]]

Kong 是在客戶端和服務(wù)端之間的 API 網(wǎng)關(guān),Kong 作為網(wǎng)關(guān)可以統(tǒng)一轉(zhuǎn)發(fā)請求,并且因為 Kong 是基于 Nginx 的,所以本身支持水平擴展;另外 Kong 可以對請求做統(tǒng)一的限流,認(rèn)證和授權(quán)管理,而且這些功能都是基于插件式,即插即用,根據(jù)自身業(yè)務(wù)的特性,可以選擇合適的插件來控制相關(guān)業(yè)務(wù)。如果已有的插件不適合,還可以自己開發(fā)相應(yīng)的插件,不過插件的開發(fā)是基于 lua 的。

安裝步驟

安裝數(shù)據(jù)庫

因為 Kong 的底層存儲是采用 PostgreSQL 9.5+ 或者 Cassandra 3.x.x 的,所以我們在安裝 Kong 之前需要先安裝數(shù)據(jù)庫,阿粉這里采用的是 PostgreSQL 9.5,并且服務(wù)器是 CentOS7 的版本。

1.使用 yum 安裝依次執(zhí)行如下命令

  1. ~$ yum install https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-3.noarch.rpm 
  2. ~$ yum install postgresql95 
  3. ~$ yum install postgresql95-server 

在提示安裝y/n 的時候,輸入y 即可。

2.安裝過程很快,沒什么難度,就不贅述,主要是安裝過后的配置大家需要注意一下,安裝完畢過后,我們初始化一下數(shù)據(jù)庫,輸入/usr/pgsql-9.5/bin/postgresql95-setup initdb

3.初始化完畢過后,我們設(shè)置一下服務(wù),然后啟動即可,輸入如下命令。

  1. ~$ systemctl enable postgresql-9.5 
  2. ~$ systemctl start postgresql-9.5 

4.到這一步我們 PostgreSQL 的安裝已經(jīng)完整了,但是為了后面Kong 能正常的運行起來,我們需要做一些配置,這里的配置比較重要,網(wǎng)上各種文章說的也都不清不楚,阿粉在多次探索之后終于搞清了其中的緣由,來全場跟著我整齊劃一,先說下我們要做的操作步驟,然后我們再依次完成。

1) 給超級管理員設(shè)置密碼:安裝完 PostgreSQL 后,會自動幫我們創(chuàng)建一個 Linux 的用戶 postgres,而且這個用戶默認(rèn)是 PostgreSQL 的超級管理員。

2) 創(chuàng)建 Kong 的數(shù)據(jù)存儲環(huán)境,包括用戶,密碼和數(shù)據(jù)庫:因為我們后面需要啟動Kong ,需要讓 Kong 能訪問到數(shù)據(jù)庫,所以需要配置數(shù)據(jù)庫,用戶和密碼。

3) 修改PostgreSQL配置文件

5.我們首先使用命令 su - postgres , 然后輸入 psql,進入 PostgreSQL 的命令行模式,如下圖

6.進入命令行模式過后,我們先后完成上面 1 和 2 的步驟,先修改密碼,輸入\password postgres 如下圖,連續(xù)輸入兩次你需要設(shè)定的密碼,例如postgres123 一定要記住,后面需要用到這個密碼登錄的。

7.修改完密碼過后,我們進行第二步操作,創(chuàng)建用戶,密碼和數(shù)據(jù)庫,輸入語句CREATE USER kong WITH PASSWORD 'kong123'; 我這里因為之前已經(jīng)創(chuàng)建過這個用戶了,所以提示已經(jīng)存在,正常是顯示 CREATE ROLE 的

8.然后再輸入 CREATE DATABASE kong OWNER kong; 創(chuàng)建數(shù)據(jù)庫,并且把這個數(shù)據(jù)庫授權(quán)給 kong 用戶,輸入 GRANT ALL PRIVILEGES ON DATABASE kong to kong; 同樣的,我這邊已經(jīng)創(chuàng)建 kong 數(shù)據(jù)庫了,所以顯示錯誤,正常是可以創(chuàng)建成功的。

9.到這里,我們在檢查一下是否都創(chuàng)建成功,通過輸入命令 \du 和 \l 來看下

10.如果能看到用戶和數(shù)據(jù)庫都有的話,那就說明創(chuàng)建成功了,如果沒有說明沒有設(shè)置成功,按照上面的操作再仔細(xì)來一遍。

11.現(xiàn)在我們再來修改配置文件,我們先退出命令模式,使用命令 \q 然后再輸入exit 即可推到 Linux 的正常模式。我們輸入命令 vim /var/lib/pgsql/9.5/data/pg_hba.conf 來編輯 pg_hba.conf 文件,將最后的幾行設(shè)置成如圖所示,也就是將默認(rèn)的 peer 修改成 md5 。

12.保存退出,使用 systemctl restart postgresql-9.5 重啟服務(wù),這時我們在使用postgres 用戶去登錄一下看看

13.這里需要我們輸入密碼了,這里的密碼就是我們上面步驟 1 設(shè)定了 postgres123,輸入即可,如果提示psql: FATAL: password authentication failed for user "postgres" 說明密碼不對,如果正常進去,那我們再退出來用設(shè)置的 kong用戶再去登錄看看。輸入 psql -U kong -W 再輸入之前 kong 的密碼,如何能正常的如下圖進去說明整個配置都正確。

如果提示 psql: FATAL: Peer authentication failed for user "kong" 可能檢查你的配置文件是否修改,以及修改后是否重啟。

14.最后我們修改一下 postgresql.conf 文件,設(shè)置支持遠(yuǎn)程訪問,vim /var/lib/pgsql/9.5/data/postgresql.conf ,將 listen_addresses 修改為下圖一致,然后保存退出,重啟即可。

到這里,數(shù)據(jù)庫的部分就已經(jīng)完成了,總結(jié)一個小點,peer 模式的 postgres 用戶不用密碼可以登入,md5 模式下需要密碼才能登入。因為Kong 是有密碼的遠(yuǎn)程登錄,所以我們要配置密碼以及支持遠(yuǎn)程訪問。

下面就可以安裝 Kong 了。

安裝 Kong

1.下載 rpm 文件:wget https://bintray.com/kong/kong-rpm/download_file?file_path=centos/7/kong-2.0.2.el7.amd64.rpm

2.執(zhí)行命令

  1. ~$ sudo yum install epel-release 
  2. ~$ sudo yum install kong-2.0.2.el7.amd64.rpm --nogpgcheck 

有提示輸入 y 就好了

3.修改 kong 配置文件,先拷貝一份配置文件 cp kong.conf.default kong.conf 然后編輯一下對應(yīng)的數(shù)據(jù)庫,用戶名和密碼,這里的用戶名和密碼就是上面配置的 kong 和 kong123

4.調(diào)整一下 kong admin api 的訪問地址,后面會用到

5.輸入 kong start 啟動 kong

6.如果出現(xiàn)下面提示,則輸入 kong migrations bootstrap 然后再次啟動 kong

  1. Error: /usr/local/share/lua/5.1/kong/cmd/utils/migrations.lua:16: Database needs bootstrapping or is older than Kong 1.0. 
  2.  
  3. To start a new installation from scratch, run 'kong migrations bootstrap'
  4.  
  5. To migrate from a version older than 1.0, migrated to Kong 1.5.0 first
  6. If you still have 'apis' entities, you can convert them to Routes and Services 
  7. using the 'kong migrations migrate-apis' command in Kong 1.5.0. 
  8.  
  9.   Run with --v (verbose) or --vv (debug) for more details 

7.檢驗是否安裝成功,輸入curl http://127.0.0.1:8001 如有下面的信息輸出表示安裝成功

至此我們Kong 也安裝好了,下面為了日后使用方便,我們還需要安裝一個管理頁面,Kong 的管理頁面工具網(wǎng)上有好幾個,比如 Konga,Kong admin ui 等,阿粉這里也大家介紹的是Kong admin ui。

安裝 Kong Admin UI

我們打開 GitHub 地址 https://github.com/pocketdigi/kong-admin-ui,可以看到提供四種部署方式,

第一種是可以直接使用不用部分,第二種和第三種都是下載使用 Nginx 部署,第四種是采用 docker 進行部署。作為有經(jīng)驗的開發(fā)人員,阿粉還是采用 docker 進行安裝。直接一行命令搞定即可。Docker 的安裝不是本文的重點,感興趣的可以自行 Google。

安裝完成后打開 8899 端口可以看到如下界面,在 Api url 里面填入 Kong 的 Api 信息即可,如http://127.0.0.1:8001 然后點擊進入。

進入界面如下:

至此,整個Kong 環(huán)境的搭建就已經(jīng)完成了,剩下的就是使用了,流量控制,授權(quán)訪問等更多特性,大家可以自行去嘗試,想想如果當(dāng)時阿粉就知道了 Kong 是不是就可以避免那一次的事故。

寫在最后

其實這個世界上天才真的很少,大部分人都還沒有到拼智商的地步;作為普通人我們拼的是努力,拼的是圈子,拼的是對這個世界的認(rèn)知,接觸更多更厲害的人,你遲早也會厲害起來。

 

責(zé)任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

2013-05-22 15:45:43

2018-03-19 08:46:52

2021-01-25 10:45:10

DDoSRDP服務(wù)器Windows

2015-09-01 10:33:53

2020-02-17 09:53:57

漏洞DDoS攻擊

2023-03-27 07:39:07

內(nèi)存溢出優(yōu)化

2023-05-14 22:25:33

內(nèi)存CPU

2009-08-21 19:09:14

Windows 200

2021-11-05 19:24:39

漏洞網(wǎng)絡(luò)安全DDoS攻擊

2018-04-09 09:31:39

2022-09-05 09:02:01

服務(wù)器CPU服務(wù)

2018-01-30 09:25:04

2018-01-12 10:57:58

2013-06-20 11:11:00

程序員經(jīng)理

2020-12-02 09:28:00

DDoS攻擊網(wǎng)絡(luò)攻擊網(wǎng)絡(luò)安全

2011-06-13 14:04:32

容錯服務(wù)器HA

2019-12-16 08:47:04

Redis設(shè)計算法

2010-04-30 16:03:20

2018-06-04 10:30:47

游戲服務(wù)器框架

2021-04-21 10:18:07

Linux服務(wù)器命令
點贊
收藏

51CTO技術(shù)棧公眾號