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