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