保姆式教程:Nginx部署與配置
nginx部署
1、安裝nginx前首先安裝四個依賴包 --以下命令一鍵安裝四個依賴
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
2、在你的linux服務(wù)器上創(chuàng)建目錄:install cd /root mkdir install
3、進入剛剛創(chuàng)建的目錄:cd install
4、下載并解壓安裝包 wget http://nginx.org/download/nginx-1.13.7.tar.gz tar -zxvf nginx-1.13.7.tar.gz ? ? ? ?---解壓nginx安裝包
5、進入剛剛解壓好的目錄:cd nginx-1.13.7
5.1、增加https模塊,后期就不麻煩
6、分別執(zhí)行下面命令 make ? ? ? ? ? ? ? ? ?--- 用來編譯( 從Makefile中讀取指令,然后編譯) make install ? ? ? ?--- 用來安裝( 從Makefile中讀取指令,安裝到指定的位置)
7、編輯啟動端口(圖片的端口是經(jīng)過修改的,默認是80端口) cd /usr/local/nginx/conf vim nginx.conf 編輯好之后,按esc退出編輯模式,然后 ?:wq 進行保存退出
8、啟動nginx /usr/local/nginx/sbin/nginx 訪問服務(wù)器ip測試
windows本地調(diào)試nginx注意,不要重復(fù)啟動。同時運行多個nginx,導(dǎo)致配置一直不生效,坑死了?。?!常用命令 nginx -s stop nginx -s reload
nginx配置
我項目的nginx配置如下,可直接復(fù)制使用.下面一個個介紹里面的用途
請求轉(zhuǎn)發(fā)
針對所有請求,https協(xié)議默認訪問的是443端口。我們可以配置對應(yīng)的請求域名和端口,做相關(guān)的轉(zhuǎn)發(fā)。轉(zhuǎn)發(fā)的時候被nginx代理了一層,ip會丟失,需要記錄真實ip在請求頭X-Real-IP。
靜態(tài)文件配置
微信公眾號的用戶授權(quán)需要我們將一個文件放在項目路徑下標識身份。為了讓文件被訪問到,需要配置靜態(tài)文件路由。對應(yīng)的vue項目也可以通過這樣的配置被訪問到
location命中后 如果是root,會把請求url的 ip/域名+port替換為root指定的目錄,訪問資源 如果是alias,會把請求url的ip/域名+port+匹配到的路徑替換為alias指定的目錄,訪問資源
頻率控制
為了防止項目被別有用心的人攻擊,畢竟單擊一個jmeter就可以打爆我的服務(wù)是吧。ddos那種我們雖然防不住,但是這個還是能攔一下,提高他們的攻擊門檻的。限制原理并不難,可一句話概括為:“根據(jù)客戶端特征,限制其訪問頻率”,客戶端特征主要指IP、UserAgent等。使用IP比UserAgent更可靠,因為IP無法造假,UserAgent可隨意偽造。有兩個關(guān)鍵參數(shù) limit_req_zone
key,表示作為限制的請求特征,可以包含文本與變量,IP場景使用$binary_remote_addr
name,zone的名稱,limit_req會用到
size,zone的大小,1M大小在64位系統(tǒng)可存儲8000個state(ip、count...),每次添加新state時,可能刪除至多兩個前60秒未使用的state,若添加新state時zone大小不夠,則刪除較舊的state,釋放空間后依舊不夠返回503
rate,訪問速率,支持秒或者分鐘為單位,但nginx內(nèi)部使用毫秒追蹤請求數(shù),如果限制是10r/1s,實際上是1r/100ms limit_req
name,limit_req_zone中配置的名稱
burst,可理解為緩沖卡槽,如果設(shè)置則所有請求都經(jīng)由緩沖卡槽轉(zhuǎn)發(fā)給upstream,通常可并發(fā)接收的請求數(shù)為number + 1,但當number為0時會拒絕所有請求
nodelay,緩沖卡槽中請求轉(zhuǎn)發(fā)給upstream的時機,不設(shè)置時,會按照zone的速率逐個轉(zhuǎn)發(fā),當設(shè)置為nodelay時,請求到達緩沖卡槽后會立即轉(zhuǎn)發(fā)給upstream,但卡槽中的占位依舊按照頻率釋放 了解配置方式后開始實際操作,在Nginx配置中的http內(nèi)添加:
在需要限制的server內(nèi)添加:
按照官方文檔,2M大小在64位系統(tǒng)中大約可存儲16000個狀態(tài)數(shù)據(jù),針對自己的個人網(wǎng)站足夠,10r/s即1r/100ms,配合burst=10應(yīng)該也OK,重啟Nginx,然后使用壓測工具檢驗一下。但是很多時候我們自己需要壓測,每次去改配置也不方便,可以加上白名單。修改配置文件中http的內(nèi)容:
這主要借助Nginx中的geo與map功能,通過geo將IP映射成值,然后再通過map將值映射成變量或常量,恰好limit_req_zone中如果key為''表示不對其進行頻率限制,所以只需要將白名單用戶的key設(shè)置為''。用戶進入被頻控限制后,會在nginx的error日志中打印記錄。下面是壞蛋借助我們的網(wǎng)站漏洞進行攻擊,被攔截的例子。

黑名單
盡管你配置了頻率控制,但是nginx只能做到嚴格按照頻率來執(zhí)行。比如我們設(shè)置10/s次,那用戶一直用每秒10次 的并發(fā)來請求,我們也很難受啊。我們想做的是超過限制直接給他加進黑名單。黑名單的配置其實很簡單,在conf目錄下創(chuàng)建黑名單文件ip.black
然后在配置文件http模塊下引入
生效效果,會有forbidden
上面是靜態(tài)黑名單配置。當然我們也可以動態(tài)地去加黑名單。比如發(fā)現(xiàn)被頻率限制很多次的ip給它扔進黑名單。原理是寫個腳本任務(wù),定時拉取請求日志,超過一定次數(shù)的請求,就加進黑名單。
參考 :https://blog.csdn.net/u012965203/article/details/108983589
https配置
https對應(yīng)的證書可以免費向阿里云申請,具體步驟參考:https://blog.csdn.net/torrytang/article/details/127530734 首先我們需要確認nginx有https模塊。===============有https模塊跳過================== 執(zhí)行命令./nginx -V,看看是否有htps模塊
沒有的話可以選擇重新安裝的時候在configure的時候設(shè)置,也可以不需要卸載增加。我的nginx的 安裝目錄是 /usr/local/nginx, 源碼解壓目錄是 /root/install/nginx-1.13.7 1.先把nginx停止運行
2.進入源碼目錄,準備配置configure參數(shù)
3.先看看原來的配置
4.我們要在原來的配置基礎(chǔ)上去追加配置--with-http_ssl_module。追加在最后(如果原來沒配置,那就直接追加https模塊就好)
5.配置完成后運行make命令,別運行成make install,否則變成覆蓋安裝了 6.把編譯好的文件覆蓋掉原來的nginx
7.查看是否配置成功
能看到這樣,就成功了
然后我們可以開始配置https了。===============有https模塊跳過================== 1.下載申請好的 ssl 證書文件壓縮包到本地并解壓(這里是用的 pem 與 key 文件,文件名可以更改)。在 nginx 目錄新建 cert 文件夾存放證書文件。
2.將原有的配置改成443端口,并且新增證書的配置
3.將http都重定向到https
4.重啟nginx
./nginx?-s?reload
在瀏覽器訪問網(wǎng)址,就會發(fā)現(xiàn)被重定向到https了。一開始可以在自己的本地先配置成功再去服務(wù)器上配置,如果訪問的是本地不是對應(yīng)的域名,會有不安全提示,不用理就好啦。

參考:
頻率控制:https://amsimple.com/blog/article/47.html
黑名單配置:https://jiaokangyang.com/692.html
動態(tài)黑名單:https://blog.csdn.net/u012965203/article/details/108983589
