Nginx-前端跨域解決方案!

1 Nginx 核心

Nginx 是一個開源的高性能 HTTP 和反向代理服務器,以輕量級、高并發處理能力和低資源消耗著稱。除作為 Web 服務器外,還可充當郵件代理服務器和通用的 TCP/UDP 代理服務器,廣泛應用于現代 Web 架構中。

在 Windows 系統中使用 Nginx 時,命令行操作與類 Unix 系統存在差異,以下是基本操作:

1.1 環境準備

  1. 下載 Nginx for Windows 安裝包(需注意 Windows 版本僅支持穩定版,非主線開發版)。

  2. 解壓至指定目錄(如?C:\nginx),目錄結構包含?conf(配置文件)、html(靜態資源)等核心文件夾。

1.2 常用命令操作

1.2.1 啟動 Nginx

# 切換到Nginx安裝目錄

cd?C:\nginx# 啟動Nginx服務start?nginx
1.2.2 停止 Nginx
# 強制停止服務nginx?-s stop# 優雅停止服務(處理完當前請求后停止)nginx -s quit
1.2.3 重啟 Nginx???????
# 先停止服務nginx?-s stop# 再啟動服務start nginx
1.2.4 重載配置???????
# 當修改配置文件后,無需重啟服務即可使配置生效nginx?-s reload
2 Nginx 跨域方案

2.1 CORS 跨域資源共享方案

Nginx 可通過配置響應頭實現 CORS(Cross-Origin Resource Sharing),解決瀏覽器同源策略限制。

2.1.1 add_header 指令配置

在 Nginx 配置文件中(通常位于安裝目錄下的?conf\nginx.conf),可以使用?add_header指令添加跨域相關響應頭:???????

server?{? ??listen?8080;? ??server_name?localhost;? ??location?~ \.json$?{? ? ? ??root? ?data;? ? ? ??# 安全建議:明確指定允許的域名而非使用通配符,*表示允許所有域名訪問? ? ? ??add_header?'Access-Control-Allow-Origin'?'http://yourdomain.com';? ? ? ??add_header?'Access-Control-Allow-Methods'?'GET, POST, OPTIONS';? ? ? ??add_header?'Access-Control-Allow-Headers'?'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';? ? ? ??# 預檢請求緩存時間(20天)? ? ? ??add_header?'Access-Control-Max-Age'?1728000;? ? ? ??# 允許瀏覽器在跨域請求中攜帶憑據(如cookies),需注意:此時Access-Control-Allow-Origin不可使用通配符? ? ? ??# add_header 'Access-Control-Allow-Credentials' 'true';? ? ? ??# 處理OPTIONS預檢請求? ? ? ??if?($request_method?=?'OPTIONS') {? ? ? ? ? ??return?204;? ? ? ? }? ? }}

2.1.2 前端請求示例 (users.html)

下面是一個前端頁面示例,使用 Fetch API 請求 JSON 數據:???????

<!DOCTYPE?html><html?lang="en"><head>? ??<meta?charset="UTF-8">? ??<meta?name="viewport"?content="width=device-width, initial-scale=1.0">? ??<title>Nginx跨域示例</title></head><body>? ??<script>? ? ? ??// 立即執行的異步函數? ? ? ? (async?function?() {? ? ? ? ? ??try?{? ? ? ? ? ? ? ??// 發送GET請求到Nginx服務器? ? ? ? ? ? ? ??const?response =?await?fetch('http://localhost:8080/users.json', {? ? ? ? ? ? ? ? ? ??method:?'GET',? ? ? ? ? ? ? ? ? ??headers: {? ? ? ? ? ? ? ? ? ? ? ??'Accept':?'application/json'? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? })? ? ? ? ? ? ? ??// 解析響應為JSON格式? ? ? ? ? ? ? ??const?data =?await?response.json();? ? ? ? ? ? ? ??// 打印獲取到的數據? ? ? ? ? ? ? ??console.log('請求響應:', data);? ? ? ? ? ? }?catch?(error) {? ? ? ? ? ? ? ??// 錯誤處理? ? ? ? ? ? ? ??console.error('請求出錯:', error);? ? ? ? ? ? }? ? ? ? })();? ??</script></body></html>

數據文件示例 (users.json) 如下:

[{"id":1,"name":"張三"}]

2.2 反向代理方案

除了直接配置 CORS 響應頭,還可以通過 Nginx 反向代理來解決跨域問題,這種方法可將跨域請求轉為同域請求,規避瀏覽器同源策略,此方法在微服務架構中尤為常見。

2.2.1 Nginx 代理配置

在 Nginx 配置文件中添加以下代理規則:???????

server?{? ??listen?8080;? ??server_name?localhost;? ??# 匹配以/api開頭的URL路徑? ??location?/api {? ? ? ??# 將請求代理到本地4000端口的服務(注意:proxy_pass末尾是否添加斜杠會影響路徑拼接)? ? ? ??proxy_pass?http://localhost:4000;? ? ? ??# 常用代理配置項(傳遞客戶端真實信息)? ? ? ??proxy_set_header?Host?$host;? ? ? ??proxy_set_header?X-Real-IP?$remote_addr;? ? ? ??proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;? ? ? ??proxy_set_header?X-Forwarded-Proto?$scheme;? ? }}

2.2.2 后端服務示例 (serverb.js)

使用 Express 框架創建一個簡單的后端服務:???????

// serverb.jsconst?express =?require('express');const?app =?express();const?users = [{id:1,?name:'張三'}];// 處理API請求(注意:接口路徑需與Nginx代理規則匹配)app.get('/api/users',?(req, res) =>?{? ? res.json(users);});const?port =?4000;app.listen(port,?() =>?{? ??console.log(`后端服務運行在 http://localhost:${port}`);});

2.2.3 前端通過代理請求數據???????

<!DOCTYPE?html><html?lang="en"><head>? ??<meta?charset="UTF-8">? ??<meta?name="viewport"?content="width=device-width, initial-scale=1.0">? ??<title>Nginx代理跨域示例</title></head><body>? ??<script>? ? ? ? (async?function?() {? ? ? ? ? ??try?{? ? ? ? ? ? ? ??// 通過Nginx代理訪問后端服務? ? ? ? ? ? ? ??const?response =?await?fetch('http://localhost:8080/api/users', {? ? ? ? ? ? ? ? ? ??method:?'GET',? ? ? ? ? ? ? ? ? ??headers: {? ? ? ? ? ? ? ? ? ? ? ??'Accept':?'application/json'? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? })? ? ? ? ? ? ? ??const?data =?await?response.json();? ? ? ? ? ? ? ??console.log('通過代理獲取的數據:', data);? ? ? ? ? ? }?catch?(error) {? ? ? ? ? ? ? ??console.error('代理請求出錯:', error);? ? ? ? ? ? }? ? ? ? })();? ??</script></body></html>

2.3 兩種跨域方案對比

維度CORS 方案反向代理方案
核心原理瀏覽器基于響應頭允許跨域將跨域請求轉為同域請求
配置位置Nginx 響應頭配置(add_headerNginx 代理規則配置(proxy_pass
適用場景前后端域名不同,需瀏覽器直接跨域前端與 Nginx 同域名,后端多服務部署
安全性需嚴格控制Allow-Origin,避免通配符前端無跨域風險,Nginx 可統一鑒權
性能影響存在預檢請求(OPTIONS)額外開銷無預檢開銷,性能更優
前端依賴需前端請求配合 CORS 規則(如憑據設置)前端無需特殊處理,按同域請求即可

本文系統介紹了 Nginx 在 Windows 環境下的基礎操作,以及兩種主流跨域解決方案:通過add_header配置 CORS 響應頭和基于反向代理的跨域處理機制。在實際開發中,可依據項目場景靈活選擇方案:

  • 當前后端域名不同且需瀏覽器直接訪問跨域資源時,優先采用 CORS 方案,但需嚴格限定域名白名單,避免通配符濫用帶來的安全風險。

  • 若項目采用微服務架構,或需要集中處理請求轉發、負載均衡及緩存策略,反向代理方案更為高效 —— 它通過將跨域請求轉換為同域請求,從根本上規避瀏覽器同源策略限制。

Nginx 憑借高性能與靈活配置特性,成為跨域問題的理想解決方案,同時在負載均衡、緩存優化等場景中也能發揮核心作用。實際使用時,建議養成定期備份配置文件的習慣,修改配置后通過nginx -t命令校驗語法正確性,再通過nginx -s reload平滑重載配置,確保服務穩定運行。通過 Nginx 處理跨域問題,既能發揮其高并發處理優勢,又能簡化前后端架構設計,是現代 Web 開發中不可或缺的基礎技術方案。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/88235.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/88235.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/88235.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RedisVL 入門構建高效的 AI 向量搜索應用

一、前置條件 在開始之前&#xff0c;請確保&#xff1a; 已在 Python 環境中安裝 redisvl。運行 Redis Stack 或 Redis Cloud 實例。 二、定義索引架構&#xff08;IndexSchema&#xff09; 索引架構&#xff08;IndexSchema&#xff09;用于定義 Redis 的索引配置和字段信…

基于ssm移動學習平臺微信小程序源碼數據庫文檔

摘 要 由于APP軟件在開發以及運營上面所需成本較高&#xff0c;而用戶手機需要安裝各種APP軟件&#xff0c;因此占用用戶過多的手機存儲空間&#xff0c;導致用戶手機運行緩慢&#xff0c;體驗度比較差&#xff0c;進而導致用戶會卸載非必要的APP&#xff0c;倒逼管理者必須改…

【Python】Tkinter模塊(巨詳細)

專欄文章索引:Python 有問題可私聊:QQ:3375119339 本文內容系本人根據閱讀的《Python GUI設計tkinter從入門到實踐》所得,以自己的方式進行總結和表達。未經授權,禁止在任何平臺上以任何形式復制或發布原始書籍的內容。如有侵權,請聯系我刪除。 目錄 一、Tkinter與GUI …

【C++特殊工具與技術】局部類

在 C 的類體系中&#xff0c;除了全局類、嵌套類&#xff08;在類內部定義的類&#xff09;&#xff0c;還有一種特殊的存在 ——局部類&#xff08;Local Class&#xff09;。它像函數內部的 “封閉王國”&#xff0c;作用域嚴格限制在所屬函數內&#xff0c;既擁有類的封裝特…

《C#圖解教程 第5版》深度推薦

《C#圖解教程 第5版》深度推薦 在 C# 編程語言的浩瀚學習資源中&#xff0c;《C#圖解教程 第5版》宛如一座燈塔&#xff0c;為開發者照亮前行之路。通過其詳實的目錄&#xff0c;我們能清晰窺見這本書在知識架構、學習引導上的匠心獨運&#xff0c;無論是編程新手還是進階開發者…

【Kubernetes】配置自定義的 kube-scheduler 調度規則

在最近一次 K8s 環境的維護中&#xff0c;發現多個 Pod 使用相同鏡像時&#xff0c;調度到固定節點的問題導致集群節點資源分配不均的情況。 啟用調度器的打分日志后發現這一現象是由 ImageLocality 打分策略所引起的&#xff08;所有的節點中&#xff0c;只有一個節點有運行該…

跟著AI學習C# Day21

&#x1f4c5; Day 21&#xff1a;動態類型與動態語言運行時&#xff08;Dynamic Types & DLR&#xff09; ? 學習目標&#xff1a; 理解什么是 dynamic 類型&#xff1b;掌握 dynamic 與 object 的區別&#xff1b;理解 DLR&#xff08;Dynamic Language Runtime&#…

leetcode-3085.成為K字符串需要刪除的最小字符串數

題目描述 解題思路 這題不難想到需要統計每個字母的出現頻率&#xff0c;一共有26個字母&#xff0c;故cnt數組有26維。我們可以枚舉其中一種作為「刪除操作結束后出現頻率最低的字符」&#xff0c;將其設置為 c&#xff0c;那么所有頻率小于 c 的字符都會被刪除&#xff0c;所…

Android 中 解析 XML 文件的幾種方式

在 Android 開發中,解析 XML 文件有多種方式,每種方式都有其特點和適用場景。常見的 XML 解析方式有 DOM 解析、SAX 解析 和 XmlPullParser 解析。 一、xml 文件及數據類 1、xml 文件 將測試用 book.xml 文件放在項目的 app/src/main/assets 目錄下,文件內容如下:<lib…

python里的abc庫是什么東西

Python 中的 ABC&#xff1a;為什么你需要抽象基類&#xff1f;告別“假鴨子”&#xff0c;擁抱真抽象&#xff01; 你是不是經常在 Python 項目中感到困惑&#xff1a;我定義了一個類&#xff0c;希望它能被其他類繼承并實現某些特定功能&#xff0c;但又不想它被直接實例化&…

設計模式精講 Day 9:裝飾器模式(Decorator Pattern)

【設計模式精講 Day 9】裝飾器模式&#xff08;Decorator Pattern&#xff09; 文章內容 在軟件開發中&#xff0c;靈活擴展功能是提升系統可維護性和可復用性的關鍵。裝飾器模式作為一種結構型設計模式&#xff0c;為對象動態地添加職責&#xff0c;而無需通過繼承來實現。它…

瀏覽器無法訪問:Nginx下的基于域名的虛擬主機

檢查步驟如下&#xff1a; 1、nginx -t &#xff0c;檢查配置文件是否有語法錯誤 [root89 ~]# nginx -t nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok nginx: configuration file /opt/nginx/conf/nginx.conf test is successful # 可以看到 配置…

【appium】6.appium遇到的問題

1.appium-python-client 修改版本1.5 為5.1.1,后執行python程序時&#xff0c;提示&#xff1a; raise TypeError( TypeError: missing 1 required keyword-only argument: options (instance of driver options.Options class) 你遇到的錯誤&#xff1a; TypeError: missing…

C++法則3:使用拷貝和交換的賦值運算符自動就是異常安全的,且能正確處理自賦值。

C法則3&#xff1a;使用拷貝和交換的賦值運算符自動就是異常安全的&#xff0c;且能正確處理自賦值。 這條法則強調了使用"拷貝和交換"(Copy-and-Swap)慣用法來實現賦值運算符()的優點&#xff1a; 關鍵點 異常安全&#xff1a;拷貝和交換方法天然提供了強異常安全…

純血HarmonyOS5 打造小游戲實踐:掃雷(附源文件)

鴻蒙掃雷游戲的核心架構設計 鴻蒙OS掃雷游戲采用了MVC&#xff08;模型-視圖-控制器&#xff09;的架構思想&#xff0c;將游戲邏輯與UI展示分離&#xff0c;使得代碼結構清晰且易于維護。整個游戲由以下幾個核心部分構成&#xff1a; 數據模型設計 游戲的基礎數據模型是Cel…

Linux C語言的opendir如何獲取目錄下的隱藏文件

在 Linux 文件系統中&#xff0c;所謂隱藏文件是文件名以 . 開頭的文件&#xff08;例如 .bashrc、.git、.config 等&#xff09;。 在編程層面&#xff0c;opendir readdir 并不會自動排除隱藏文件。 只要你不在代碼中手動過濾&#xff0c;readdir 會把目錄下所有文件&#…

母線槽接頭過熱隱患難防?在線測溫方案實時守護電力安全

近年來&#xff0c;由于各種設備對電力的大力需求&#xff0c;并有逐年增加的趨勢&#xff0c;傳統電路接線方式在施工時越來越力不從心。系統一旦定型&#xff0c;后續想要簡化變更更是難上加難。母線槽方案因此興起&#xff0c;憑借多點連接&#xff08;接頭、插接頭、插接箱…

Windows本地部署wordpress

一、下載wordpress 地址&#xff1a;Download – WordPress.org 下載后解壓出來 二、下載小皮面板 地址&#xff1a;Windows版phpstudy下載 - 小皮面板(phpstudy) 下載后安裝 三、打開小皮面板&#xff0c;安裝對應內置應用 1、MySQL8&#xff08;注意要是8版本,卸載其他版本…

Android 性能優化

一、Android中檢測性能工具 Profiler —— 使用Profiler的CPU分析功能。 Method Tracing ———— 通過該方法,我們可以記錄應用運行過程中的方法調用情況,包括每個方法的執行時間、調用次數等。 Systrace 是Android平臺提供的一款工具,用于記錄短期內的設備活動。 Systra…

圖片壓縮工具 | Electron應用配合 commander 提供命令行調用功能

OPEN-IMAGE-TINY&#xff0c;一個基于 Electron VUE3 的圖片壓縮工具&#xff0c;項目開源地址&#xff1a;https://github.com/0604hx/open-image-tiny 功能描述 應用程序的命令行調用功能允許用戶通過終端&#xff08;如Windows的CMD/PowerShell或Linux/macOS的Terminal&am…