前置知識章節:
1.介紹、安裝、hello world、location匹配✅
2.反向代理、負載均衡、緩存服務、靜態資源訪問✅
3.當前章節👉:日誌管理、http限流、https配置,http_rewrite模塊,第三方模塊安裝,結語。✅html
nginx裏面有訪問日誌和錯誤日誌,訪問日誌記錄記錄客戶端訪問nginx的每個請求;錯誤日誌記錄發生錯誤的請求。node
access_log用於配置訪問日誌,日誌的格式能夠根據log_format指令來進行自定義。linux
💡log_format用於定義訪問日誌的格式。log_format指令的第一個參數是格式名,能夠給當前格式定義一個名字,第二個參數是格式字符串,支持一些內部變量語法,好比$remote_addr
會獲取到請求的客戶端的IP地址。log_format只能夠配置在http塊中。
log_format示例:nginx
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; log_format mylog '[client_ip:] $remote_addr [time:] $time_local [user_agent:] "$http_user_agent"';
log_format語法說明:git
''
包裹,內部可使用$
開頭的變量,好比$remote_addr
會獲取到請求的客戶端的IP地址,其餘字符都做爲顯示效果,好比上面使用的""
只是用於包裹數據而已。[]
,-
,:
也是這樣的。access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; * path是日誌存儲路徑 * format用於定義格式,是log_formate的名字, * buffer=size 爲存放日誌的緩衝區大小 * flush=time 爲將緩衝區的日誌刷到磁盤的時間 * gzip[=level] 表示壓縮級別 * if通常不配置 access_log off; # 關閉訪問日誌記錄
💡默認在nginx.conf中配置了access_log的默認配置:
github
nginx日誌常見可用變量:(更多變量能夠參考:英文文檔,某CSDN博客)web
內置變量 | 說明 |
---|---|
$remote_addr | 客戶端的IP地址 |
$remote_user | 客戶端用戶名,用於記錄瀏覽者進行身份驗證時提供的名稱,若是沒有登陸則爲空 |
$time_local | 訪問的時間與時區 |
$request | 請求的URI和HTTP協議 |
$status | 記錄請求返回的HTTP狀態碼 |
$body_bytes_sent | 發送給客戶端的文件主體 |
$http_referer | 請求來源的URL地址 |
$http_user_agent | 客戶端瀏覽器信息 |
$http_x_forwarded_for | 通過的客戶端IP地址列表,若是請求是代理轉發的,那麼原始的客戶端IP應該在這個字段裏面 |
error_log file [level];
error_log /dev/null
用於關閉錯誤日誌。/dev/null
在linux中能夠認爲是一個無底洞,能夠把它看成垃圾桶。對於日誌文件有些版本會自動切割,有些版本不會,也就是說,若是你的服務端跑了一年,那麼一年的訪問日誌都存儲在access.log中,很明顯,這不是一個好的處理,這樣不方便咱們在發生錯誤時分析日誌。因此一般都會對日誌文件進行切割,根據業務需求可能按天、按周來進行切割。面試
💡自動切割:若是你的nginx可以自動切割日誌,那麼你就不須要看了,怎麼判斷有沒有自動切割功能呢,查看一下/etc/logrotate.d
下是否有nginx文件,logrotate用於日誌切割,linux自帶的,但內置的除了切割還有一些其餘的操做,好比定時清除,有須要的能夠自行看一下vim /etc/logrotate.d/nginx
算法
😓下面教的是使用定時任務自動切割日誌文件,固然若是你喜歡手動也沒問題。spring
咱們只須要定義一個定時任務便可。
1.先提一下crontab的語法,用示例來簡單講解語法:
示例:0 * * * * /root/nginx-cut-log.sh>/dev/null 2>&1 crontab語法: 第一個參數:分(取值0-59,*表明每個),對應上面第一個0 第二個參數:時(取值0-23),對應上面第二個0 第三個參數:日(取值1-31) 第四個參數:月(取值1-12) 第五個參數:星期(取值0-6,0表明星期日) 第六個參數:要運行的命令 額外的說明: 上面的命令中`>/dev/null 2>&1`用於把定時任務的標準輸出和錯誤輸出都重定向到「垃圾桶/黑洞」中。
2.而後編寫一個切割日誌文件的腳本文件nginx-cut-log.sh
(命名隨意):
#!/bin/bash #定義日誌目錄變量 logs_path="/var/log/nginx/" #切割日誌,其實就是拷貝與新建而已。 #`date -d yes +"%Y%m%d"`中``能夠用來獲取linux命令的執行結果,能夠參考https://www.cnblogs.com/asxe/p/9317811.html mv $logs_path/access.log $logs_path/access-`date +"%Y-%m-%d-%H-%M"`.log # 測試的時候請打開這一個關閉下面的,這個用於每分鐘執行一次。 #下面的這個應該用於天天執行的狀況,由於以日期命名了文件 #mv $logs_path/access.log $logs_path/access-`date -d "1 day ago" +"%Y-%m-%d"`.log #上面的操做相似於重命名,因此本來的access.log會沒了,使用下面的命令讓nginx從新生成一個access.log. /nginx -s reopen;
3.記得給腳本文件增長執行權限:
chmod +x nginx-cut-log.sh
4.而後定義一個定時任務:
執行命令crontab -e
,並在那裏附加下述命令:
* * * * * /root/nginx-cut-log.sh>/dev/null 2>&1
上面的用於每分鐘都建立新的日誌文件的測試,正式使用應該前面兩個是一個準確的值,好比0 0 * * * /root/nginx-cut-log.sh>/dev/null 2>&1
表明天天零點零分執行。
5.而後重啓crond:執行命令crond restart
6.而後你在/var/log/nginx/目錄下等一分鐘看是否會建立新的access.log文件。若是建立了,就說明咱們的日誌切割成功運行了。固然,記得測試完後清除咱們上面在crontab -e
中輸入的命令,由於那個表明了每分鐘都運行。
error_page code ... [=[response]] uri;
error_page 500 502 503 504 /50x.html;
:表明http響應碼爲500,502,503,504時,返回各自location的root下的/50x.html
error_page 400 http://xxxx.html
:表明http響應碼爲400時,返回http://xxxx.html
error_page 404 = @fallback;
還支持內部重定向,@fallback
是自定義的一個內部重定向location.error_page 400=200 http://xxxx.html
:發生400錯誤時,返回http://xxxx.html
,並修改返回的響應碼爲200.💡訪問限流依靠ngx_http_limit_conn_module模塊,ngx_http_limit_req_module模塊。ngx_http_limit_conn_module用來限制鏈接數。ngx_http_limit_req_module用來限制請求數。
💡爲何須要限流呢?那是爲了防止過量的請求給服務端帶來過大的壓力。
❓鏈接跟請求的區別:
Connection: keep-alive
,若是在響應的Header中有這Connection: keep-alive
,那麼就會維持鏈接,直到響應/請求的Header中有Connection: close
才斷開鏈接(超時也會,keep-alive也是有時效的)。在Connection: keep-alive
的時候一個鏈接能夠發起多個請求。Connection: keep-alive
的,你能夠嘗試在谷歌瀏覽器中打開百度的一張圖,並打開它的請求Timing來查看是否每一次都initial connection(初始化鏈接,這表明創建新的tcp鏈接,而stalled表明檢測是否有舊的可用的tcp鏈接,因此上面的第二種圖中沒用initial,只有stalled,stalled使用了沒斷開的tcp鏈接)中測試。💡limit_req_zone:用來設置請求限制規則,
limit_req_zone key zone=name:size rate=rate;
$server_name
的時候,表明限制虛擬主機的請求次數,爲$binary_remote_addr
或$remote_addr
時表明限制同一個IP的客戶端的請求次數。limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
💡limit_req:與limit_req_zone配合,用來定義限制請求次數。
limit_req zone=name [burst=number] [nodelay | delay=number];
limit_req zone=req_zone burst=3
中,限制請求次數是1,那麼突發的2個請求會放到下一秒再執行。limit_req zone=req_zone burst=3 nodelay;
1.配置nginx:
2.重啓以後測試:你能夠在一秒內連續在瀏覽器中刷新,若是刷新屢次以後忽然響應503,那說明請求被限制了。或者你能夠在/var/log/nginx/error.log
中看到limiting requests
💡limit_conn_zone:用來設置鏈接限制規則,語法limit_conn_zone key zone=name:size;
$server_name
的時候,表明限制虛擬主機的鏈接次數,爲$binary_remote_addr
或$remote_addr
時表明限制同一個IP的客戶端的鏈接次數。limit_conn_zone $binary_remote_addr zone=addr:10m;
💡limit_conn:與limit_conn_zone配合,用來定義限制鏈接次數。語法limit_conn zone number;
limit_conn addr 1;
,假如addr是一個限制同一個IP的客戶端的鏈接次數的規則,表明同一個IP的客戶端的併發鏈接爲1.💡補充:並非全部的鏈接都會被計算,只有併發壓力的鏈接才計算,好比上面的limit_conn addr 1;
表明每一個IP只能有一個鏈接,但若是你給不了nginx請求壓力的話,那麼假設你發起兩個鏈接,nginx立刻處理完第一鏈接以後,後面來的第二個鏈接此時並不算併發鏈接(這時候就限制失敗了),因此若是你下面測試的話,能夠訪問處理比較慢的資源,讓nginx持續地持有這個鏈接,而後咱們再發起另一個鏈接,這樣才能測試成功。下面是官網文檔的一段話:
Not all connections are counted. A connection is counted only if it has a request being processed by the server and the whole request header has already been read.
上面說了, 要使用一個響應比較慢的資源,因此咱們這裏使用反向代理來做爲響應。
1.新建一個後端服務端接口:(下面示例基於spring boot,我讓它sleep了10秒,也就至關於要處理十秒才能響應數據。此時有充足的時間來讓咱們發起第二次數據)
2.配置default.conf:
3.測試訪問:
http://192.168.31.128/user/info
,這個是個人代理後的請求接口,響應時間至少須要十秒http://192.168.31.128/user/info
,這個會直接獲得503,而不是等待十秒的響應。limit_rate
能夠用來限制響應的傳輸速度,這裏沒講。💡注意,此時的https配置並無太多實戰意義,由於證書都是正規機構發的話,瀏覽器纔可以識別成安全的。這裏的教學只是作個認知,就是知道怎麼配置,證書什麼的是都是應該從正規機構申請的。
nginx -V
查看編譯參數,若是有--with-http_ssl_module
,那麼就表明啓用了ngx_http_ssl_module模塊。默認的YUM方式安裝是攜帶這個模塊的。若是你是使用了編譯安裝的,那麼自行去加上吧。Https有什麼好處,處理什麼狀況,這些本身查吧。
Https會使用幾種加密方式,非對稱加密用於身份驗證和密鑰協商,對稱加密用於採用協商的密鑰來對數據進行加密。另外散列算法用於檢驗數據完整性。
對稱加密使用同一個密鑰。
非對稱加密,公鑰用於加密,私鑰用於解密
Https簡單流程:首先發起非對稱加密,服務端將公鑰發送給客戶端(此時發送的是證書,證書客戶端是須要校驗的),若是證書合法,那麼客戶端使用僞隨機數來生成一個會話密鑰,使用證書加密會話密鑰並傳輸給服務端。服務端使用私鑰來解密獲得會話密鑰。而後後面傳輸的數據使用此時兩端都知道的會話密鑰來加密數據。💡從這個簡單流程,應該咱們只須要關心兩條🔑,一個是證書,一個是私鑰。
1.生成證書私鑰:此處生成的私鑰用於提交給CA來生成證書認證簽名文件。
openssl genrsa -out server.key 2048
用於生成密鑰Key,執行這個命令後須要輸入一個密碼,會基於這個密碼來生成私鑰。
genrsa
表明使用RSA來生成私鑰,openssl rsa
表明從私鑰中獲取公鑰。-des3
:指定生成的密鑰使用des3方式進行加密,這樣的話每次使用都須要輸出密碼來解密。- out 文件路徑
:用於指定生成的key的位置。2048
是密鑰的長度,長度越長,安全性越強,通常推薦使用2048。2.建立服務器證書的申請文件server.csr。CSR文件是您的公鑰證書原始文件,包含了您的服務器信息和您的單位信息,須要提交給CA認證中心審覈。
openssl req -new -key server.key -out server.csr
會提示輸入幾個內容:
server.key
:生成密鑰時輸入的密碼Country Name (2 letter code) [XX]
:國家代碼,如CN,能夠不填,直接回車跳過便可。State or Province Name (full name) []
:省份名稱,能夠不填,直接回車跳過便可。Locality Name (eg, city) [Default City]
:城市名稱,能夠不填,直接回車跳過便可。Organization Name (eg, company) [Default Company Ltd]
:機構名稱,能夠不填,直接回車跳過便可。Organizational Unit Name (eg, section) []
:組織單位名稱,能夠不填,直接回車跳過便可。Common Name (eg, your name or your server's hostname) []
:使用SSL加密的域名。注意這裏要配成你的網站的域名,否則在訪問的時候會說"這個證書不屬於這個網站(😓英文我忘記是什麼了)",若是你看到這樣的錯誤的話,你就應該知道是你的證書綁定錯了域名。好比能夠輸入www.123.com
。Email Address []
:郵件地址,能夠省略A challenge password []
:有些認證機構須要這個密碼,通常爲空An optional company name []
:可選的公司名稱,省略便可。3.生成CRT證書認證文件:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
* X509用於自簽名
* -req:x509工具默認以證書文件作爲inputfile(-in file),指定該選項將使得input file的file爲證書請求文件。
* -days 30 用於設置證書的有效期
* -in:用於指定CSR證書申請文件
* -signkey:用於指定簽名的私鑰
* -out:用於指定輸出的CRT證書認證文件的路徑。
4.完成:
那麼此時生成了一個.crt
文件和.key
文件。
簡單配置一個新的server:
server { server_name www.123.com; listen 443 ssl; ssl_certificate /etc/nginx/ssl_key/server.crt; ssl_certificate_key /etc/nginx/ssl_key/server.key; location / { root /usr/share/nginx/html; } }
ssl on
用來開啓ssl,如今可使用listen 443 ssl
來代替。爲了儘可能達到仿真,因此咱們手動配置一個dns,這樣的話咱們就至關於有一個虛假的域名了。
訪問咱們的虛假網站www.123.com
:
但因爲咱們是本地環境,它始終會報錯,它仍是會在瀏覽器中顯示不安全,但https是已經配置成功了的。咱們選擇強行訪問的話,連接欄仍熱會報紅:
只是由於咱們是本身生成證書,致使證書頒發機構不可信而已,若是咱們是從網上申請的證書,那麼此時證書頒發機構應該是可信的。
💡正規域名的https配置能夠稍微參考阿里雲nginx配置https文檔
if在nginx文檔中
💡if屬於ngx_http_rewrite_module
模塊。
💡if能夠作一些的判斷,根據條件來進行不一樣的處理,可使用在server和location中。
💡if的使用場景:
下面是一個例子,就是若是瀏覽器是谷歌瀏覽器,就返回503。
#禁止chrome訪問:若是$http_user_agent`若是包含Chrome,就禁止訪問。 if ($http_user_agent ~ Chrome) { return 503; }
=
用於判斷兩個值是否相等,例如if ($request_method = POST)
!=
用於判斷兩個值是否不相等~
:大小寫敏感的正則匹配,與後面的正則搭配使用,例如:if ($http_user_agent ~ MSIE)
表明$http_user_agent
若是包含MSIE,就爲true。~*
:對大小寫不敏感的正則匹配,與後面的正則搭配使用。!~
:若是~
結果爲true,則!~
爲false!~*
:若是~*
結果爲true,則!~*
爲false-f
:若是文件存在,爲true。例如:if (-f $request_filename)
!-f
:若是目錄存在,文件不存在,爲ture;目錄和文件都不存在,爲false。例如:if (!-f $request_filename)
-d
:若是請求的目錄存在,則爲true!-d
:若是請求目錄的上級目錄存在,目錄不存在,爲true;若是上級目錄和目錄都不存在,爲false.下面是能夠用做if判斷的全局變量
參數名 | 說明 |
---|---|
`$arg_PARAMETER | PARAMETER是變量名,能夠根據不一樣的PARAMETER獲取請求行中的指定參數,也就是URL中的參數。 |
$args |
URL中的查詢參數。,好比https://www.baidu.com/baidu?wd=nginx&tn=monline_4_dg&ie=utf-8 中的wd=nginx&tn=monline_4_dg&ie=utf-8 |
$binary_remote_addr |
二進制的客戶端IP地址。 |
$content_type |
請求頭中的Content-Type字段。 |
$cookie_COOKIE |
客戶端cookie信息 |
$document_root |
當前請求在root指令中指定的值。 |
$document_uri |
包含請求參數的原始URI |
$host |
請求頭中的Host 字段 |
$http_HEADER |
HEADER是一個變量,能夠用於獲取請求頭中的參數值。 |
$http_user_agent |
客戶端agent信息,客戶端瀏覽器信息 |
$http_cookie |
客戶端cookie信息 |
$is_args |
若是有url參數,則爲?;無則爲空。 |
$limit_rate |
nginx配置的limit_conn 的數值。 |
$query_string |
與$args 功能一致 |
$remote_addr |
客戶端的IP地址 |
$remote_port |
客戶端的端口 |
$request_filename |
當前請求的資源文件的路徑名 |
$request_method |
請求的方法,GET 、POST 之類的。 |
$request_uri |
包含請求參數的原始URI,不包含主機名 |
$scheme |
http仍是https |
$server_addr |
服務端地址 |
$server_name |
服務端名稱(域名) |
$server_port |
服務端接收請求的端口 |
$server_protocol |
http協議版本,1.0,1.1,HTTP/2 ? |
$uri |
與$document_uri 相同 |
除了使用全局變量來判斷,還能夠本身經過set $變量名 值
設置變量,例如:
location / { root /usr/share/nginx/html; default_type text/html; set $flag ""; if ($http_user_agent ~ Chrome) { set $flag "Chrome"; } # 這裏繞了一圈只是爲了說明,可使用咱們本身設置的變量 if ($flag = 'Chrome') { return 200 "hello"; } }
set的值除了是一個字面值,還能夠是一個全局變量,好比set $web_agent "${http_user_agent}";
。set的使用應該是面向場景的,因此這裏只作個開頭,當你想要某個值來作判斷的時候,你能夠本身去探究一下這個值該怎麼設置。
💡rewrite屬於ngx_http_rewrite_module
模塊。
💡rewrite用於重寫url和重定向,一個比較常見的用途是,好比用於http重定向https,你本來訪問http://example.com
,我幫你強制跳轉到https://example.com
;好比某文件位置遷移了,訪問舊的位置,重寫成遷移後的位置;好比根據不一樣瀏覽器重定向到不一樣頁面你是IE瀏覽器,我就幫你轉到一個特定的頁面;這就是rewrite乾的活,作一些重定向的活。
💡語法是:rewrite regex replacement [flag]
,可使用在server, location, if中。
實驗一:測試regex匹配對象的是什麼:
server { listen 80; server_name 127.0.0.1; location / { rewrite (.*) http://192.168.48.129$1 redirect; } }
當訪問nginx所在機器192.168.31.128/aaa/bbb
的時候,因爲上面的規則是重定向到http://192.168.48.129$1
,因此得出結論,regex對應的部分就是有/
開頭的uri部分。
實驗二:重定向到指定的頁面:
server { listen 80; server_name 127.0.0.1; location / { #只有匹配成功的時候才重定向,訪問/rewrite/aaa時重定向,訪問/aaa時不重定向 rewrite ^/rewrite/(.*) http://192.168.48.129/$1 redirect; #訪問http://192.168.31.128/rewrite時,重定向到http://192.168.48.129 #訪問http://192.168.31.128/rewriteaaa,重定向到http://192.168.48.129 #rewrite ^/rewrite http://192.168.48.129 redirect; #訪問http://192.168.31.128/rewrite,內部重定向到http://192.168.31.128/hello #root /usr/share/nginx/html; #rewrite ^/rewrite /hello last; #訪問http://192.168.31.128/rewrite,返回"root"+/hello.html資源 #root /usr/share/nginx/html; #rewrite ^/rewrite /hello.html break; } location /hello{ default_type text/html; return 200 "hello"; } }
實驗三:與if配合重定向,假如瀏覽器是IE的,跳轉到指定頁面:
server { listen 80; server_name 127.0.0.1; location / { #訪問http://192.168.31.128/rewrite,返回"root"+/hello.html資源 root /usr/share/nginx/html; # 若是http_user_agent中包含了chrome,那麼就重定向 if ($http_user_agent ~ Chrome) { rewrite ^(.*)$ /chrome/$1 break; } rewrite ^/rewrite /hello.html break; } }
上面的例子中都是內置模塊的內容,但也稍微提了一下第三方模塊,好比在負載均衡中提到了fair和url_hash。對於須要使用第三方模塊的,仍是建議使用編譯安裝的方式,那樣添加第三方模塊比較方便。
1.先到官網下載編譯安裝用的tar包,或者wget http://nginx.org/download/nginx-1.12.1.tar.gz
【由於下面的演示的echo模塊最高兼容1.16,因此這裏安裝1.16】
2.解壓tar包:tar -zxvf nginx-1.12.1.tar.gz
3.cd nginx-1.12.1/
4../configure --prefix=/etc/nginx
,注意,編譯方式安裝,文件目錄佈局與yum安裝方式的不太同樣。
5.make && make install
6.進入/etc/nginx/sbin
目錄下執行./nginx -v
,若是可以正常輸出nginx版本,那麼就表明編譯安裝成功了。
💡--prefix 用於指定nginx編譯後的安裝目錄
【docker內部的nginx也是編譯安裝的,若是你懂docker,那麼你能夠經過修改docker的dockerfile來添加第三方模塊】
【若是你是覆蓋安裝的,注意保存以前的配置信息。】
安裝第三方模塊須要咱們從新編譯安裝,因此下面的過程是以編譯安裝爲基礎的。
下面的安裝模塊咱們以echo模塊爲例。echo模塊能夠返回變量,好比echo $remote_addr;
表明把客戶端的IP做爲響應數據。
1.從github上下載echo模塊的源代碼:echo-nginx-module
或者直接在nginx所在的機器上wget https://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gz
2.上傳到nginx所在的機器上。
3.解壓第三方模塊echo模塊:tar -zxvf v0.61.tar.gz
4.咱們進入到以前的nginx源代碼目錄:cd nginx-1.12.1/
5.從新編譯安裝:./configure --prefix=/etc/nginx --add-module=/root/temp/echo-nginx-module-0.61
6.make && make install
7.進入/etc/nginx/sbin
目錄下執行./nginx -V
,若是能看到configure arguments: --prefix=/etc/nginx --add-module=/root/temp/echo-nginx-module-0.61
,那麼就表明編譯安裝成功了。除了這樣,你還能夠嘗試在代碼中添加echo指令來測試。
nginx: [emerg] unknown directive "echo" in /etc/nginx/conf.d/default.conf:5 nginx: configuration file /etc/nginx/nginx.conf test failed
那麼若是咱們安裝了以後,不報錯,而且訪問nginx服務端以後,返回的是客戶端的IP地址的話,那麼就說明第三方模塊安裝成功了。
知識補充:
--add-module=第三方模塊源代碼路徑
用於添加第三方模塊,--add-module=/usr/local/nginx/third_module/echo-nginx-module-0.60
表明添加了echo模塊。--with-模塊名
表示啓用的nginx模塊,如--with-http_ssl_module
表明啓用了http_ssl_module模塊沒有講到的內容其實挺多的,但上面的應該是常見的內容了,學會了應該就夠平常使用了,後面有須要你本身去百度的時候應該就能看懂別人的配置了。
其餘的內容因爲優先級不是很高,並且考慮篇幅問題,因此這裏沒有講解,下面列舉一下我以爲可能
🔶nginx還支持郵件服務,但可能比較少用。
🔶nginx與Keepalived搭配的高可用。【其實挺重要,你們能夠本身搜索學習一下】
🔶nginx也支持NFS(網絡文件系統),但有一些替代方案,好比對於Java來講的話,比較常見的是FastDFS(也依託nginx)了。
🔶網頁壓縮,可使用GZIP來進行網頁壓縮,來減小傳輸的數據,但壓縮是須要系統去處理的,因此可能須要消耗一些CPU資源。本身有需求就去找找看吧。
🔶nginx與其餘服務器的比較,由於這篇文章重點不是這個,因此不講。
🔶若是你關心文件傳輸方面的知識,那麼能夠了解下send_file 和tcp_nopush對於數據傳輸的處理。
🔶sub_status模塊,用來查看nginx自上次啓動以來的工做狀態。包括處理的鏈接數、請求數等。
🔶geoip能夠用於地區識別,好比基於IP判斷用戶的地區。
🔶http_slice_module模塊能夠用於大文件分片的處理。
🔶若是你想拿來當面試談資,那麼IO多路複用模型能夠了解一下,nginx.conf的events塊中其實能夠修改nginx對於請求處理的IO模型,當問nginx爲何那麼厲害的時候,IO多路複用模型也能夠談一下。
😀我這篇文章講了一些例如負載均衡的內容,但這並不表明你不須要額外學習nginx的內容了,由於我只是講了普通狀況,若是你的業務複雜的話,那麼你最好仔細的看一下官方文檔了。 😀請認清,這只是一篇用於基礎理論瞭解的文章而已。