理解
)同步和異步:關注的是消息通知
機制;html
同步: 調用發出以後不會當即返回
,但一旦返回,則返回最終結果;異步:調用發出以後,被調用方
當即返回消息
,但返回的並不是最終結果。被調用者經過狀態、通知機制等來通知調用者,或經過回調函數來處理結果;node
阻塞block和非阻塞nonblock:關注的是調用者等待被調用者返回調用結果時的狀態。
nginx
阻塞:調用結果返回以前,調用者會被掛起
,調用者只有在獲得返回結果以後才能繼續。非阻塞:調用者在結果返回以前,不會被掛起;segmentfault
blocking IO:阻塞式IO nonblocking IO:非阻塞IO multiplexing:多路複用IO signal driven IO:事件驅動式IO asynchronous IO:異步IO
真正執行IO
過程的階段是內核內存數據拷貝到進程內存中。api
Nginx
(發音同engine x
)是一個異步框架的Web
服務器,也能夠用做 反向代理, 負載平衡器 和 請求分發。
重點
)
多個描述符的IO操做都可以在
一個線程內併發交替的順序完成
,這就叫作IO多路複用,這裏的複用指的是複用同一個線程。(就像多個學生同時完成做業,同時共享一個老師,學生作完做業舉手請求老師。)
select
:線性遍歷,效率低,監視文件描述符的數量存在最大限制爲1024。epoll
:每當FD
就緒,採用系統的回調函數之間將FD
放入,效率更高,最大鏈接無限制。(例:服務器告訴老闆給顧客結帳,'select'
只告訴老闆有客人結帳,老闆須要挨個詢問,而'epoll'
同時告訴老闆是哪些顧客要結帳。)Nginx
就是採用的epoll模型。瀏覽器
一、功能模塊少
二、代碼模塊化(易讀易開發)緩存
nginx的CPU的親和,有多個工做進程運行方式減小性能損耗,是一種把CPU核心和nginx工做進程綁定方式,把每一個worker
進程固定在一個cpu
上執行,減小切換cpu
的cache miss
,得到更好的性能。安全
不經過User space
,減小靜態文件用戶空間切換,直接經過內核零拷貝,明顯提升傳輸效率。服務器
很是經常使用
)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 不關閉服務柔和地重啓
curl -v http://www.baidu.com >/dev/null #-v 同時顯示狀態碼等信息 nginx -V #顯示nginx版本及配置文件等信息
日誌類型:error.log
和access.log
error.log(記錄處理http請求的錯誤狀態以及nginx自己服務的錯誤狀態) access.log(每次http請求的訪問狀態)
log_format:設置了日誌的記錄格式,定義日誌以什麼樣的樣式記錄到error.log、access.log中,log_format的配置只能配置在http模塊中。
access_log
配置在http
中。
Nginx官方模塊 第三方模塊
http_stub_status_module:監控NGINX客戶端狀態
location /mystatus{ stub_status; }
瀏覽器訪問:www.xxxx.com/mystatus
random_index off | on 寫在默認的配置文件loaction 裏面,這個配置是隨機訪問主頁頁面,若是有隱藏的主頁面則不會訪問(以.開頭的文件)
sub_filter 字符串替換
sub_filter_once默認是開啓(on)只替換一個,改成off的話,多個要替換的都會替換掉;這個配置做用在 http server location這三個做用域中
limit_conn_module 鏈接頻率限制 limit_req_module 請求頻率限制
HTTP
請求事創建在TCP
之上的,會進行三次握手;
長鏈接:keepalive
。
連接限制:
請求限制:
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
存儲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 併發數
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 ~
(模式匹配
)
重要
)
不安全,容易出現
CSRF
攻擊!
防止資源被盜用
防盜鏈思路:
首要方式:區別哪些請求時非正常的用戶請求
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過去的