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…