Nginx主要應用
靜態網站
Nginx是一個HTTP的web伺服器,可以將伺服器上的靜態檔案(如HTML、圖片等)通過HTTP協議返回給瀏覽器客戶端;
server{ listen 80 ;#埠號 location /app{ #/app是攔截訪問路徑 http://127.0.0.1:80/app/index.html root /opt/app;#靜態檔案路徑 root是指ip+埠即 http://127.0.0.1:80/ index index.html; }}
負載均衡(針對HTTP訪問)
概述
在網站創立初期,我們一般都使用單臺機器對外提供集中式服務隨著業務量的增大,一臺伺服器已經達不到要求,此時就會把多臺機器組成一個叢集對外提供服務。然而,網站對外訪問入口通常只有一個,比如www.web.com,那麼當用戶在瀏覽輸入網址進行訪問時,如何將使用者的請求分發到叢集中不同的機器上呢,這就是負載均衡要做的事情負載均衡通常指:將請求“均勻”分攤倒叢集中多個伺服器節點上執行,這裡的均勻是指在一個比較大的統計範圍內是基本均勻的,並不是完全均勻負載均衡實現方式
硬體負載均衡比如F5、深信服、Array等優點:有廠商專業的技術服務團隊提供支援,效能穩定;缺點:費用昂貴,對於規模較小的網路應用成本太高軟體負載均衡比如Nginx、LVS、HAProxy等優點:免費開源,成本低廉Nginx負載均衡
Nginx如何實現負載均衡:
通過配置Nginx的nginx.conf檔案進行配置即可實現
配置步奏
在http模組加上
#負載均衡配置#weight=1 表示權重,用於後端伺服器效能不均的情況,訪問比率約等於權重之比,權重越大訪問機會越多;#max_fails 允許請求失敗的次數,超過次數後,轉發到下一個伺服器,當有max_fails個請求失敗,就表示後端的伺服器不可用,預設為1,將其設定為0可以關閉檢查 #fail_timeout 指定時間內無響應則失敗, 在以後的fail_timeout時間內nginx不會再把請求發往已檢查出標記為不可用的伺服器#upstream是配置nginx與後端伺服器負載均衡非常重要的一個模組,#並且它還能對後端的伺服器的健康狀態進行檢查,若後端伺服器中的一臺發生故障,則前端的請求不會轉發到該故障機器http{ .... upstream www.myweb.com{ \tserver 127.0.0.1:8080 weight=3 max_fails=2 fail_timeout=30s; \tserver 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s; } ...}
在server加上
... server{ ... #負載均衡配置location location /myweb{ proxy pass http://www.myweb.com; } #轉發的地址要和upstream後面的字串相等; ... } ...
Nginx常用的負載均衡策略
輪詢策略(預設)
每個請求輪流分配到不同的後端伺服器,如果後端伺服器宕機了,將自動剔除
upstream www.myweb.com{ \tserver 127.0.0.1:8080 ; \tserver 127.0.0.1:8081 ; }
權重策略表示權重,用於後端伺服器效能不均的情況,每個請求按照一定比例分發到不同後端伺服器,訪問比率約等於權重之比,權重越大訪問機會越多;
upstream www.myweb.com{ \tserver 127.0.0.1:8080 weight=3; \tserver 127.0.0.1:8081 weight=1; }
ip_hash策略ip_hash也叫IP繫結,每個請求按訪問ip的hash值分配,這樣每個訪問客戶端會固定訪問一個後端伺服器,可以解決 會話session丟失問題session丟失問題也可以用其它方法解決,如redis
upstream www.myweb.com{ \tip_hash; \tserver 127.0.0.1:8080 ; \tserver 127.0.0.1:8081 ; }最少連結策略web請求繪本轉發到連結數量最少的伺服器上![```javascriptupstream www.myweb.com{least_conn;server 127.0.0.1:8080 ;server 127.0.0.1:8081 ;}
負載均衡其它幾個配置一般上線部署或某臺伺服器出現錯誤的時候使用,將其中一臺伺服器標註後,不影響其它的伺服器的訪問使用
備份其它所有非backup機器dang的時候,菜請求backup伺服器
upstream www.myweb.com{ \tserver 127.0.0.1:8080 ; \tserver 127.0.0.1:8081 backup ; }
down機狀態down表示當前的server是down狀態,不參與負載均衡
upstream www.myweb.com{ \t\tserver 127.0.0.1:8080 ; \t\tserver 127.0.0.1:8081 down; \t}
靜態代理
把所有靜態資源的訪問改為訪問nginx,而不是tomcat,因為nginx更擅長靜態資源的處理,效能更好,效率更高;所以在實際應用中,一般將靜態資源如:圖片、css、html、js等交給nginx處理,而不是由tomcat處理
Nginx靜態代理的實現通過在nginx.conf配置檔案中新增靜態資源的location如:如:
1.基於檔案字尾
location ~.*\\.(css|js|img|images|html|htm|gif|jpg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { \t\troot /opt/static;}
將靜態資源放入/opt/static目錄下,然後使用者訪問時由nginx返回這些靜態資源;放置靜態資源的目錄,要注意以下目錄許可權問題,如果許可權不足,給目錄賦予許可權
~表示正則匹配,表示後面的內容可以正則表達匹配;第一個點 .表示任意字元*表示一個或多個字元;.是轉義符| 表示或者$表示結尾location ~ .*/(css|js|img|images|html|htm|gif|jpg|png){ \t root /opt/static; }
動靜分離
動靜分離例項負載均衡Nginx配置:http{ \t \t\t\t\t\t... \t\t\tupstream www.myweb.com{ \t\t\t\tserver 127.0.0.1:8080 ; \t\t\t\tserver 127.0.0.1:8081; \t\t\t} \t \t\tupstream static.myweb.com{ \t\t\t\tserver 127.0.0.1:8080 ; \t\t\t\tserver 127.0.0.1:8081; \t\t\t} \t\tserver{ \t\t\tlocation /myweb{ \t\t\t procy_pass http://www.myweb.com; \t\t\t} \t\t\tlocation ~ .*/(css|js|img|images|html|htm|gif|jpg|png){ \t\t\t procy_pass http://static.myweb.com; \t\t\t} ....... \t\t} \t}
靜態代理Nginx配置:location ~ .*/(css|js|img|images|html|htm|gif|jpg|png){\t root /opt/static;\t}
虛擬主機
虛擬主機就是把一臺物理伺服器劃分為多個“虛擬”的伺服器,這樣一臺物理伺服器就可以當作多個伺服器使用,從而可以配置多個網站;Nginx提供虛擬主機的功能,就是為了讓我們不用安裝多個Nginx,就可以執行多個網站;Nginx配置檔案下,一個server標籤就是一個虛擬主機,想要設定多個虛擬主機,配置多個server節點即可(可以配置200多個);
配置虛擬主機的方式:
基於域名的虛擬主機最常見的server{\t\tlisten 80;\t\tserver_name www.myweb.com; #此處是域名\t\tlocation /myweb {\t\t\tproxy_pass http://www.myweb.com;\t\t}\t}\tserver{ \t\tlisten 80;\t\tserver_name www.web.com;\t\tlocation /web {\t\t\tproxy_pass http://www.web.com;\t\t}\t}
需要修改一下本地host檔案,位置:C:\\Windows\\System32\\drivers\\etc\\hosts在hosts檔案配置:127.0.0.1 www.myweb.com,前面是ip 後面是自定義的域名
配置3個Tomcat,每個Tomcat一個站點,專案部署在tomcat的ROOT目錄下;配置3個Nginx虛擬主機1. 第一種方式
server{\t\tlisten 80;\t\tserver_name bejing.myweb.com; #此處是域名\t\tlocation / {\t\t\tproxy_pass http://bejing.myweb.com;\t\t}\t}\tserver{\t\tlisten 80;\t\tserver_name nanjing.myweb.com; #此處是域名\t\tlocation / {\t\t\tproxy_pass http://nanjing.myweb.com;\t\t}\t}\tserver{ \t\tlisten 80;\t\tserver_name tianjin.myweb.com; #此處是域名\t\tlocation / {\t\t\tproxy_pass http://tianjin.myweb.com;\t\t}\t}
2.第二種方式
配置每個虛擬主機請求轉發所對應的後端伺服器upstream beijing.myweb.com{ \t\tserver 127.0.0.1:8080 ; \t} \tupstream nanjing.myweb.com{ \t\tserver 127.0.0.1:8081 ; \t} \tupstream tianjin.myweb.com{ \t\tserver 127.0.0.1:8082 ; \t} ```
修改hosts檔案,讓ip(是部署專案的伺服器)指定到一個三個站點的域名168.166.124 beijing.myweb.com168.166.124 nanjing.myweb.com168.166.124 tianjin.myweb.com講到最後,Nginx是BAT必須掌握的知識點,我給大家整理了份免費的java架構資料,記得領取方式=
連結:https://blog.csdn.net/qq_41681399/article/details/105242736?depth_1-utm_source=distribute.pc_category.none-task-blog-hot-1&request_id=&utm_source=distribute.pc_category.none-task-blog-hot-11