Nginx实现静态代理,负载均衡,前后端分离
Nginx不單可以作為強大的web服務器,也可以作為一個反向代理服務器,而且nginx還可以按照調度規則實現動態、靜態頁面的分離,可以按照輪詢、ip哈希、URL哈希、權重等多種方式對后端服務器做負載均衡,同時還支持后端服務器的健康檢查。
如果只有一臺服務器時,這個服務器掛了,那么對于網站來說是個災難.因此,這時候的負載均衡就會大顯身手了,它會自動剔除掛掉的服務器。
本博客的目的:提供由Nginx實現前后端分離和負載均衡的思路,不提供具體實現的步驟,如果不是很理解前后端分離和負載均衡可以參考博客前后端分離和負載均衡
一:靜態代理
把所有靜態資源的訪問改為訪問nginx,而不是訪問tomcat,這種方式叫靜態代理。因為nginx更擅長于靜態資源的處理,性能更好,效率更高。所以在實際應用中,我們將靜態資源比如圖片、css、html、js等交給nginx處理,而不是由tomcat處理。
實現靜態代理有兩種方法:
方式一 在nginx.conf的location中配置靜態資源的后綴
根據擴展名進行攔截:
整個配置表示以 .后面括號里面的這些后綴結尾的文件都由nginx處理放置靜態資源的目錄,要注意一下目錄權限問題,如果權限不足,給目錄賦予權限;否則會出現403錯誤 chmod 755
方式二 在nginx.conf的location中配置靜態資源所在目錄實現
由于 /opt/static為我們規定的靜態資源訪問的根路徑。但是項目運行起來有一個虛擬目錄,所以真正的靜態資源要放在:/opt/static/項目的虛擬目錄文件下面。
案例: 通過nginx訪問上面myweb案例中的圖片
? 修改nginx.conf文件,在location中配置對靜態資源的攔截,如果是靜態資源,就交給nginx處理,使攔截靜態文件后綴名的方式。
? 重啟nginx
? 瀏覽器訪問nginx服務器,進行測試,發現圖片無法加載
? 右鍵圖片,查看圖片的地址為http://192.168.235.128/myweb/image/001.jpg,因為我們在nginx中配置了對.jpg的攔截,所以請求會交給nginx服務器進行處理。
根據ip + port等于root的原則,我們會去/opt/static/myweb目錄下找資源,所以在/opt/static下創建myweb目錄,并放入image目錄及圖片,為了和tomcat上的圖片區分,我們這里圖片的內容發生了變化。
? 瀏覽器訪問nginx訪問器,進行測試 ,圖片訪問正常,而且訪問的是nginx上的圖片
? 將nginx.conf中的location攔截方式修改為攔截靜態文件目錄的方式
? 重啟nginx服務器,通過瀏覽器訪問nginx服務器,進行測試,訪問正常,但是訪問的是tomcat服務器下的圖片
二:負載均衡
在網站創立初期,我們一般都使用單臺機器對外提供集中式服務。隨著業務量的增大,我們一臺服務器不夠用,此時就會把多臺機器組成一個集群對外提供服務,但是,我們網站對外提供的訪問入口通常只有一個,比如 www.web.com。那么當用戶在瀏覽器輸入www.web.com進行訪問的時候,如何將用戶的請求分發到集群中不同的機器上呢,這就是負載均衡要做的事情。
負載均衡通常是指將請求"均勻"分攤到集群中多個服務器節點上執行,這里的均勻是指在一個比較大的統計范圍內是基本均勻的,并不是完全均勻。
Nginx通過在nginx.conf文件進行配置即可實現負載均衡 。
配置如下:(配置2步即可)
A、 在http模塊加上upstream配置
upstream www.myweb.com {
server 127.0.0.1:9100 weight=3;
server 127.0.0.1:9200 weight=1; }
其中weight=1表示權重,用于后端服務器性能不均的情況,訪問比率約等于權重之比,權重越大訪問機會越多,upstream是配置nginx與后端服務器負載均衡非常重要的一個模塊,并且它還能對后端的服務器的健康狀態進行檢查,若后端服務器中的一臺發生故障,則前端的請求不會轉發到該故障的機器.
B、 在server模塊里添加location,并配置
proxy_pass location /myweb {
proxy_pass http://www.myweb.com;
}
其中 www.myweb.com 字符串要和 upstream 后面的字符串相等
案例:將一個項目myweb.war部署到兩臺不同的tomcat上,通過nginx實現負載均衡。
1、 在linux服務器/usr/local目錄下,拷貝兩臺新的tomcat
2、將這兩臺tomcat服務器webapps目錄下沒用的項目刪掉
3、 修改其中一臺tomcat9100的端口號為9100 ,另一臺tomcat的端口號改為9200.
4.將myweb.war上傳到兩臺tomcat服務器的webapps目錄下
6.瀏覽器直接訪問兩臺tomcat,進行測試
但是我們網站一般對外之后提供一個入口地址,所以這個時候可以使用nginx進行負載。
7、 配置nginx
? 在http模塊上加
? 在server模塊加
8、 重啟Nginx
9、 瀏覽器直接訪問nginx進行測試
三:前后端分離
Nginx的負載均衡和靜態代理結合在一起,我們可以實現動靜分離,這是實際應用中常見的一種場景。
動態資源,如jsp由tomcat或其他web服務器完成
靜態資源,如圖片、css、js等由nginx服務器完成
它們各司其職,專注于做自己擅長的事情
前后端分離充分利用了它們各自的優勢,從而達到更高效合理的架構。
架構圖
整個架構中,一個nginx負責負載均衡,兩個nginx負責靜態代理。Nginx在一臺Linux上安裝一份,可以通過不同的nginx.conf配置文件啟動多個Nginx,每個Nginx的配置文件中不一樣即可。
實現步驟
1.拷貝兩份nginx配置文件實現靜態代理
2.修改新拷貝的nginx81.conf和nginx82.conf配置文件
? Nginx81.conf端口號,因為這兩個機器只需要做靜態代理,所以刪除掉負載均衡的配置
? Nginx82.conf端口號,因為這兩個機器只需要做靜態代理,所以刪除掉負載均衡的配置
? 靜態代理的配置
3.負載均衡Nginx配置nginx.conf配置文件
A.動態資源的負載均衡
在http模塊加上upstream配置
upstream www.myweb.com {
server 127.0.0.1:9100 weight=5;
server 127.0.0.1:9200 weight=2;
}
在server模塊里添加location,并配 proxy_pass
location /myweb {
proxy_pass http://www.myweb.com;
}
B.靜態資源的負載均衡
upstream static.myweb.com {
server 127.0.0.1:81 weight=1;
server 127.0.0.1:82 weight=1;
}
location ~ .*/(css|js|img|images) {
proxy_pass http://static.myweb.com;
}
4.啟動三臺nginx服務器,啟動兩臺tomcat服務器
5.瀏覽器輸入http://192.168.235.128/myweb/進行測試
關閉掉一臺nginx靜態代理服務器
關閉掉一臺tomcat服務器
總結
以上是生活随笔為你收集整理的Nginx实现静态代理,负载均衡,前后端分离的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 发送ajax请求的四种方式
- 下一篇: Spring的AOP思想和实现AOP思想