nginx开发心得

2020/10/04 nginx 共 1190 字,约 4 分钟

nginx

  • HTTP/HTTPS API网关

  • 反向代理,负载均衡

  • http proxy-cache CDN

  • web容器

nginx c module 开发注意事项

  • handler阶段不要耗时太长

  • 基于nginx框架的开发建议

    • 业务逻辑控制采用lua脚本;经典、基础的功能开发采用C/C++ module。

      —— 这样尽可能保证代码质量高:高内聚,低耦合;

nginx API网关优势

nginx轻量级,稳定的web服务器;

  • http七层静态负载均衡

  • tcp四层负载均衡

  • udp四层负载均衡

  • 通过 c module或lua二次开发支持七层/四层动态负载均衡; —— 完全可以做到不重启nginx就可以添加或摘掉后端服务。

  • access接入控制

  • 速率控制

  • 支持http2

nginx CDN

  • nginx cdn控制接入层

    —— 各CDN厂商均会采用nginx做控制接入层

  • nignx http proxy-cache 缓存加速

    —— 自建CDN web静态小文件加速,初始阶段可直接采用nginx proxy-cache模块做缓存加速;

FAQ

openresty+lua开发后端业务逻辑心得

openresty适合做接入控制层、API网关

曾经负责过一个(openresty + lua + mysql)+ vue的商城购物小程序/公众号项目。

所有的商品列表,订单,支付,均采用lua-API对接mysql。

  • 好处:

    技术栈单一,技术栈可以做精;

  • 坏处:

    • lua-API对接mysql,后续系统扩展升级不方便;特别是针对后面的微服务架构升级。

如果重新选择技术栈,我会采用openresty做接入API网关;后端业务选择nodejs,开发小程序购物商城 效率太高了。

—— 不会再选择openresty + mysql做后端业务。

如果是团队作战,最好选择大家熟悉的技术栈,如nodejs/go/java等写后端业务逻辑。

nginx http-range

RFC2616规范中定义了range协议: 一次请求只下载完整文件的某一部分。

在基于nginx做即时转封装时遇到range的一个大坑。

  • 需要采用subrequest拉取完整分片,然后转封装后再执行range;

  • 如果采用upstream + filter,在body-filter做转封装的设计; nginx执行流程就会出现先range,后转封装;——达不到预期。

nginx.conf增加配置项时,nginx c/c++ module做好异常保护

—— 可以观察nginx worker进程PID是否在不断变化。如果不断变化,说明程序里面有bug。

注意写权限

拷贝时权限有变化。如: cp njs_shared_dict.db share_dict.db

-rwxrwxrwx 1 zhangbiwu zhangbiwu   26 Nov  2 09:48 njs_shared_dict.db
-rwxrwxr-x 1 zhangbiwu zhangbiwu   26 Nov  2 09:48 share_dict.db

注意写权限的变化

文档信息

Search

    Table of Contents