校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 利用Nginx代理如何解決前端跨域問題詳析

利用Nginx代理如何解決前端跨域問題詳析

熱門標簽:山東400電話如何辦理 電銷機器人對公司貢獻 電話機器人服務(wù)差 智能外呼系統(tǒng)如何部署 高德地圖標注在建線路 蘭州語音電銷機器人軟件 ai電銷機器人 如何開發(fā) 宿州防封外呼系統(tǒng)廠家 濟源電話外呼系統(tǒng)怎么樣

前言

Nginx(發(fā)音同“engine X”)是異步框架的網(wǎng)頁服務(wù)器,也可以用作反向代理、負載平衡器和HTTP緩存。

本文將講述如何使用 Nginx 在 Web 前后端分離開發(fā)中實現(xiàn)路由的轉(zhuǎn)發(fā)。

Web 開發(fā)通常使用的是前后端分離的開發(fā)模式,即前端和后端分別進行開發(fā),前端通過 Ajax 請求后端的接口,將獲取數(shù)據(jù)將數(shù)據(jù)渲染到頁面上。前端開發(fā)會使用腳手架搭建前端開發(fā)環(huán)境,其底層通常會啟動一個本地服務(wù)器,通常使用的是 nodejs 的 Express 框架。而后端則是提供接口,一般是放在線上的一個開發(fā)用的域名下。

這在開發(fā)過程中會導(dǎo)致 跨域 問題,即在一個域名下的網(wǎng)頁,是無法通過 Ajax 請求另一個(不同源)域名下的接口 API 的。這是瀏覽器的同源策略,是瀏覽器的一個非常重要的安全策略。

解決這個問題的其中一個方案是使用 代理。具體來說,就是在本地啟動一個服務(wù)器(如 localhost:4000),發(fā)送給該服務(wù)器的請求會根據(jù)請求路由(比如判斷 url 是否有前綴 /api)進行轉(zhuǎn)發(fā),分別轉(zhuǎn)發(fā)到前端開發(fā)的服務(wù)器(如 localhost:3000),以及后端服務(wù)器(比如 dev.yoursite.com)。這樣通過一個代理服務(wù)器,因為請求的 api 都是同一個域名下的,自然就不會造成跨域問題,從而導(dǎo)致請求失敗。

下面我們就來講解如何使用 Nginx 來實現(xiàn)反向代理。

簡單認識 Nginx 配置文件

安裝好 Nginx 后,我們需要確定下 Nginx 的默認配置文件的位置。執(zhí)行命令 nginx -t,該命令會檢測 nginx 的默認配置文件語法是否正確,并進行測試,最后輸出結(jié)果。我們可以從輸出中得到默認配置文件所在的位置。

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

還有另外一種方法可以得到默認配置文件的位置,那就是執(zhí)行 nginx -h。該命令會輸出 nginx 的簡易幫助文檔,其中的 -c filename 的配置項說明也指出了默認配置項的路徑。

-c filename : set configuration file (default: /etc/nginx/nginx.conf)

通過這個文檔,我們也可以知道,使用 -c 配置項可以自定義配置文件。如果不指定文件,使用默認配置文件。

下面我們來修改一下 Nginx 到這個默認配置文件 nginx.config 來首先代理功能。

nginx.config 文件的 http 后面的代碼塊中,應(yīng)該會有類似下面這行的代碼:

include /etc/nginx/conf.d/*.conf;

這行代碼的作用是將 /etc/nginx/conf.d 目錄下的后綴為 .conf 的文件內(nèi)容嵌入到引入位置中,作為配置的一部分執(zhí)行。

如果你是在 macOS 安裝的 Nginx,可能會有點不同。我使用 brew 安裝的 Nginx 為為 include servers/*;,對應(yīng)嵌入的是 servers 目錄下的所有文件。

為什么會用到這種嵌入的語法呢?因為這樣我們就可以將不同項目需要用到的配置放到不同的配置文件里,好處就是可以快速地找到對應(yīng)項目要修改的配置文件,不用擔心不小心修改了其他項目的配置。另外如果直接在 nginx.conf 上修改,使其變得臃腫。這符合設(shè)計模式的 單一職責原則。

此外,你可以會奇怪conf.d 目錄的命名為什么要加上 .d ?如果你使用 Linux 過一段時間,你會發(fā)現(xiàn)某些目錄或文件的末尾會加上一個 d,比如 httpd、crond、vsftpd 等。其實這是為了說明這些文件都屬于是 daemon(服務(wù))。這里的服務(wù)指的是系統(tǒng)的服務(wù),主要分為系統(tǒng)本身需要的服務(wù),以及負責網(wǎng)絡(luò)的服務(wù)。我們的 conf.d 就是屬于后者。

編寫 Nginx 配置文件

我們在 conf.d 目錄下創(chuàng)建名為 demo.conf 的文件,寫入以下內(nèi)容,然后啟動 Nginx。

server {
 listen 5000;
 server_name localhost;

 location / {
 proxy_pass http://localhost:3000;
 }
 location /api/ {
 proxy_pass http://localhost:4000;
 }
}

該配置啟用了 localhost:5000 的服務(wù)器,將 localhost:5000 下開頭為 /api/ url 請求代理到了 localhost:4000(后端接口服務(wù)器)。其他請求則是代理到 localhost:3000(前端)。下面我們具體解析一下配置文件里面內(nèi)容的作用。

listen 設(shè)置了服務(wù)器的端口號,server_name 則設(shè)置了主機名。

location

location 表示進行路由的匹配,如果匹配則執(zhí)行對應(yīng)代碼塊里的操作。location 可以使用 前綴匹配 以及 正則匹配(需要以 ~* 或 ~ 開頭)。我們這里的配置使用的是前綴匹配。

這里有個點需要注意一下,Nginx 的路由匹配和一般的按順序匹配第一個的路由匹配方案(比如后端的 gin、前端的 vue-router 的路由匹配方案)不同,nginx 匹配路由的方式為:

  1. 首先進行前綴匹配,遍歷所有的前綴匹配,從中選擇前綴匹配最長的;
  2. 然后會進行正則匹配,在所有正則匹配中,從前往后選擇第一個符合的;
  3. 如果能找到匹配的正則匹配,使用其對應(yīng)的配置;如果沒有,則使用之前找到的那個最長的前綴匹配對應(yīng)的配置。

所以,當請求為 localhost:5000/api/xx 時, / 和 /api/ 都能夠前綴匹配。根據(jù)規(guī)則,雖然位置更靠前的 / 也符合前綴匹配,但 /api 更長,所以最終匹配的是 /api。

proxy_pass

確定好匹配的 location 后,我們再看看 proxy_pass 又做了什么操作。proxy_pass 用于將請求路由映射到指定的協(xié)議和地址。本質(zhì)是將發(fā)送給 Nginx 的請求處理并發(fā)送到另一個服務(wù)器,然后將返回的數(shù)據(jù)作為 Nginx的返回數(shù)據(jù)返回。

proxy_pass 后如果使用的是 URI(端口后面至少有一個 /),那么 Nginx 就會 替換 掉 location 匹配的那部分字符。

listen 5000;
server_name localhost;
location /name/ {
 proxy_pass http://127.0.0.1/remote/; 
}
# localhost:5000/name/fstar
# 會被映射請求為
# 127.0.0.1/remote/fstar

可以看到,/name/ 的部分在映射時被移除(或者說是替換)了。

proxy_pass 后如果使用的是不是 URI(端口后沒有任何東西),Nginx 會將源請求完全映射到代理服務(wù)上:

listen 5000;
server_name localhost;
location /some/path/ {
 proxy_pass http://127.0.0.1;
}

# localhost:5000/some/path/x/y
# 會被映射請求為
# 127.0.0.1/some/path/x/y

這里的 /some/path 并沒有被移除。

我們的 demo.conf 文件的 proxy_pass 使用的不是 URI,所以是將路由完全映射到另一個服務(wù)。

思考題

請問,下面有兩段配置(區(qū)別是 proxy_pass 結(jié)尾是否有 /)?如果請求 /kite/api/xx,分別會映射為什么?

location /kite/api/ {
 proxy_pass http://localhost:5000;
}
location /kite/api/ {
 proxy_pass http://localhost:5000/;
}

前面我們講 proxy_pass 的時候說過,proxy_pass 后面如果不是 URI,會正常轉(zhuǎn)發(fā);如果是 URI,就移除 location 匹配的前綴再進行轉(zhuǎn)發(fā),體現(xiàn)的是替換路由的效果。上面這兩個配置的區(qū)別就在于末尾的這個 /,有 / 是 URI,沒有的不是 URI,從而導(dǎo)致完全不一樣的結(jié)果,依次分別為:

http://localhost:5000/kite/api/xx
http://localhost:5000/xx

所以,在寫 Nginx 配置的時候,一定要注意端口后面的 / 是否有必要保留。因為它的有無會導(dǎo)致兩種截然不同的效果。

參考文章

  • Nginx 官方文檔
  • stackoverflow - How do I rewrite URLs in a proxy response in NGINX

總結(jié)

到此這篇關(guān)于利用Nginx代理如何解決前端跨域問題的文章就介紹到這了,更多相關(guān)Nginx代理解決前端跨域內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

標簽:南寧 安陽 云南 晉中 佛山 巴中 衡水 畢節(jié)

巨人網(wǎng)絡(luò)通訊聲明:本文標題《利用Nginx代理如何解決前端跨域問題詳析》,本文關(guān)鍵詞  利用,Nginx,代理,如何,解決,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《利用Nginx代理如何解決前端跨域問題詳析》相關(guān)的同類信息!
  • 本頁收集關(guān)于利用Nginx代理如何解決前端跨域問題詳析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    国产午夜精品一区二区三区视频 | 精品国一区二区三区| 在线不卡中文字幕播放| 7777精品伊人久久久大香线蕉| 欧美日韩国产首页| 久久久久青草大香线综合精品| 亚洲国产高清aⅴ视频| 亚洲国产色一区| 国产精品中文字幕日韩精品| 91蜜桃在线观看| 精品国精品自拍自在线| 中文字幕亚洲一区二区av在线| 麻豆精品一二三| 欧美美女一区二区三区| 91网站在线观看视频| 国产精品1024| 国产一区二区三区视频在线播放| 亚洲欧美日韩在线播放| 亚洲国产一区二区三区| 亚洲欧洲成人精品av97| 亚洲一区二区三区中文字幕| 久久69国产一区二区蜜臀| 99re8在线精品视频免费播放| 欧美日韩在线三级| 中文字幕日韩精品一区| 首页国产欧美日韩丝袜| 成人a级免费电影| 久久久精品2019中文字幕之3| 天天色 色综合| 欧美日韩小视频| 亚洲人成电影网站色mp4| 成人一区二区三区视频在线观看| 91精品国产高清一区二区三区蜜臀| 久久精品视频一区二区| 亚洲第一在线综合网站| 欧美性一二三区| 亚洲天堂2014| 不卡欧美aaaaa| 亚洲免费资源在线播放| 91一区二区三区在线观看| 亚洲欧美另类在线| 91视频国产资源| 亚洲一区视频在线观看视频| 91成人在线观看喷潮| 亚洲国产精品久久久男人的天堂| 91麻豆成人久久精品二区三区| ...xxx性欧美| 欧美男生操女生| 韩国av一区二区三区四区| 精品盗摄一区二区三区| 国产成人鲁色资源国产91色综| 国产日本欧洲亚洲| 欧美性猛片aaaaaaa做受| 亚洲18女电影在线观看| 亚洲精品一区二区三区精华液| 国产乱子轮精品视频| 亚洲啪啪综合av一区二区三区| 欧美日韩一区二区三区在线看| 日本亚洲天堂网| 国产精品青草久久| 在线综合+亚洲+欧美中文字幕| 国产成人av电影在线播放| 亚洲黄色录像片| 国产欧美精品国产国产专区| 欧美日韩在线综合| aa级大片欧美| 国产乱人伦偷精品视频免下载| 亚洲日本欧美天堂| 欧美国产日韩在线观看| 欧美一区二区播放| 欧美日韩国产综合一区二区三区| 韩国成人精品a∨在线观看| 午夜欧美电影在线观看| 亚洲精品国产精品乱码不99| 久久精品日韩一区二区三区| 91精品国产色综合久久不卡蜜臀| 色综合色综合色综合| 国产美女主播视频一区| 青青青伊人色综合久久| 亚洲国产成人tv| 亚洲大片在线观看| 亚洲一区电影777| 亚洲视频一二区| 一区二区三区在线影院| 亚洲乱码精品一二三四区日韩在线 | 国产美女精品人人做人人爽 | 91国产福利在线| 色香蕉成人二区免费| 日本韩国欧美一区二区三区| 91浏览器打开| 91视频com| 91在线视频观看| 欧美国产精品一区二区三区| 香蕉影视欧美成人| 久久精品av麻豆的观看方式| 国产成人av电影在线观看| 在线观看视频欧美| 欧美va在线播放| 性欧美大战久久久久久久久| 粉嫩久久99精品久久久久久夜| 欧美一区二区三区的| 午夜天堂影视香蕉久久| 欧美优质美女网站| 洋洋成人永久网站入口| 色吊一区二区三区| 亚洲一区二区影院| 欧洲人成人精品| 成人欧美一区二区三区视频网页| 免费观看在线综合| 日韩一二三区视频| 日韩精品一区第一页| 欧美欧美欧美欧美| 亚洲夂夂婷婷色拍ww47 | 国产精品剧情在线亚洲| 日日欢夜夜爽一区| 色噜噜狠狠成人网p站| jlzzjlzz国产精品久久| 欧美精品视频www在线观看| 亚洲欧美日韩系列| 成人激情开心网| 久久久国产午夜精品| 国产一区二区三区| 久久久久久久久久电影| 国产一区二区三区电影在线观看| 久久女同互慰一区二区三区| 99久久久精品| 国产欧美日韩亚州综合| 99久精品国产| 日韩精品高清不卡| 国产婷婷色一区二区三区四区| 国产91丝袜在线18| 亚洲福利一区二区三区| 在线成人av网站| 大尺度一区二区| 亚洲国产另类av| 日韩一卡二卡三卡四卡| 不卡视频免费播放| 一区二区三区不卡在线观看| 欧美久久久久久久久| 国产精品18久久久久| 亚洲成人在线观看视频| 久久精品人人做| 欧美日韩免费高清一区色橹橹 | 国产女主播视频一区二区| 99国产欧美久久久精品| 久久精品国内一区二区三区 | 国模娜娜一区二区三区| 亚洲第一电影网| 中文字幕一区二区三区蜜月| 久久精品一区四区| 国产精品久久福利| 国产精品二三区| 亚洲国产日韩a在线播放| 亚洲成国产人片在线观看| 婷婷开心激情综合| 亚洲香蕉伊在人在线观| 1024国产精品| 一区二区三区四区精品在线视频| 国产日韩欧美亚洲| 欧美激情一区在线观看| 久久久99久久精品欧美| 国产三级精品在线| 国产精品美女一区二区| 成人免费在线观看入口| 亚洲精品水蜜桃| 亚洲激情校园春色| 亚洲午夜精品久久久久久久久| 亚洲精品久久久蜜桃| 亚洲成人先锋电影| 日韩av中文字幕一区二区三区| 久久精品国产精品亚洲精品| 蜜臀久久久久久久| 国产一区二区三区四| 东方aⅴ免费观看久久av| 99re在线视频这里只有精品| 97久久精品人人爽人人爽蜜臀| 久久嫩草精品久久久精品一| 久久精品一区二区三区不卡 | 亚洲男人的天堂在线aⅴ视频| 亚洲欧美日韩精品久久久久| 精品无人区卡一卡二卡三乱码免费卡 | 成人sese在线| 欧美一区二区女人| 亚洲猫色日本管| 国产成a人亚洲| 日韩精品中午字幕| 欧美午夜精品久久久| 国产老妇另类xxxxx| 日本欧美久久久久免费播放网| 欧美撒尿777hd撒尿| 成人app网站| 国产又粗又猛又爽又黄91精品| 亚洲成人你懂的| 一区二区三区视频在线观看| 国产欧美日韩久久| 久久精品亚洲精品国产欧美kt∨| 亚洲黄色av一区| 欧美美女网站色| 亚洲国产乱码最新视频 | 成人午夜视频免费看|