日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

跨域问题解决方案--Nginx代理转发

發(fā)布時間:2025/3/21 Nginx 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 跨域问题解决方案--Nginx代理转发 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 問題描述
  • 解決方案

問題描述

有這么一個html頁面,具體代碼如下:
Nginx_CORS.html

<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>跨域問題-Nginx代理轉(zhuǎn)發(fā)</title><script src="js/jquery-2.1.1.min.js"></script> </head><body><script>$.ajax({type: 'GET',url: 'https://www.csdn.net/api/articles?type=more&category=home&shown_offset=1524276761019196&first_view=false',success: function(result) {document.writeln("fetch success!");let article = result.articles[0];for (const key in article) {if (article.hasOwnProperty(key)) {const element = article[key];document.writeln(element + '<br/>');}}document.writeln(result);},error: function() {document.writeln("fetch failed!");}});</script></body></html>

當(dāng)在瀏覽器中打開時(不是在文件管理系統(tǒng)直接雙擊打開,非file://協(xié)議,在http://或https://訪問),控制臺報錯。


圖1.瀏覽器打開界面

問題很明顯,一個在http://127.0.0.1:5500域下的頁面要訪問http://www.csdn.net域的接口,跨域了,瀏覽器不允許這么干。

解決方案

既然頁面和接口不在同一域名下,我想辦法給他搞到“同一域名”下。可以利用Nginx的代理轉(zhuǎn)發(fā)功能。

  • 首先設(shè)置監(jiān)聽的端口(8080)與服務(wù)名(localhost),當(dāng)你在瀏覽器中訪問該服務(wù)名與端口組成的域名(http://localhost:8080)時,會被Nginx給監(jiān)聽到。
  • 這時候通過設(shè)置Nginx的配置,Nginx幫你轉(zhuǎn)到前面的html(Nginx_CORS.html)頁面。
  • 當(dāng)html頁面加載時會發(fā)出一個接口請求(https://www.csdn.net/api/…),我事先在代碼中把這個接口請求的url參數(shù)改成*/api/,把前面的域名去掉,這樣瀏覽器看到你發(fā)出的請求地址是http://localhost:8080/api/…。對于瀏覽器來說html頁面的域名是http://localhost:8080*,接口請求的域名也是http://localhost:8080,因此不會出現(xiàn)跨域問題。剩下的問題就是http://localhost:8080/api/…這個接口我沒有啊,這個接口請求也是可以被Nginx監(jiān)聽到的,通過設(shè)置Nginx讓所有以http://localhost:8080/api開頭的請求被轉(zhuǎn)發(fā)到https://www.csdn.net,就可以獲取結(jié)果了。
  • 如果以 Nginx_CORS.html進行整個過程的話:

  • 安裝 Nginx;
  • 修改配置文件 conf/nginx.conf;
  • 啟動 nginx;
  • 瀏覽器中輸入 http://localhost:8080/api/articles?type=more&category=home&shown_offset=1524276761019196&first_view=false 進行測試,如果有返回結(jié)果,說明nginx代理配置沒有問題;
  • 修改 Nginx_CORS.html 代碼,主要是請求的url;
  • $.ajax({type: 'GET',// 未設(shè)置代理時報錯 跨域問題,Web應(yīng)用與發(fā)出的接口請求地址不在同一域名下// url: 'https://www.csdn.net/api/articles?type=more&category=home&shown_offset=1524276761019196&first_view=false',// 設(shè)置代理后,nginx監(jiān)聽到 /api 請求后進行轉(zhuǎn)發(fā),不會出現(xiàn)跨域問題,Web應(yīng)用與發(fā)出的接口請求地址在同一域名下url: '/api/articles?type=more&category=home&shown_offset=1524276761019196&first_view=false',success: function(result) {document.writeln("fetch success!");let article = result.articles[0];for (const key in article) {if (article.hasOwnProperty(key)) {const element = article[key];document.writeln(element + '<br/>');}}document.writeln(result);},error: function() {document.writeln("fetch failed!");}});
  • 瀏覽器中輸入 http://localhost:8080,出現(xiàn)類似下圖
  • 總結(jié)

    以上是生活随笔為你收集整理的跨域问题解决方案--Nginx代理转发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。