【Nginx】——反向代理

本文详细介绍了Nginx作为反向代理服务器的工作原理及其优势。通过将客户端请求先完全接收再转发给上游服务器的方式,有效减轻了上游服务器的压力。尽管这种方式延长了请求处理时间并消耗更多资源,但整体提升了系统的稳定性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


反向代理

reverse proxy,指用代理服务器来接收Internet上的链接请求,然后将请求转发给内部网络中的上游服务器,并将从上游服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外的表现就是一个Web服务器。

Nginx的这种反向代理方案主要是为了降低服务器的并发压力。



Nginx作为HTTP反向代理服务器

Nginx通常会被配置为既是静态Web服务器,也是反向代理服务器,如果请求不适合Nginx处理,则其会将请求直接转发到上游服务器中处理。

图示:




转发请求流程

1.客户端发来HTTP请求;

2.Nginx并不会立刻将该请求转发到上游服务器,Nginx先把用户的请求完整地接收到Nginx所在服务器的硬盘或者内存;

3.向上游服务器发起连接;

4.把缓存的客户端请求转发到上游服务器。

(Squid等代理服务器:一边接收客户端请求,一边转发到上游服务器)



缺点

延长了一个请求的处理时间,并增加了用于缓存请求内容的内存和磁盘空间

优点

降低了上游服务器的负载,尽量把压力放在Nginx服务器上




### 如何使用 Nginx 配置反向代理来解决 CORS 跨域问题 #### 基础配置示例 为了处理简单的 CORS 请求,可以在 Nginx 的 `http`、`server` 或 `location` 上下文中添加相应的头信息。下面是一个基本的 Nginx 配置文件片段,展示了如何设置这些头部以允许来自特定源的请求[^3]。 ```nginx http { server { listen 80; server_name localhost; location /api/ { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; if ($request_method = 'OPTIONS') { add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain charset=UTF-8'; add_header 'Content-Length' 0; return 204; } proxy_pass http://backend_server; } } } ``` 此配置不仅解决了跨域资源共享(CORS),还确保了预检请求(`OPTIONS`)被正确响应,并设置了最大缓存时间。对于更复杂的场景,可以调整上述参数或增加更多自定义逻辑。 #### 动态配置与高级特性 当面对更加复杂的应用环境时——例如多域名支持或是基于路径的不同策略需求——可以通过引入变量和条件判断语句进一步增强灵活性。这使得可以根据实际业务情况灵活设定不同的跨域规则而不必频繁更改核心配置[^2]。 例如: ```nginx map $http_origin $cors_allow_origin { default ""; "~*example\.com$" "$http_origin"; } server { ... location /api/ { set $allow_cors "false"; if ($http_origin ~* "^https?://(www\.)?(example|test)\.com(:[0-9]+)?$") { set $allow_cors "true"; } if ($allow_cors = "true") { add_header Access-Control-Allow-Origin $http_origin always; add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always; add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept" always; # 对于预检请求返回空内容并结束处理链 if ($request_method = 'OPTIONS') { return 204; } } proxy_pass http://your_backend_service; } } ``` 这段代码实现了根据不同来源动态决定是否开启 CORS 支持的功能,同时保持了良好的可读性和维护性。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值