免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 91319 | 回复: 69
打印 上一主题 下一主题

[Linux] 强大的Nginx你究竟会用多少? [复制链接]

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-04-08 16:22 |只看该作者 |倒序浏览
获奖详情:http://bbs.chinaunix.net/thread-4245471-1-1.html


话题背景:

        Nginx作为强大的web服务器现在已经大量在生产环境中使用,好评如潮,根本原因在于Nginx本身优良的高性能架构设计,处理响应快,并发高,可靠性高,可扩展性好。近年来,为了更加高效的利用Nginx,大家纷纷开发Nginx插件来进一步提高和应用nginx。其中最优秀的一个插件套装就是openresty,这个套装用lua和Nginx 插件强力的扩展了Nginx的功能。现在是公认的高并发项目的好工具。



讨论话题:

根据使用情况就下列几点分享一下自己的使用心得,或者借此机会了解一下强大的Nginx吧

  •   如何在实战中熟练使用Nginx?
  •   如何发挥Nginx的性能?
  •   如何在理解Nginx源码的基础上,通过编写Nginx插件来提高自己的编程能力?



活动时间:2016年4月11日—5月11日


奖励设置

活动结束后,我们将选取5位讨论精彩的同学,各送一本《深入理解Nginx:模块开发与架构解析(第2版)》技术图书。



作者: 陶辉   
丛书名: Linux/Unix技术丛书
出版社:机械工业出版社
ISBN:9787111526254
上架时间:2016-1-28
出版日期:2016 年2月
开本:16开
页码:624
版次:2-1
所属分类:计算机 > 软件与程序设计 > 网络编程 > 综合

内容简介:本书致力于说明开发Nginx模块的必备知识,第1版发行以后,深受广大读者的喜爱.然而由于Ng,nx功能繁多且性能强大,以致必须了解的基本技能也很庞杂,而第1版成书匆忙,缺失了几个进阶的技巧描述,因此第2版在此基础上进行了完善。

书中首先通过介绍官方Nginx的基本用法和配置规则,帮助读者了解一般Nginx模块的用法,然后重点介绍了女口何开发HTTP模块(含HTTP过滤模块)来得到定制化的Nginx,其中包括开发—个功能复杂的模块所需要了解的各种知识,并对内存池的实现细节及TCP协议进行了详细介绍;接着,综合Nginx框架代码分析了Nginx架构的设计理念和技巧,此外,还新增了如何在模块中支持HTTP变量,以及与slab共享内存等相关的内容,相信通过完善,可进一步帮助读者更好地开发出功能丰富、性能—流的Nginx模块。

试读样章: 1-3Z.pdf (3.87 MB, 下载次数: 1056)

论坛徽章:
72
20周年集字徽章-20	
日期:2020-10-28 14:04:30操作系统版块每日发帖之星
日期:2016-07-13 06:20:0015-16赛季CBA联赛之广夏
日期:2016-07-10 09:04:02数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00操作系统版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-07 06:20:00操作系统版块每日发帖之星
日期:2016-07-07 06:20:00操作系统版块每日发帖之星
日期:2016-07-04 06:20:00数据库技术版块每日发帖之星
日期:2016-07-03 06:20:00操作系统版块每日发帖之星
日期:2016-07-03 06:20:00数据库技术版块每日发帖之星
日期:2016-07-02 06:20:00操作系统版块每日发帖之星
日期:2016-07-02 06:20:00
2 [报告]
发表于 2016-04-08 16:28 |只看该作者
本帖最后由 cjfeii 于 2016-04-12 10:23 编辑

必须顶啊

==================
如何在实战中熟练使用Nginx?
我们在业务中主要用到Nginx以下的功能:
1. 反向代理
2. 负载均衡
3. 业务模块开发:nginx+lua(openresty)
4. 等
主要是针对不同nginx不同的用法以及服务器具体的配置,采用不同的调整策略。

如何发挥Nginx的性能?
通过对操作系统以及Nginx本身的参数调整,以充分发挥Nginx的性能:
1. 操作系统主要需要打开最大链接数的限制,以及TCP协议栈的调优(通过iperf、netperf等工具测试);
```
# Increase system IP port limits to allow for more connections
net.ipv4.ip_local_port_range = 2000 65000
net.ipv4.tcp_window_scaling = 1
# number of packets to keep in backlog before the kernel starts dropping them
net.ipv4.tcp_max_syn_backlog = 3240000
# increase socket listen backlog
net.core.somaxconn = 3240000
net.ipv4.tcp_max_tw_buckets = 1440000
# Increase TCP buffer sizes
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_congestion_control = cubic
```
2. Nginx本身的调优包括worker进程数、worker的链接数以及其他配置的优化,下面主要是针对高并发nginx+lua的一些优化:
```
worker_processes 24;
worker_rlimit_nofile 200000;
worker_connections 4000;
use epoll;
multi_accept on;
open_file_cache max=200000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 1;
open_file_cache_errors on;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 30;
keepalive_requests 100000;
reset_timedout_connection on;
...
```
上面的参数中的数字只是在我的测试环境验证的,这个你需要根据你的服务器进行调整。
可以通过tsung、siege等压测工具测试出最优的参数设置。


如何在理解Nginx源码的基础上,通过编写Nginx插件来提高自己的编程能力?
虽然没有写过Nginx的插件,但是做过基于lua的模块开发,通过了解Nginx原理,理解lua模块的加载过程,对lua的模块开发也能起到很好的作用。

评分

参与人数 4可用积分 +9 信誉积分 +5 收起 理由
daili0703 + 5 很给力!
fantigcy + 5 赞一个!
Godbach + 2 赞一个!
crazyhadoop + 2 赞一个!

查看全部评分

论坛徽章:
223
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:10操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
3 [报告]
发表于 2016-04-11 14:20 来自手机 |只看该作者
本帖最后由 action08 于 2016-04-11 14:21 编辑

除了web和负载均衡其他不知道啊,楼主教教我

论坛徽章:
19
处女座
日期:2014-07-18 14:50:5415-16赛季CBA联赛之北京
日期:2019-09-16 15:39:1415-16赛季CBA联赛之上海
日期:2019-09-15 15:29:0415-16赛季CBA联赛之山西
日期:2017-03-09 10:58:232017金鸡报晓
日期:2017-02-08 10:33:212017金鸡报晓
日期:2017-01-10 15:13:2915-16赛季CBA联赛之深圳
日期:2016-12-15 17:55:53C
日期:2016-10-25 16:00:1515-16赛季CBA联赛之新疆
日期:2016-07-21 14:02:0415-16赛季CBA联赛之江苏
日期:2016-06-30 12:15:04shanzhi
日期:2016-06-17 17:59:31平安夜徽章
日期:2015-12-26 00:06:30
4 [报告]
发表于 2016-04-11 14:55 来自手机 |只看该作者
好书,果断顶之,正在用

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
5 [报告]
发表于 2016-04-11 14:59 |只看该作者
回复 1# crazyhadoop

好活动,支持!


   

论坛徽章:
32
CU大牛徽章
日期:2013-05-20 10:45:13每日论坛发贴之星
日期:2015-09-07 06:20:00每日论坛发贴之星
日期:2015-09-07 06:20:00数据库技术版块每日发帖之星
日期:2015-12-13 06:20:0015-16赛季CBA联赛之江苏
日期:2016-03-03 11:56:13IT运维版块每日发帖之星
日期:2016-03-06 06:20:00fulanqi
日期:2016-06-17 17:54:25IT运维版块每日发帖之星
日期:2016-07-23 06:20:0015-16赛季CBA联赛之佛山
日期:2016-08-11 18:06:41JAVA
日期:2016-10-25 16:09:072017金鸡报晓
日期:2017-01-10 15:13:292017金鸡报晓
日期:2017-02-08 10:33:21
6 [报告]
发表于 2016-04-11 15:12 |只看该作者
本帖最后由 jieforest 于 2016-04-16 11:04 编辑

这本书不错。。


1、如何在实战中熟练使用Nginx?
要熟练使用Nginx并不难。
第一步,弄清楚Nginx的安装部署与运行
Nginx在Linux下的安装有一些难度,需要具备Linux基础知识,而且还有一些依赖关系,需安装pcre、zlib、openssl等。
第二步,理解Nginx的配置文件nginx.conf中各个配置指令的含义
只有理解了配置文件,才能正确的、很好的使用Nginx。
完成这两步后,已经可以说能够熟练使用Nginx了。
第三步,研究Nginx的优化技术
针对各种具体的业务场景,对Nginx配置做相应的调优,尽可能压榨、发挥Nginx的性能。
到了这一步,Nginx的使用已经算高段了。
第四步,开发Nginx插件或模块来满足自己的业务需求
Nginx并非万能的,即使Nginx的社区很庞大,也无法提供包治百病的解决方案。面对某些具体的需求,可能会遇到Nginx达不到预期效果的问题。遇到这种情况,就需要深入Nginx架构和源码,按自己的需求开放插件或模块了。
到这一步,已经可以算Nginx牛人了。

2、如何发挥Nginx的性能?
Nginx的优化技巧有很多,根据不同的应用场景也有很多配置方案。
这里谈一点通用的优化技巧。
1)工作进程数(Worker Processes)
工作进程数通常设置为等同于CPU的核数。
2)工作连接数(Worker Connections)
工作连接数告诉工作进程,Nginx的每个工作进程在同一时刻可以服务多少用户请求。默认值为768。
要注意Nginx服务器的用户最大请求数等于:工作进程数×工作连接数
参考配置:
worker_processes 8;
worker_connections 4096;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
worker_rlimit_nofile 100000;
3)客户端缓冲
client_body_buffer_size
客户端Body部分的缓冲区尺寸,这意味着发送到Nginx的任何POST动作,而POST动作是典型的表单提交。
client_header_buffer_size
类似于上面的指令,不过它只是处理客户端Header部分的缓冲区尺寸。无论是哪种需求,通常此尺寸设置为1K就足够了。
client_max_body_size
客户端请求允许的Body部分的最大尺寸。如果客户端发送的请求的Body部分超过此值,那么Nginx就会返回413错误或“Request Entity Too Large”(请求实体太大)的消息。
large_client_header_buffers
客户端大Header部分的最大缓冲区数量和缓冲区尺寸。
通常是这么配置的:
client_body_buffer_size 10K;
client_header_buffer_size 1K;
client_max_body_size 8m;
large_client_header_buffers 2 1K;
4)超时
超时设置也能显著提高性能。
client_body_timeout指令和client_header_timeout指令是让服务器在客户端请求后,等待客户端的Header部分或Body部分发送完的设置。如果客户端既不发送Header部分又不发送Body部分,那么服务器会返回408错误或“Request time out”(请求超时)的错误消息。
keepalive_timeout指令让服务器保持与客户端的活动连接维持指定的时间。简单地说,Nginx将在指定时间到来后关闭客户端的连接。
最后,send_timeout指令建立不是答案的全部转移,而只与读两种操作; 如果此时客户端后,会采取什么都没有,那么Nginx的是关闭连接。
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
5)Gzip压缩
GZIP可以帮助减少网络传输Nginx的交易量。但是,要注意增加gzip_comp_level太高作为服务器将开始浪费CPU周期。
......

3、如何在理解Nginx源码的基础上,通过编写Nginx插件来提高自己的编程能力?
这里只提一点。
最好是有真实的需求,通过真实的需求来驱动开发Nginx插件。这样进步更快些。

评分

参与人数 3可用积分 +5 信誉积分 +10 收起 理由
litzhiai + 5 很给力!
daili0703 + 5 很给力!
fantigcy + 5 赞一个!

查看全部评分

论坛徽章:
4
CU十二周年纪念徽章
日期:2013-10-24 15:41:34摩羯座
日期:2013-12-24 13:05:332015亚冠之西悉尼流浪者
日期:2015-10-09 16:03:47fulanqi
日期:2016-06-17 17:54:25
7 [报告]
发表于 2016-04-11 17:03 |只看该作者
好话题,斗胆参与下:

1 如何在实战中熟练使用Nginx?
  答:如何在实战中熟练使用Nginx,我觉得主要有两点:
      1 对Nginx的角色认识,这涉及到对Internet、对WEB、对HTTP的技术体系认识和理解;
      2 对Nginx的功能认识,这涉及到对高并发、反向代理、负载均衡等技术功能的认识和实践。
       总之,多读在线文档,多实践,是熟练使用Nginx的关键。

2 如何发挥Nginx的性能?
  答:Nginx是一款轻量级、高性能的WEB服务器软件,在互联网化的今天,在搭建WEB的技术架构中,Nginx作为支持高并发的服务器软件,而受到大家的广泛喜爱和使用。要发挥Nginx的性能,我觉得首先要有好的机器硬件配置(内存要大),这个就不赘述;其次,要有合理的技术架构,比如Server分层+集群+负责均衡等,具体可参考业界电商架构实践。

3 如何在理解Nginx源码的基础上,通过编写Nginx插件来提高自己的编程能力?
  答:Nginx是用C语言来编写开发的,因此要编写Nginx插件首先还是要有较强的C语言编程能力,对Nginx主要的类型和常量(定义在/src/core目录下的多个头文件)要结合文档弄懂;其次,就是对数据结构和算法的深入理解和实现,其实一切都是基本功。

评分

参与人数 2可用积分 +11 收起 理由
daili0703 + 5 很给力!
Godbach + 6 赞一个!

查看全部评分

求职 : Linux运维
论坛徽章:
203
拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:182015年亚洲杯之约旦
日期:2015-04-05 20:08:292015年亚洲杯之澳大利亚
日期:2015-04-09 09:25:552015年亚洲杯之约旦
日期:2015-04-10 17:34:102015年亚洲杯之巴勒斯坦
日期:2015-04-10 17:35:342015年亚洲杯之日本
日期:2015-04-16 16:28:552015年亚洲杯纪念徽章
日期:2015-04-27 23:29:17操作系统版块每日发帖之星
日期:2015-06-06 22:20:00操作系统版块每日发帖之星
日期:2015-06-09 22:20:00
8 [报告]
发表于 2016-04-11 18:02 |只看该作者
只会用,不会开发        

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
9 [报告]
发表于 2016-04-12 08:49 |只看该作者
听说nginx的新版本也开始支持自有脚本和socket代理了。
web层如果可以操作redis,file,功能就很强大了
有发展为app server的潜质。
tengine和openresty都是很好的扩展。
不知道是否已有好的轻量级web框架实现。

论坛徽章:
43
15-16赛季CBA联赛之上海
日期:2020-11-04 09:36:5515-16赛季CBA联赛之北控
日期:2018-10-29 18:20:3415-16赛季CBA联赛之北京
日期:2018-10-06 21:39:5715-16赛季CBA联赛之天津
日期:2018-08-09 10:30:41ChinaUnix元老
日期:2018-08-03 17:26:00黑曼巴
日期:2018-07-13 09:53:5415-16赛季CBA联赛之吉林
日期:2018-03-30 12:58:4315-16赛季CBA联赛之佛山
日期:2017-12-01 10:26:3815-16赛季CBA联赛之上海
日期:2017-11-14 09:20:5015-16赛季CBA联赛之江苏
日期:2019-02-20 09:53:3319周年集字徽章-庆
日期:2019-08-27 13:23:2515-16赛季CBA联赛之广夏
日期:2019-09-03 18:29:06
10 [报告]
发表于 2016-04-12 08:52 |只看该作者
简单的用过Nginx,求本书好好学学。
  
如何在实战中熟练使用Nginx?
      baidu 查资料。

如何发挥Nginx的性能?
      不知道

如何在理解Nginx源码的基础上,通过编写Nginx插件来提高自己的编程能力?
      不会。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP