Nginx 之生产环境应用

通过nginx高速缓存来演示

在这之前可以了解$host变量的含义  http://blog.51cto.com/gyj110/2079981

案例分析

某电商平台商品详情页需要实现 700+ QPS(query操作,TPS提交操作),如何着手去做?
1. 首先为分析一下一个商品详情页有哪些信息

从中得出 商品详情页依懒了

对于商品详情页涉及了如下主要服务:

这么多数据不可能一起一下子就加载,不然会非常的卡,那么该怎么办呢?? 

  • 商品详情页HTML页面渲染
  • 价格服务 促销服务
  • 库存状态/配送至服务
  • 广告词服务
  • 预售/秒杀服务
  • 评价服务
  • 试用服务
  • 推荐服务
  • 商品介绍服务
  • 各品类相关的一些特殊服务 

解决方案核心:

1. 采用Ajax 动态加载 价格、广告、库存等服务

2. 采用key value 缓存详情页主体html。

方案架构:

请求不大时,我们一般把数据缓存在redis中,这样可以不用再去服务拿去数据,响应速度更快了, 但是当请求更多时,会出现瓶颈

问题:

当达到500QPS 的时候很难继续压测上去。

分析原因:

一个详情页html  主体达平均150 kb  那么在500QPS 已接近局域网宽带极限。必须减少内网通 信。
 比如,一个详情页面150kb,500QPS*150/1024=73M,一秒就发生73多M的网络传输,这已经非常接近宽带峰值128M

所以,我们可以把缓存放在通过nginx放在本地上

基于Nginx 静态缓存的解决方案:

 如图:我们通过ngnx配置把数据缓存在本地,这样用户的访问请求就不用经过商品详情页服务返回数据,除非当运维人员修改商品信息时要清除缓存,这时可以通过第三方来清除nginx配置的缓存,这样用户就可看到最新数据

该方案nginx配置实现

一、在http元素下添加缓存区声明。 

proxy_cache_path  /data/nginx/cache_item  levels=1:1:2 keys_zone=cache_item:500m inactive=30d max_size=10g;

### 一、Nginx CORS 跨域问题概述 在现代 Web 应用开发中,跨域资源共享(CORS)是一个常见的需求。由于浏览器的安全机制——同源策略的存在,客户端无法直接向不同域名下的服务发起请求。为了实现安全的跨域通信,可以通过配置 Nginx 来支持 CORS 请求[^1]。 --- ### 二、Nginx 配置解决生产环境中的 CORS 跨域问题 以下是针对生产环境中可能遇到的情况设计的一个完整的 Nginx 配置方案: #### 1. 基本配置 对于简单的 GET 或 POST 请求,可以直接添加以下头部信息来允许特定来源访问资源: ```nginx location /api/ { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type'; if ($request_method = OPTIONS) { return 204; } } ``` 上述配置解释如下: - `add_header 'Access-Control-Allow-Origin' '*'` 表示允许任何来源访问资源。如果仅需指定某些来源,则替换为具体域名,例如 `'https://example.com'`[^3]。 - `add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';` 定义了允许使用的 HTTP 方法。 - `if ($request_method = OPTIONS)` 处理预检请求 (preflight request),返回状态码 `204 No Content` 表明无需进一步操作[^4]。 --- #### 2. 支持认证与复杂场景 当涉及敏感数据传输或需要身份验证时,应调整配置以适应更复杂的场景: ```nginx location /api/authenticated-endpoint/ { set $cors_origin ''; if ($http_origin ~* '(https?://)(www\.)?(domain1\.com|domain2\.org)$') { set $cors_origin "$http_origin"; } add_header 'Access-Control-Allow-Origin' "$cors_origin" always; add_header 'Access-Control-Allow-Credentials' 'true' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always; add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization' always; if ($request_method = OPTIONS) { return 204; } } ``` 此部分的关键点在于: - 使用 `$http_origin` 动态匹配合法来源并将其赋值给变量 `$cors_origin`,从而增强灵活性和安全性[^2]。 - 设置 `Access-Control-Allow-Credentials` 为 `true` 后,必须显式定义 `Access-Control-Allow-Origin` 的值而不能使用通配符 `*`。 --- #### 3. 错误排查与调试建议 即使完成了基本配置,在实际部署过程中仍可能出现一些意外情况。此时可采取以下措施进行诊断: - **启用日志记录**:增加详细的错误日志以便定位问题所在。 ```nginx error_log /var/log/nginx/error.log debug; access_log /var/log/nginx/access.log main; ``` - **测试工具辅助**:利用 Postman 或 curl 工具模拟发送带有自定义头的信息至目标 URL 并观察响应行为。 ```bash curl -X OPTIONS http://your-domain/api/test \ -H "Origin: https://allowed-origin.example.com" \ -H "Access-Control-Request-Method: POST" ``` --- ### 三、总结 通过合理配置 Nginx 可有效应对生产环境下因同源策略引发的各种挑战。无论是基础功能还是高级特性都应在充分理解原理的基础上实施优化,确保应用既满足业务需求又兼顾性能表现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值