摘要:原文鏈接反向代理是什么放兩個(gè)神圖,圖片來自這里。反向代理是代理你的目標(biāo)服務(wù)器,請求目標(biāo)服務(wù)器的代理,做一些處理后再真正請求。在這篇文章里,反向代理用于處理跨域問題。
原文鏈接:https://ssshooter.com/2019-05...
反向代理是什么放兩個(gè)神圖,圖片來自這里。
這是正向代理
這是反向代理
正向代理是你發(fā)出請求的時(shí)候先經(jīng)過代理服務(wù)器,所以實(shí)際上發(fā)出請求的是代理服務(wù)器。
反向代理是“代理你的目標(biāo)服務(wù)器”,請求目標(biāo)服務(wù)器的代理,做一些處理后再真正請求。
在這篇文章里,反向代理用于處理跨域問題。
測試環(huán)境的跨域module.exports = { publicPath: "/", devServer: { proxy: { "/wiki": { target: "http://xxx.com.cn", // 代理到的目標(biāo)地址 pathRewrite: { "^/wiki": "" }, // 重寫部分路徑 ws: true, // 是否代理 websockets changeOrigin: true, }, }, }, }
我們神奇的 webpack 有一個(gè)可以幫你實(shí)現(xiàn)測試跨域的插件,相信大家都比較熟悉,本質(zhì)上這個(gè)插件的功能來自 http-proxy-middleware。
* 關(guān)于 changeOrigin:這個(gè)選項(xiàng)的作用真的看不懂(下面是源碼),看代碼貌似是改變 headers 的 host 字段,但是實(shí)際上我修改成 true 和 false 測試,請求頭好像并沒有變化。但是以前的一個(gè)項(xiàng)目中有一個(gè)情況是必須把這個(gè)選項(xiàng)設(shè)定為 true 才能正??缬?,所以保險(xiǎn)起見設(shè) true。這個(gè)問題先放下吧,或者大家知道的話在評論區(qū)留言指導(dǎo)一下 OTL。
// 附源碼 if (options.changeOrigin) { outgoing.headers.host = required(outgoing.port, options[forward || "target"].protocol) && !hasPort(outgoing.host) ? outgoing.host + ":" + outgoing.port : outgoing.host }
按照上面的配置啟動(dòng)測試環(huán)境之后,直接在瀏覽器輸入 http://localhost/wiki/rest/api/2/user/picker 就等于訪問 http://xxx.com.cn/rest/api/2/user/picker。
在 nginx 配置聯(lián)動(dòng)一下之前的普通地址配置。
在這次要做的配置甚至沒有上次相對位置的理解難,寫法都跟 node 的配置差不多,只需要兩句:
location /wiki/ { rewrite ^/wiki/(.*)$ /$1 break; proxy_pass http://xxx.com.cn; }
rewrite 的語法是(來自文檔):rewrite regex replacement [flag];
所以上面的效果是匹配 ^/wiki/(.*)$ 然后替換為 / 加匹配到的后面括號后的分塊。
按照上面的配置,重啟 nginx ./nginx -s reload,直接在瀏覽器輸入 http://localhost/wiki/rest/api/2/user/picker 就等于訪問 http://xxx.com.cn/rest/api/2/user/picker 啦。
附加的正則小知識其實(shí) $1 在 JavaScript 的正則里也能使用:
let reg = /^/wiki/(.*)$/ "/wiki/2111edqd".replace(reg, "$1") // => 2111edqd
在這里,括號的作用就是用于匹配一個(gè)分塊。作為對比再舉一個(gè)例子:
let reg = /^/wiki/(.*)$/ let reg2 = /^/wiki/.*$/ // 其實(shí)不用括號也完全可以匹配你需要的字符串 // 但是在 match 的時(shí)候你就能看到區(qū)別 "/wiki/2111edqd".match(reg) // 輸出 ["/wiki/2111edqd", "2111edqd", index: 0, input: "/wiki/2111edqd", groups: undefined] "/wiki/2111edqd".match(reg2) // 輸出 ["/wiki/2111edqd", index: 0, input: "/wiki/2111edqd", groups: undefined]
reg 輸出的數(shù)組的第二個(gè)參數(shù)就是所謂的 $1,如果后面還有其他括號分組就會有 $2、$3,但是不加括號就不存在這個(gè)東西。
再會文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/104293.html
摘要:三反向代理解決的原理將安裝在本地,然后將項(xiàng)目部署于下,這樣訪問本地項(xiàng)目時(shí)用本地項(xiàng)目即可訪問。這樣瀏覽器之間的請求完全滿足瀏覽器域名協(xié)議端口相同的同源策略,可在不改變后臺接口的情況下避免跨域問題。 一、問題背景說明: 編寫移動(dòng)前端頁面時(shí)需要訪問后臺系統(tǒng)接口。前端項(xiàng)目在本地(個(gè)人辦公電腦)開發(fā),后臺接口存放后生產(chǎn)的后臺服務(wù)器,本地的ajax請求無法直接訪問后臺接口,也就是遇到了跨域問題...
摘要:三反向代理解決的原理將安裝在本地,然后將項(xiàng)目部署于下,這樣訪問本地項(xiàng)目時(shí)用本地項(xiàng)目即可訪問。這樣瀏覽器之間的請求完全滿足瀏覽器域名協(xié)議端口相同的同源策略,可在不改變后臺接口的情況下避免跨域問題。 一、問題背景說明: 編寫移動(dòng)前端頁面時(shí)需要訪問后臺系統(tǒng)接口。前端項(xiàng)目在本地(個(gè)人辦公電腦)開發(fā),后臺接口存放后生產(chǎn)的后臺服務(wù)器,本地的ajax請求無法直接訪問后臺接口,也就是遇到了跨域問題...
摘要:反向代理服務(wù)器對于客戶端而言它就像是原始服務(wù)器,并且客戶端不需要進(jìn)行任何特別的設(shè)置。使用反向代理可能訪問網(wǎng)頁相對于之前響應(yīng)會比較慢 標(biāo)簽: Nginx,跨域 問題 在之前的分享的跨域資源共享的文章中,有提到要注意跨域時(shí),如果要發(fā)送Cookie,Access-Control-Allow-Origin就不能設(shè)為*,必須指定明確的、與請求網(wǎng)頁一致的域名。在此次項(xiàng)目開發(fā)中與他人協(xié)作中就遇到...
摘要:反向代理服務(wù)器對于客戶端而言它就像是原始服務(wù)器,并且客戶端不需要進(jìn)行任何特別的設(shè)置。使用反向代理可能訪問網(wǎng)頁相對于之前響應(yīng)會比較慢 標(biāo)簽: Nginx,跨域 問題 在之前的分享的跨域資源共享的文章中,有提到要注意跨域時(shí),如果要發(fā)送Cookie,Access-Control-Allow-Origin就不能設(shè)為*,必須指定明確的、與請求網(wǎng)頁一致的域名。在此次項(xiàng)目開發(fā)中與他人協(xié)作中就遇到...
閱讀 3448·2019-08-30 15:55
閱讀 2050·2019-08-30 15:44
閱讀 1453·2019-08-30 12:47
閱讀 740·2019-08-30 11:05
閱讀 1629·2019-08-30 10:54
閱讀 654·2019-08-29 16:07
閱讀 3566·2019-08-29 14:17
閱讀 2221·2019-08-23 18:31