摘要:反向代理要說反向代理,我們就先要理解正向代理下面我們就談談正向代理和反向代理吧。客戶端才能使用正向代理。反向代理總結就一句話代理端代理的是服務端。因此,動態資源轉發到服務器我們就使用到了前面講到的反向代理了。
反向代理
要說反向代理,我們就先要理解正向代理 ,下面我們就談談正向代理和反向代理吧。
正向代理
一個位于客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求并指定目標(原始服務器),然后代理向原始服務器轉交請求并將獲得的內容返回給客戶端??蛻舳瞬拍苁褂谜虼?。(摘自百度百科)
如下圖:
正向代理
正向代理好比,你去找工作,首先你不知道哪里有工作,但是你可以把你的要求信息告訴別人,這時別人知道你想找什么樣的工作了。他就幫你問,然后又合適的工作后,別人告訴你這里有符合你要求的工作,你就可以去試試了。
正向代理總結就一句話:代理端代理的是客戶端。
反向代理
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。(摘自百度百科)
如下圖:
反向代理
反向代理好比,你去超市或者購物中心購物,超市、購物中心就好比一個代理。你只關心你去超市、購物中心購買你想買的商品,具體商品從哪里來你并不關心。但是超市本沒有商品,所以超市、購物中心自身去進貨,這個過程你并不知道,沒有感知。這時代理端代理的是超市、購物中心,你并看不到供貨商。
反向代理總結就一句話:代理端代理的是服務端。
下面我們就來看看nginx的反向代理如何做了
反向代理前后如圖:
反向代理前后
nginx反向代理其實主要通過配置proxy_pass參數即可代理到某個服務器
vim /usr/local/nginx/conf/nginx.conf
添加如下配置即可:
location / { //在對應的 location 中配置,配置中的監聽端口為80
proxy_pass http://127.0.0.1:8080 }
啟動`tomcat`、`nginx`,`/usr/local/nginx/sbin/nginx` 瀏覽器訪問,`http://192.168.58.149` 如下圖所示: ![nginx代理tomcat](http://upload-images.jianshu.io/upload_images/1972470-fc3a1fcd34f28d73.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 但是當我們訪問`http://192.168.58.149/demo.jsp`,如下圖: `demo.jsp`,將demo.jsp拷貝到`tomcat`中`ROOT`下,中代碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
![nginxip](http://upload-images.jianshu.io/upload_images/1972470-7641158585cdc833.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 我們得到的是`nginx`代理服務器的`ip`,但是我們并不想要代理服務器的ip,我們想要的是客戶端真實的訪問ip,因此我們可以通過`nginx`中獲取真實`ip`,然后傳給真實服務器。 同樣,我們需要到`nginx.conf`中配置,如下:`proxy_set_header real_ip $remote_addr;`
location / {
#設置真實ip proxy_set_header real_ip $remote_addr; //real_ip 設置變量名,可以通過web端獲取 proxy_pass http://127.0.0.1:8080;//代理8080端口的tomcat服務器 }
同時,demo.jsp頁面中打開remote ip is: <%=request.getHeader("real_ip") %>
接下來,重啟nginx,訪問瀏覽器
/usr/local/nginx/sbin/nginx -s reload
如圖:
nginx真實ip
反向代理到這里就完畢了,接下來就說說動靜分離吧
動靜分離
動靜分離是讓動態網站里的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以后,我們就可以根據靜態資源的特點將其做緩存操作,這就是網站靜態化處理的核心思路(摘自夏天的森林的博客)。
動靜分離簡單的概括是:動態文件與靜態文件的分離。
為什么要做動靜分離?
在我們的軟件開發中,有些請求是需要后臺處理的(如:.jsp,.do等等),有些請求是不需要經過后臺處理的(如:css、html、jpg、js等等文件),這些不需要經過后臺處理的文件稱為靜態文件,否則動態文件。因此我們后臺處理忽略靜態文件。這會有人又說那我后臺忽略靜態文件不就完了嗎。當然這是可以的,但是這樣后臺的請求次數就明顯增多了。在我們對資源的響應速度有要求的時候,我們應該使用這種動靜分離的策略去解決。
動靜分離將網站靜態資源(HTML,JavaScript,CSS,img等文件)與后臺應用分開部署,提高用戶訪問靜態代碼的速度,降低對后臺應用訪問。這里我們將靜態資源放到nginx中,動態資源轉發到tomcat服務器中。
因此,動態資源轉發到tomcat服務器我們就使用到了前面講到的反向代理了。
動靜分離的原理很簡單,通過location對請求url進行匹配即可,具體配置如下:
vim /usr/local/nginx/conf/nginx.conf
//動態資源
location ~ .(jsp|jspx|do|action)(/.*)?$ { //動態請求轉發到tomcat服務器,匹配方式可自定義
#設置真實ip proxy_set_header real_ip $remote_addr; //real_ip 設置變量名,可以通過web端獲取 proxy_pass http://127.0.0.1:8080; }
//靜態資源
location ~ .*.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { //靜態資源到nginx服務器下static(具體目錄自定義)獲取
root static; }
在nginx下創建static文件夾
mkdir /usr/local/nginx/static,并且拷貝1.png到static下
啟動tomcat、nginx,訪問http://192.168.58.149/1.png和...://192.168.58.149/demo.jsp,如圖:
靜態資源:
靜態資源
動態資源:
動態資源
動靜分離也結束啦,趕緊去試試吧!
負載均衡
負載均主要衡解決網絡擁塞問題,提高服務器響應速度,服務就近提供,達到更好的訪問質量,減少后臺服務器大并發壓力。主要根據算法策略將請求分攤到多臺后臺服務器處理。我們以weight(權重)策略為例:
負載均衡
nginx實現負載均衡主要通過upstream,以兩個tomcat服務器為例:192.168.58.149:8080 和 192.168.58.150:8080
nginx.conf配置如下:
在 http 下配置:
upstream balance { #weight 值越大,負載權重越大,請求次數越多 #max_fails 允許請求失敗的次數,超過失敗次數后,轉發到下一個服務器,當有max_fails個請求失敗,就表示后端的服務器不可用,默認為1,將其設置為0可以關閉檢查 #fail_timeout 指定時間內無響應則失敗, 在以后的fail_timeout時間內nginx不會再把請求發往已檢查出標記為不可用的服務器 #down 表示當前server不參與負載 #backup 其他非backup server都忙的時候,backup server作為備用服務器,將請求轉發到backup服務器 server 192.168.58.149:8080 weight=1 max_fails=2 fail_timeout=30s; server 192.168.58.150:8080 weight=1 max_fails=2 fail_timeout=30s; server 192.168.58.151:8080 down; #server 192.168.58.152:8080 backup; } location / { #設置真實ip proxy_set_header real_ip $remote_addr; #real_ip 設置變量名,可以通過web端獲取 proxy_pass http://balance;//配置上面添加的負載服務器 }
注意upstream和server為同級
啟動149的tomcat、150的tomcat、nginx,訪問瀏覽器試試吧:
連續訪問兩次效果圖如下:
第一次:
149tomcat
第二次:
150tomcat
除了上面提到的weight權重策略,還有ip_hash、url_hash哈希策略,后續有時間再補上吧。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39856.html
摘要:缺點客戶端可能會再用一層代理三緩存服務理解緩存類型配置語法協議等域名請求參數清理指定緩存讓部分頁面不緩存大文件分片請求四動靜分離參考視頻資料入門到實踐不管是運維還是開發都是你的必備技能下一篇基于的中間件架構三規則和讀取地域信息模塊服務 上一篇:基于Nginx的中間件架構(一):配置語法、Nginx模塊、請求限制和訪問控制、靜態WEB服務 一、代理服務(理解) 代理 - 代為辦理(如代...
摘要:負載均衡是通過后端引入一個負載均衡器和至少一個額外的服務器來緩解這類問題增加的服務器和原本的服務器提供相同的內容。負載均衡不需要前端進行配置,主要是服務端進行配置,前端稍作了解即可。 Nginx主要功能 負載均衡 反向代理 動靜分離 配置https 負載均衡 負載均衡是一門計算機網絡技術,主要用來優化資源使用、最大化吞吐率、最小化響應時間、同時避免過載的目的。如果一個網站只有一臺服...
摘要:簡單而言就是當有臺或以上服務器時,根據規則隨機的將請求分發到指定的服務器上處理,負載均衡配置一般都需要同時配置反向代理,通過反向代理跳轉到負載均衡。而目前支持自帶種負載均衡策略,還有種常用的第三方策略??蛻舳瞬拍苁褂谜虼?。 Nginx能做什么 反向代理 負載均衡 HTTP服務器(包含動靜分離) 正向代理以上就是我了解到的Nginx在不依賴第三方模塊能處理的事情,下面詳細說明每種功...
閱讀 1639·2023-04-25 20:36
閱讀 2048·2021-09-02 15:11
閱讀 1176·2021-08-27 13:13
閱讀 2653·2019-08-30 15:52
閱讀 4586·2019-08-29 17:13
閱讀 1001·2019-08-29 11:09
閱讀 1490·2019-08-26 11:51
閱讀 833·2019-08-26 10:56