歡迎訪問我的博客,同步更新: 楓山別院
1进肯、代理和代理服務(wù)器
什么是代理呢激蹲,代理其實(shí)就是一個(gè)中介,可以舉一個(gè)生活中的例子江掩。很早以前学辱,我們要買一件衣服,可能需要去衣店环形;買一雙鞋子要去一個(gè)鞋店策泣;買書去書店。然后抬吟,網(wǎng)上商城誕生了萨咕,我們買衣服,買鞋火本,買書危队,都可以在網(wǎng)上商城買。商城去采購的衣服鞋子和書钙畔,然后賣給了我們茫陆,商城相當(dāng)于一個(gè)中介。代理服務(wù)器就是商城的角色擎析,以前我們可能需要訪問這個(gè)服務(wù)簿盅,那個(gè)服務(wù),現(xiàn)在我們?cè)L問代理服務(wù)器就能拿到這些服務(wù)數(shù)據(jù)叔锐,因?yàn)榇矸?wù)器去拿了這些數(shù)據(jù)轉(zhuǎn)發(fā)給了我們挪鹏。
2、正向代理與反向代理的區(qū)別
要弄明白正向還是反向愉烙,首先要弄清楚自己當(dāng)前的定位或者說場景
-
正向代理的常見場景
如果現(xiàn)在我是一個(gè)局域網(wǎng)中的用戶讨盒,我想訪問互聯(lián)網(wǎng)上的資源,通常為了局域網(wǎng)安全性和上網(wǎng)管理步责,我們可以通過代理服務(wù)器來上網(wǎng)返顺。那么我對(duì)自己的定位就是我是獲取資源的,代理服務(wù)器就是正向代理服務(wù)器蔓肯。正向代理服務(wù)器不支持外部訪問內(nèi)部僵刮。簡單說摔踱,我們的角色是客戶端戳气,目的是訪問外部資源甫题,正向代理服務(wù)器是讓局域網(wǎng)用戶接入外網(wǎng)的站點(diǎn)。
-
反向代理的常見場景
如果我現(xiàn)在是一個(gè)服務(wù)器,我對(duì)互聯(lián)網(wǎng)上的用戶提供服務(wù)舟陆,通常我們可以通過代理服務(wù)器來我這里拿到資源之后误澳,轉(zhuǎn)發(fā)給互聯(lián)網(wǎng)的用戶。那么我對(duì)自己的定位就是秦躯,我是提供資源的忆谓,代理服務(wù)器就是反向代理服務(wù)器。簡單說踱承,我們的角色是站點(diǎn)倡缠,目的是為外網(wǎng)用戶提供服務(wù),反向代理服務(wù)器將外網(wǎng)的用戶接入到局域網(wǎng)的站點(diǎn)茎活。
3昙沦、反向代理的簡單配置
首先,先上一段配置妙色,后面一一講解
server{
listen 80;
server_name 10.0.88.188;
location /mgmt {
proxy_pass http://172.16.7.20:8081;
}
location /center {
proxy_pass http://172.16.7.20:8080;
}
location / {
proxy_pass http://172.16.7.20:8082;
}
}
- server
第一個(gè)是server{}塊桅滋,這個(gè)是放在http{}塊中的慧耍,用于指定一組代理規(guī)則身辨,http{}塊中可以有多個(gè)server{}塊。
- listen
listen 命令是配置監(jiān)聽的端口芍碧,例如80
- server_name
server_name 配置的是IP地址或者是域名
- location
location 命令配置的是攔截的路徑煌珊,例如配置了/mgmt,如果訪問http://10.0.88.188/mgmt或者http://10.0.88.188/mgmt/xxxxx泌豆,就會(huì)匹配到這條規(guī)則定庵,然后就會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到proxy_pass指定的服務(wù)器上。location一般可以配置為一組服務(wù)中公有的一個(gè)路徑踪危,例如配置項(xiàng)目名稱蔬浙,這樣就可以代理到項(xiàng)目的所有服務(wù)。如果有下面一段配置
location /center {
proxy_pass http://172.16.7.20:8080;
}
location /center/a {
proxy_pass http://172.16.7.20:8081;
}
這種情況下贞远,如果訪問http://10.0.88.188/center/a畴博,nginx會(huì)找到匹配度最高的一個(gè)來轉(zhuǎn)發(fā),即/center/a
- proxy_pass
proxy_pass 命令配置的是目的服務(wù)器蓝仲,被攔截的請(qǐng)求會(huì)轉(zhuǎn)發(fā)到該服務(wù)器上俱病。這個(gè)地方有故事了,如果這個(gè)地方配置的URL包含URI("/")的話袱结,location 后面配置的路徑會(huì)被替換亮隙。
舉個(gè)例子
location /center {
#配置1 proxy_pass http://172.16.7.20:8080;
#配置2 proxy_pass http://172.16.7.20:8080/;
#配置3 proxy_pass http://172.16.7.20:8080/xxx;
}
配置1的URL后面有沒有/,那么最終轉(zhuǎn)發(fā)的地址是http://172.16.7.20:8080/center
配置2的URL后面有/垢夹,也就是包含URI溢吻,那么location配置的路徑會(huì)被替換,最終轉(zhuǎn)發(fā)的地址是http://172.16.7.20:8080/
配置3其實(shí)跟配置2是一樣的果元,最終轉(zhuǎn)發(fā)的地址是http://172.16.7.20:8080/xxx
Tips
通過配置反向代理促王,可以解決JS跨域問題掩完。
舉例:
js本地是http://10.0.0.8,現(xiàn)在需要js需要去http://10.0.0.9/center/order上拿數(shù)據(jù)硼砰,這就會(huì)跨域且蓬,可以使用nginx將跨域的服務(wù)轉(zhuǎn)化成本地的服務(wù),如下:
server{
listen 80;
server_name 10.0.0.8;
location /center {
proxy_pass http://10.0.0.9;
}
}
現(xiàn)在訪問http://10.0.0.8/center/order即可题翰,這就不會(huì)跨域了恶阴。
4、負(fù)載均衡
有時(shí)候豹障,我們的服務(wù)并不是一個(gè)單點(diǎn)的服務(wù)冯事,而是一個(gè)多節(jié)點(diǎn)的,這個(gè)時(shí)候應(yīng)該怎么配置呢血公,OK昵仅,定義一個(gè)服務(wù)器組,名字是backend:
upstream backend{
server 10.0.6.6:8080;
server 10.0.6.7:8080;
server 10.0.6.8:8080;
}
upstream命令是放在http{}塊中的累魔,可以配置多個(gè)摔笤,它定義了一組相同的服務(wù),默認(rèn)是輪訓(xùn)訪問的垦写,也就是說默認(rèn)的權(quán)重(weight)都是1吕世。然后用這個(gè)組替換proxy_pass原來的地址,比如:
proxy_pass http://backend;
這個(gè)時(shí)候梯投,請(qǐng)求會(huì)被轉(zhuǎn)發(fā)到一個(gè)服務(wù)組命辖。
我們也可以自己設(shè)置想要的權(quán)重,比如說分蓖,性能好一點(diǎn)的服務(wù)器尔艇,多處理一些請(qǐng)求,配置如下:
upstream backend{
server 10.0.6.6:8080 weight=5;
server 10.0.6.7:8080 weight=2;
server 10.0.6.8:8080 weight=1;
}
這個(gè)時(shí)候么鹤,6.6的服務(wù)器會(huì)分到大約八分之五的請(qǐng)求终娃,6.7大約是四分之一,6.8大約是八分之一午磁。
今日強(qiáng)心劑
成功來源于不斷的嘗試
轉(zhuǎn)載請(qǐng)注明出處尝抖,謝謝!