亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

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

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

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

前言

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

本文將講述如何使用 Nginx 在 Web 前后端分離開發中實現路由的轉發。

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

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

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

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

簡單認識 Nginx 配置文件

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

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

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

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

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

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

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

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

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

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

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

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

編寫 Nginx 配置文件

我們在 conf.d 目錄下創建名為 demo.conf 的文件,寫入以下內容,然后啟動 Nginx。

server {
 listen 5000;
 server_name localhost;

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

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

listen 設置了服務器的端口號,server_name 則設置了主機名。

location

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

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

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

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

proxy_pass

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

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 會將源請求完全映射到代理服務上:

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,所以是將路由完全映射到另一個服務。

思考題

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

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

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

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

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

參考文章

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

總結

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

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

巨人網絡通訊聲明:本文標題《利用Nginx代理如何解決前端跨域問題詳析》,本文關鍵詞  利用,Nginx,代理,如何,解決,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《利用Nginx代理如何解決前端跨域問題詳析》相關的同類信息!
  • 本頁收集關于利用Nginx代理如何解決前端跨域問題詳析的相關信息資訊供網民參考!
  • 推薦文章
    欧美日本免费| 精品久久久久久中文字幕2017| 亚洲爆爽| 国产亚洲男人的天堂在线观看| 免费的黄视频| 国产原创视频在线| 黄色福利| 日韩中文字幕一区| 久久99中文字幕| 一本伊大人香蕉高清在线观看| 国产视频一区二区三区四区| 国产视频一区二区三区四区| 久久久成人网| 四虎论坛| 国产一区二区高清视频| 黄视频网站在线免费观看| 免费国产在线观看| 日韩一级黄色| 99色视频在线观看| 日日日夜夜操| 国产一区二区福利久久| 美女免费精品视频在线观看| 欧美一区二区三区在线观看 | 可以免费看污视频的网站| 午夜久久网| 日韩中文字幕在线观看视频| 国产高清在线精品一区二区| 青青青草视频在线观看| 四虎影视久久久| 欧美日本韩国| 99热热久久| 免费国产在线观看| 日韩中文字幕一区| 国产视频一区二区在线播放| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 91麻豆精品国产自产在线观看一区| 欧美另类videosbestsex| 国产精品自拍在线| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 成人免费观看视频| 日韩在线观看免费完整版视频| 日本伦理片网站| 青青久久精品| 毛片成人永久免费视频| 99久久网站| 国产一区二区精品| 亚洲 激情| 99色视频在线| 国产91视频网| 亚洲精品影院| 黄视频网站在线免费观看| 天天做人人爱夜夜爽2020毛片| 国产不卡精品一区二区三区| 午夜在线观看视频免费 成人| 日韩在线观看视频免费| 久久国产精品永久免费网站| 国产麻豆精品hdvideoss| 久久福利影视| a级毛片免费观看网站| 99热精品一区| 日本伦理片网站| 成人影院一区二区三区| 欧美电影免费看大全| 成人a级高清视频在线观看| 黄色福利| 久久久久久久免费视频| 日韩中文字幕在线播放| 韩国三级香港三级日本三级| 欧美一级视频免费观看| 国产91素人搭讪系列天堂| 四虎影视库| 色综合久久天天综线观看| 精品视频在线观看视频免费视频| 日本特黄一级| 日韩av片免费播放| 精品久久久久久中文字幕一区| 99久久网站| 黄视频网站在线看| 国产网站麻豆精品视频| 国产伦精品一区三区视频| 国产成a人片在线观看视频| 久久精品大片| 国产91丝袜在线播放0| 国产91精品一区二区| 日日日夜夜操| 欧美激情在线精品video| 国产一区二区精品久久91| 欧美爱色| 91麻豆国产级在线| 国产不卡高清在线观看视频| 国产麻豆精品视频| 亚洲精品久久玖玖玖玖| 色综合久久天天综合| 国产一区二区精品久久91| 日日夜人人澡人人澡人人看免| 午夜欧美成人久久久久久| 日韩中文字幕一区二区不卡| 天天做人人爱夜夜爽2020毛片| 欧美另类videosbestsex久久| 韩国毛片基地| 精品视频在线看| 亚洲 男人 天堂| 欧美另类videosbestsex高清| 免费国产一级特黄aa大片在线| 精品视频免费看| 日韩免费在线观看视频| 九九干| 欧美爱爱动态| 四虎精品在线观看| 免费毛片播放| 日韩中文字幕一区二区不卡| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 成人高清视频免费观看| 精品久久久久久影院免费| 国产伦久视频免费观看视频| 一级毛片视频免费| 亚洲 欧美 91| 日韩在线观看免费完整版视频| 国产91丝袜在线播放0| 天天做日日爱夜夜爽| 青青久热| 97视频免费在线| 久久精品大片| 欧美国产日韩在线| 亚洲精品中文字幕久久久久久| 高清一级片| 久久精品人人做人人爽97| 国产精品免费精品自在线观看| 久久精品欧美一区二区| 九九久久国产精品大片| 欧美电影免费| 午夜久久网| 99色视频在线| 可以免费在线看黄的网站| 亚洲天堂免费| 久久福利影视| 日韩av东京社区男人的天堂| 国产亚洲免费观看| 九九久久国产精品大片| 一级毛片看真人在线视频| 黄视频网站免费| 国产麻豆精品视频| 欧美激情一区二区三区在线播放| 日韩一级精品视频在线观看| 四虎精品在线观看| 国产91精品系列在线观看| 久草免费在线色站| 欧美一区二区三区在线观看 | 日韩中文字幕在线观看视频| 九九免费精品视频| 成人免费一级毛片在线播放视频| 国产国产人免费视频成69堂| 四虎影视库| 成人高清护士在线播放| 国产伦精品一区二区三区无广告| 国产网站免费在线观看| 成人av在线播放| 99热精品一区| 国产91精品一区二区| 久久国产精品永久免费网站| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 久久精品免视看国产成人2021| 久久国产精品自线拍免费| 黄视频网站免费看| 国产视频久久久| 麻豆系列 在线视频| 欧美大片一区| 成人影视在线播放| 99热精品在线| 韩国三级香港三级日本三级la| 可以免费看毛片的网站| 日韩av东京社区男人的天堂| 欧美另类videosbestsex久久| 日韩专区在线播放| 亚欧成人毛片一区二区三区四区| 欧美一级视频免费观看| 成人a级高清视频在线观看| 午夜欧美福利| 久久国产精品自线拍免费| 久久精品大片| 免费国产在线视频| 国产高清在线精品一区a| 91麻豆精品国产综合久久久| 欧美另类videosbestsex| 久久99这里只有精品国产| 沈樵在线观看福利| 精品国产一区二区三区国产馆| 成人免费高清视频| 国产成a人片在线观看视频| 国产成人啪精品视频免费软件| 免费一级生活片| 国产91丝袜在线播放0| 九九热国产视频| 国产麻豆精品| 亚洲第一色在线| 色综合久久天天综合观看| 999精品视频在线| 青青久在线视频| 欧美1区| 欧美一级视频免费|