摘要:安裝簡(jiǎn)單配置簡(jiǎn)潔啟動(dòng)快速便捷支持熱部署支持擁有高度模塊化的設(shè)計(jì)。備注在版本之前,不能在中使用權(quán)重。不能與同時(shí)使用。當(dāng)有服務(wù)器需要剔除,必須手動(dòng)掉。表示把請(qǐng)求轉(zhuǎn)發(fā)給連接數(shù)較少的后端服務(wù)器。表示當(dāng)前的暫時(shí)不參與負(fù)載均衡。表示預(yù)留的備份機(jī)器。
本文已同步到專(zhuān)業(yè)技術(shù)網(wǎng)站 www.sufaith.com, 該網(wǎng)站專(zhuān)注于前后端開(kāi)發(fā)技術(shù)與經(jīng)驗(yàn)分享, 包含Web開(kāi)發(fā)、Nodejs、Python、Linux、IT資訊等板塊.
Nginx是一個(gè)高性能、輕量級(jí)的Web和反向代理服務(wù)器,?其特點(diǎn)是占有內(nèi)存及資源少、抗并發(fā)能力強(qiáng)。
Nginx安裝簡(jiǎn)單、配置簡(jiǎn)潔、啟動(dòng)快速便捷、支持熱部署、支持 SSL、擁有高度模塊化的設(shè)計(jì)。
Nginx的主要功能有:
Web服務(wù)器
反向代理
負(fù)載均衡
二、運(yùn)行和控制Nginx備注: 以下命令中的 /usr/local/nginx 是nginx二進(jìn)制文件的絕對(duì)路徑,需根據(jù)自己實(shí)際的安裝路徑而定。
1.啟動(dòng)/usr/local/nginx/sbin/nginx2.重新打開(kāi)日志文件
/usr/local/nginx/sbin/nginx -s reopen3.重新載入配置文件
/usr/local/nginx/sbin/nginx -s reload4.停止
/usr/local/nginx/sbin/nginx -s stop5.從容停止 (1) 查看進(jìn)程號(hào)
ps -ef|grep nginx(2) 殺死進(jìn)程
kill -QUIT <進(jìn)程號(hào)> 或 kill -TERM <進(jìn)程號(hào)>6.強(qiáng)制停止
pkill -9 nginx三、Nginx作為Web服務(wù)器
Nginx作為Web服務(wù)器, 需要定義server虛擬主機(jī),讓這些虛擬主機(jī)去處理對(duì)于特定域名或IP地址的請(qǐng)求。
每個(gè)server虛擬主機(jī)都定義了 location 指令,location 定義了對(duì)于指定的一組 URI 是如何匹配和進(jìn)行處理的。
server { listen 80; server_name www.example.com; location / { root /usr/local/www; index index.html; } }
參數(shù)說(shuō)明:
server 代表1個(gè)虛擬主機(jī),可以有多個(gè)
server_name 匹配請(qǐng)求的指定域名或IP地址
location 配置請(qǐng)求的路由,匹配對(duì)應(yīng)的URI
root 查找資源的路徑(文件夾目錄)
index 默認(rèn)查找
2.location匹配規(guī)則(請(qǐng)求過(guò)濾) (1) 語(yǔ)法server { location 表達(dá)式 { } }(2) location表達(dá)式的類(lèi)型
@ 它定義一個(gè)命名的 location,使用在內(nèi)部定向時(shí),例如 error_page, try_files
/ 通用匹配,任何請(qǐng)求都會(huì)匹配到
= 開(kāi)頭, 表示精確匹配,?只有請(qǐng)求的url路徑與=后面的字符串完全相等才會(huì)匹配到(優(yōu)先級(jí)最高)
^~ 表示普通字符匹配。使用前綴匹配。如果匹配成功,則不再匹配其他location
~ 開(kāi)頭表示區(qū)分大小寫(xiě)的正則匹配
~* 開(kāi)頭表示不區(qū)分大小寫(xiě)的正則匹配
(3) location表達(dá)式的優(yōu)先級(jí)=?的優(yōu)先級(jí)最高。一旦匹配成功,則不再查找其他匹配項(xiàng)。
^~?類(lèi)型表達(dá)式。一旦匹配成功,則不再查找其他匹配項(xiàng)。
~ 和 ~*?的優(yōu)先級(jí)次之。如果有多個(gè)location的正則能匹配的話(huà),則使用正則表達(dá)式最長(zhǎng)的那個(gè)。
常規(guī)字符串匹配類(lèi)型。按前綴匹配。
3.URL重寫(xiě)URL重寫(xiě)是指: 當(dāng)請(qǐng)求的URL滿(mǎn)足事先定義好的規(guī)則時(shí), 將跳轉(zhuǎn)/定向到某個(gè)規(guī)則,比如常見(jiàn)的偽靜態(tài)、301重定向、瀏覽器定向等。
(1)?語(yǔ)法server { rewrite 規(guī)則 定向路徑 重寫(xiě)類(lèi)型; }
rewrite參數(shù)說(shuō)明:
規(guī)則:字符串或者正則來(lái)表示想匹配的目標(biāo)url
定向路徑:匹配到規(guī)則后要定向的路徑,如果規(guī)則里有正則,則可以使用$index來(lái)表示正則里的捕獲分組
重寫(xiě)類(lèi)型:
last :表示完成rewrite,瀏覽器地址欄URL地址不變
break;本條規(guī)則匹配完成后,終止匹配,不再匹配后面的規(guī)則,瀏覽器地址欄URL地址不變
redirect:返回302臨時(shí)重定向,瀏覽器地址會(huì)顯示跳轉(zhuǎn)后的URL地址
permanent:返回301永久重定向,瀏覽器地址欄會(huì)顯示跳轉(zhuǎn)后的URL地址
(2) 示例域名跳轉(zhuǎn):?訪(fǎng)問(wèn) www.aaa.com 跳轉(zhuǎn)到 www.bbb.com
server { listen 80; server_name www.aaa.com; location / { rewrite ^/$ www.bbb.com permanent ; } }4.try_files
try_files是指:?按順序檢查文件是否存在,返回第一個(gè)找到的文件。如果所有的文件都找不到,會(huì)進(jìn)行一個(gè)內(nèi)部重定向到最后一個(gè)參數(shù).
try_files file1 files2 ... uri
參數(shù)說(shuō)明:
最后一個(gè)參數(shù)是回退URI,?且必須存在,否則將會(huì)出現(xiàn)內(nèi)部500錯(cuò)誤。
只有最后一個(gè)參數(shù)可以引起一個(gè)內(nèi)部重定向,之前的參數(shù)只設(shè)置內(nèi)部URI的指向。
最后一個(gè)參數(shù)也可以是一個(gè)命名的location。
最后一個(gè)參數(shù)如果不是命名的location那么$args不會(huì)自動(dòng)保留,如果你想保留$args,必須在最后一個(gè)參數(shù)里明確聲明。示例為:
try_files $uri $uri/ /index.php?q=$uri&$args;(2) 示例
跳轉(zhuǎn)到文件
當(dāng)訪(fǎng)問(wèn):www.example.com/test 時(shí)會(huì)依次查找,若 1.html,2.html?都不存在,最終返回 3.html
server { listen 80; server_name www.example.com; root html; index index.html; location /test { try_files /1.html /2.html /3.html; } }
跳轉(zhuǎn)到變量
當(dāng)訪(fǎng)問(wèn):www.example.com/test 時(shí)會(huì)依次查找,若 1.html,2.html 都不存在,則跳轉(zhuǎn)到命名為abc的location
server { listen 80; server_name www.example.com; root html; index index.html; location /test { try_files /1.html /2.html @abc; } location @abc{ rewrite ^/(.*)$ http://www.example2.com; } }
vue-router設(shè)置HTML5 History 模式時(shí), nginx的配置如下:
location / { # URL 匹配不到任何靜態(tài)資源,返回同一個(gè) index.html 頁(yè)面,這個(gè)頁(yè)面就是你 app 依賴(lài)的頁(yè)面。 try_files $uri $uri/ /index.html; }5.Gzip配置
server { # 開(kāi)啟gzip 壓縮 gzip on; # 設(shè)置gzip所需的http協(xié)議最低版本 (HTTP/1.1, HTTP/1.0) gzip_http_version 1.1; # 設(shè)置壓縮級(jí)別(1-9), 值越大壓縮率越高,同時(shí)消耗cpu資源也越多,建議設(shè)置在4左右 gzip_comp_level 4; # 設(shè)置壓縮的最小字節(jié)數(shù), 頁(yè)面Content-Length獲取 gzip_min_length 1000; # 設(shè)置壓縮文件的類(lèi)型 (text/html), 不建議壓縮圖片(如jpg、png本身已壓縮) gzip_types text/plain application/javascript text/css; #配置禁用gzip條件,支持正則。此處表示ie6及以下不啟用gzip(因?yàn)閕e低版本不支持) gzip_disable "MSIE [1-6]."; }6.https配置
http { # 配置共享會(huì)話(huà)緩存大小,視站點(diǎn)訪(fǎng)問(wèn)情況設(shè)定 ssl_session_cache shared:SSL:10m; # 配置會(huì)話(huà)超時(shí)時(shí)間 ssl_session_timeout 10m; server { listen 443; server_name www.example.com; ssl on; # 設(shè)置長(zhǎng)連接 keepalive_timeout 70; # HSTS策略 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; # 證書(shū)文件 ssl_certificate www.example.com.crt; # 私鑰文件 ssl_certificate_key www.example.com.key; # 優(yōu)先采取服務(wù)器算法 ssl_prefer_server_ciphers on; # 指定SSL協(xié)議 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 定義算法 ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"; # 減少點(diǎn)擊劫持 add_header X-Frame-Options DENY; # 禁止服務(wù)器自動(dòng)解析資源類(lèi)型 add_header X-Content-Type-Options nosniff; # 防XSS攻擊 add_header X-Xss-Protection 1; } }四、Nginx作為反向代理服務(wù)器
server { listen 80; server_name www.example.com; root html; index index.html; location /test { # 請(qǐng)求host proxy_set_header Host $http_host; # 請(qǐng)求ip proxy_set_header X-Real-IP $remote_addr; # 請(qǐng)求協(xié)議 proxy_set_header X-Scheme $scheme; # 代理服務(wù)器 proxy_pass http://localhost:3000; } }
當(dāng)訪(fǎng)問(wèn)http://www.example.com/test時(shí), nginx會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到http://localhost:3000上。
五、Nginx作為負(fù)載均衡 1.負(fù)載均衡的介紹在服務(wù)器集群中,Nginx起到一個(gè)代理服務(wù)器的角色(即反向代理),為了避免多帶帶一個(gè)服務(wù)器壓力過(guò)大,將來(lái)自用戶(hù)的請(qǐng)求轉(zhuǎn)發(fā)給不同的服務(wù)器。
負(fù)載均衡用于從 "upstream" 模塊定義的后端服務(wù)器列表中選取一臺(tái)服務(wù)器接受用戶(hù)的請(qǐng)求。
2.負(fù)載均衡的基本實(shí)例 (1) upstream模塊一個(gè)最基本的upstream模塊如下:
#動(dòng)態(tài)服務(wù)器組, server是后端服務(wù)器,my_server是自定義的服務(wù)器組名稱(chēng)。 upstream my_server { server localhost:8001; server localhost:8002; server localhost:8003; }(2) 反向代理
在upstream模塊配置完成后,要讓指定的訪(fǎng)問(wèn)反向代理到服務(wù)器組。
server { listen 80; server_name www.example.com; root html; index index.html; location / { # 反向代理到定義好的服務(wù)器組my_server proxy_pass my_server; } }(3)完整配置
http { upstream my_server { server localhost:8001; server localhost:8002; server localhost:8003; } server { listen 80; server_name www.example.com; root html; index index.html; location / { # 反向代理到定義好的服務(wù)器組my_server proxy_pass my_server; } } }3. 負(fù)載均衡策略 (1) 輪詢(xún)(默認(rèn)方式)
表示每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器。
upstream my_server { server localhost:8001; server localhost:8002; }(2) weight(權(quán)重方式)
表示在輪詢(xún)策略的基礎(chǔ)上指定輪詢(xún)的服務(wù)器的權(quán)重,默認(rèn)為1,權(quán)重越高分配到需要處理的請(qǐng)求越多。
upstream my_server { server localhost:8001 weight=1; server localhost:8002 weight=2; }(3) ip_hash
表示指定負(fù)載均衡器按照基于客戶(hù)端IP的分配方式,這個(gè)方法確保了相同的客戶(hù)端的請(qǐng)求一直發(fā)送到相同的服務(wù)器,以保證session會(huì)話(huà)。這樣每個(gè)訪(fǎng)客都固定訪(fǎng)問(wèn)一個(gè)后端服務(wù)器,可以解決session不能跨服務(wù)器的問(wèn)題。
upstream my_server { ip_hash; server localhost:8001; server localhost:8002; }
備注:
在nginx版本1.3.1之前,不能在ip_hash中使用權(quán)重(weight)。
ip_hash不能與backup同時(shí)使用。
此策略適合有狀態(tài)服務(wù),比如session。
當(dāng)有服務(wù)器需要剔除,必須手動(dòng)down掉。
(4)?least_conn表示把請(qǐng)求轉(zhuǎn)發(fā)給連接數(shù)較少的后端服務(wù)器。輪詢(xún)算法是把請(qǐng)求平均的轉(zhuǎn)發(fā)給各個(gè)后端,使它們的負(fù)載大致相同;但是,有些請(qǐng)求占用的時(shí)間很長(zhǎng),會(huì)導(dǎo)致其所在的后端負(fù)載較高。這種情況下,least_conn這種方式就可以達(dá)到更好的負(fù)載均衡效果。
upstream my_server { least_conn; server localhost:8001; server localhost:8002; }(5) down
表示當(dāng)前的server暫時(shí)不參與負(fù)載均衡。
upstream my_server { server localhost:8001 down; server localhost:8002; server localhost:8003; }(6) backup
表示預(yù)留的備份機(jī)器。當(dāng)其他所有的非backup機(jī)器出現(xiàn)故障或者忙的時(shí)候,才會(huì)請(qǐng)求backup機(jī)器,因 此這臺(tái)機(jī)器的壓力最輕。
upstream my_server { server localhost:8001 backup; server localhost:8002; server localhost:8003; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/40584.html
摘要:十年鏟碼,八大體系超千篇數(shù)百萬(wàn)字技術(shù)筆記系列匯總悅享版十年鏟碼兩茫茫,縱思量,卻易忘不覺(jué)筆者步入程序員已有十年。十年之期,正巧筆者從阿里離開(kāi),重回打印制造業(yè)的懷抱,希望能依托于設(shè)備優(yōu)勢(shì)逐步真正構(gòu)建分布式制造網(wǎng)絡(luò)。 showImg(https://segmentfault.com/img/remote/1460000020151971); 十年鏟碼,八大體系超千篇數(shù)百萬(wàn)字技術(shù)筆記系列匯總...
本文收集學(xué)習(xí)過(guò)程中使用到的資源。 持續(xù)更新中…… 項(xiàng)目地址 https://github.com/abc-club/f... 目錄 vue react react-native Weex typescript Taro nodejs 常用庫(kù) css js es6 移動(dòng)端 微信公眾號(hào) 小程序 webpack GraphQL 性能與監(jiān)控 高質(zhì)文章 趨勢(shì) 動(dòng)效 數(shù)據(jù)結(jié)構(gòu)與算法 js core 代碼規(guī)范...
摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒(méi)想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...
摘要:反向代理是為服務(wù)端服務(wù)的,反向代理可以幫助服務(wù)器接收來(lái)自客戶(hù)端的請(qǐng)求,幫助服務(wù)器做請(qǐng)求轉(zhuǎn)發(fā),負(fù)載均衡等。如何實(shí)現(xiàn)負(fù)載均衡指定后端服務(wù)器地址列表在中攔截響應(yīng)請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)到中配置的服務(wù)器列表。 nginx在應(yīng)用程序中的作用 解決跨域 請(qǐng)求過(guò)濾 配置gzip 負(fù)載均衡 靜態(tài)資源服務(wù)器 nginx是一個(gè)高性能的HTTP和反向代理服務(wù)器,也是一個(gè)通用的TCP/UDP代理服務(wù)器,最初由俄...
閱讀 4457·2021-09-24 09:47
閱讀 1259·2021-09-03 10:33
閱讀 2137·2019-08-30 11:13
閱讀 1082·2019-08-30 10:49
閱讀 1809·2019-08-29 16:13
閱讀 2104·2019-08-29 11:28
閱讀 3147·2019-08-26 13:31
閱讀 3702·2019-08-23 17:14