基於Nginx的中間件架構(一):配置語法、Nginx模塊、請求限制和訪問控制、靜態WEB服務

1、I/O介紹和Nginx簡介

1.1 I/O 類型(理解)

同步和異步:關注的是消息通知機制;html

同步: 調用發出以後不會當即返回,但一旦返回,則返回最終結果;

異步:調用發出以後,被調用方當即返回消息但返回的並不是最終結果。被調用者經過狀態、通知機制等來通知調用者,或經過回調函數來處理結果;node

阻塞block和非阻塞nonblock:關注的是調用者等待被調用者返回調用結果時的狀態。nginx

阻塞: 調用結果返回以前,調用者會被掛起,調用者只有在獲得返回結果以後才能繼續。

非阻塞:調用者在結果返回以前,不會被掛起segmentfault

1.2 I/O模型

blocking IO:阻塞式IO 
nonblocking IO:非阻塞IO
multiplexing:多路複用IO 
signal driven IO:事件驅動式IO 
asynchronous IO:異步IO

真正執行IO過程的階段是內核內存數據拷貝到進程內存中。api

1.3 Nginx優勢

Nginx(發音同 engine x)是一個異步框架的 Web服務器,也能夠用做 反向代理負載平衡器請求分發

1.3.1 I/O多路複用(重點

多個描述符的IO操做都可以在 一個線程內併發交替的順序完成,這就叫作IO多路複用,這裏的複用指的是複用同一個線程。(就像多個學生同時完成做業,同時共享一個老師,學生作完做業舉手請求老師。)

clipboard.png

clipboard.png

select線性遍歷,效率低,監視文件描述符的數量存在最大限制爲1024。
epoll:每當FD就緒,採用系統的回調函數之間將FD放入,效率更高,最大鏈接無限制。(例:服務器告訴老闆給顧客結帳,'select'只告訴老闆有客人結帳,老闆須要挨個詢問,而'epoll'同時告訴老闆是哪些顧客要結帳。)
Nginx就是採用的epoll模型。瀏覽器

1.3.2 輕量級

一、功能模塊少
二、代碼模塊化(易讀易開發)緩存

1.3.3 CPU的親和(affinity)

nginx的CPU的親和,有多個工做進程運行方式減小性能損耗,是一種把CPU核心和nginx工做進程綁定方式,把每一個worker進程固定在一個cpu上執行,減小切換cpucache miss,得到更好的性能。安全

1.3.4 sendfile

不經過User space,減小靜態文件用戶空間切換,直接經過內核零拷貝,明顯提升傳輸效率。服務器

clipboard.png

2、配置語法(很是經常使用

2.1 默認配置語法

clipboard.png

nginx.conf 做爲主配置文件
include /etc/nginx/conf.d/*.conf 讀到這會把該目錄的.conf也讀進來架構

一、全局性的和服務級別的

user 設置使用用戶
worker_processes 進行增大併發鏈接數的處理 跟cpu保持一致 八核設置八個
error_log nginx的錯誤日誌
pid  nginx服務啓動時候pid

二、event對事件的模塊

worker_connections 一個進程容許處理的最大鏈接數
use 定義使用的內核模型

三、server

root 首頁的路徑
index 首頁默認訪問哪一個頁面
error_page 500 502 503 504  /50x.html  錯誤頁面 前面的500是**`http狀態碼`**

systemctl restart nginx.service 重啓nginx
systemctl reload nginx.service 不關閉服務柔和地重啓

2.2 HTTP

clipboard.png

curl -v http://www.baidu.com >/dev/null #-v 同時顯示狀態碼等信息
nginx -V #顯示nginx版本及配置文件等信息

2.3 日誌

日誌類型:error.logaccess.log

error.log(記錄處理http請求的錯誤狀態以及nginx自己服務的錯誤狀態)
access.log(每次http請求的訪問狀態)

log_format:設置了日誌的記錄格式,定義日誌以什麼樣的樣式記錄到error.log、access.log中,log_format的配置只能配置在http模塊中。

access_log配置在http中。

2.4 變量

clipboard.png

clipboard.png

3、Nginx模塊

Nginx官方模塊
第三方模塊

3.1 默認模塊

http_stub_status_module:監控NGINX客戶端狀態

clipboard.png

location /mystatus{
        stub_status;
        }

瀏覽器訪問:www.xxxx.com/mystatus

clipboard.png

clipboard.png

random_index off | on 寫在默認的配置文件loaction 裏面,這個配置是隨機訪問主頁頁面,若是有隱藏的主頁面則不會訪問(以.開頭的文件)

clipboard.png

clipboard.png

clipboard.png

clipboard.png

sub_filter 字符串替換
sub_filter_once默認是開啓(on)只替換一個,改成off的話,多個要替換的都會替換掉;這個配置做用在 http server location這三個做用域中

4、請求限制和訪問控制

4.1 請求限制

limit_conn_module 鏈接頻率限制
limit_req_module 請求頻率限制

clipboard.png

HTTP請求事創建在 TCP之上的,會進行三次握手;
長鏈接: keepalive

clipboard.png

clipboard.png

連接限制:
clipboard.png

請求限制:

Syntax: limit_req_zone key zone=name:size rate =rate;
Default:——
Context:http

Syntax: limit_req_zone=name [burst=number] [nodelay];
Default:——
Context:http,server,location

clipboard.png

存儲remote_add迴避binary_remote_addr多10個字節
CentOS 7 安裝 ab(Apache Benchmark)壓力測試工具

sudo yum -y install httpd-tools

ab -n 50 -c 20 http://www.xxx.com/xxx.html # -n 發起的請求數  -c 併發數

4.2 訪問控制

4.2.1 基於IP的訪問控制 - http_access_module

Syntax: allow address | CIDR | unix: | all;
  Default:——
  Context:http,server,location,limit_except

  Syntax:deny address | CIDR | unix: | all;
  Default:——
  Context:http,server,location,limit_except

location ~(模式匹配)

clipboard.png

IP段

clipboard.png

clipboard.png

clipboard.png

clipboard.png

4.2.2 基於用戶的信任登陸 - http_auth_basic_module

5、靜態資源WEB服務

clipboard.png

5.1 靜態資源類型

clipboard.png

5.2 靜態資源服務場景-CND

clipboard.png

5.3 壓縮與解壓縮

clipboard.png

5.4 瀏覽器緩存(重要)

clipboard.png

5.4.1 瀏覽器無緩存

clipboard.png

5.4.2 瀏覽器有緩存

clipboard.png

5.4.3 校驗過時機制

clipboard.png

clipboard.png

5.4.4 配置語法 - expires

clipboard.png

5.5 跨站訪問

clipboard.png

5.5.1 爲何瀏覽器禁止跨站訪問

不安全,容易出現 CSRF攻擊!

clipboard.png

clipboard.png

clipboard.png

5.6 防盜鏈(重要)

防止資源被盜用

防盜鏈思路:

首要方式:區別哪些請求時非正常的用戶請求

5.6.1 基於http_refer防盜鏈配置模塊

clipboard.png

clipboard.png

curl -I http://api.go-qxd.com/static/images/nx-xds-logo.jpg # 只請求頭信息    
curl -e "http://baidu.com" -I http://api.go-qxd.com/static/images/nx-xds-logo.jpg #表示從百度refer過去的

下一篇:基於Nginx的中間件架構(二):代理服務、負載均衡、緩存服務、動靜分離

參考視頻資料:Nginx入門到實踐 不論是運維仍是開發 Nginx都是你的必備技能

相關文章
相關標籤/搜索