忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 58683 | 回复: 69

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

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
发表于 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, 下载次数: 1000)

论坛徽章:
69
15-16赛季CBA联赛之青岛
日期:2017-05-12 11:03:28数据库技术版块每日发帖之星
日期: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每日论坛发贴之星
日期:2016-07-01 06:20:00操作系统版块每日发帖之星
日期:2016-07-01 06:20:00
发表于 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 赞一个!

查看全部评分

论坛徽章:
210
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:322015亚冠之全北现代
日期:2016-05-11 17:05:27操作系统版块每日发帖之星
日期:2016-05-10 19:23:04操作系统版块每日发帖之星
日期:2016-05-10 19:23:04操作系统版块每日发帖之星
日期:2016-05-10 19:23:04操作系统版块每日发帖之星
日期:2016-05-10 19:23:04操作系统版块每日发帖之星
日期:2016-05-10 19:22:58数据库技术版块每日发帖之星
日期:2016-05-10 19:23:04数据库技术版块每日发帖之星
日期:2016-05-10 19:23:04操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
发表于 2016-04-11 14:20 来自手机 |显示全部楼层
本帖最后由 action08 于 2016-04-11 14:21 编辑

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

论坛徽章:
16
处女座
日期:2014-07-18 14:50:542017金鸡报晓
日期: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综合交流区版块每日发帖之星
日期:2015-10-10 06:20:00IT运维版块每日发帖之星
日期:2015-09-01 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17
发表于 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
发表于 2016-04-11 14:59 |显示全部楼层
回复 1# crazyhadoop

好活动,支持!


   

论坛徽章:
29
CU大牛徽章
日期:2013-05-20 10:45:13数据库技术版块每日发帖之星
日期:2015-09-07 06:20:00每日论坛发贴之星
日期: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:29
发表于 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
发表于 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运维
论坛徽章:
202
拜羊年徽章
日期: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
发表于 2016-04-11 18:02 |显示全部楼层
只会用,不会开发        

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

论坛徽章:
23
IT运维版块每日发帖之星
日期:2016-04-01 06:20:00数据库技术版块每日发帖之星
日期:2016-06-30 06:20:0015-16赛季CBA联赛之福建
日期:2016-07-18 09:10:1715-16赛季CBA联赛之广东
日期:2016-07-25 18:17:09C
日期:2016-10-25 16:10:552017金鸡报晓
日期:2017-02-08 10:39:4215-16赛季CBA联赛之同曦
日期:2017-02-11 13:43:1415-16赛季CBA联赛之同曦
日期:2017-05-13 19:24:3815-16赛季CBA联赛之上海
日期:2017-07-19 17:38:4415-16赛季CBA联赛之福建
日期:2017-08-02 09:45:33数据库技术版块每日发帖之星
日期:2016-06-29 06:20:002015-2016NBA季后赛纪念章
日期:2016-06-28 17:40:28
发表于 2016-04-12 08:52 |显示全部楼层
简单的用过Nginx,求本书好好学学。
  
如何在实战中熟练使用Nginx?
      baidu 查资料。

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

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

本版积分规则

SACC2017购票8.8折优惠进行时

2017中国系统架构师大会(SACC2017)将于10月19-21日在北京新云南皇冠假日酒店震撼来袭。今年,大会以“云智未来”为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置2大主会场,18个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100余位技术专家及行业领袖来分享他们的经验;并将吸引4000+人次的系统运维、架构师及IT决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年8月2日前

活动链接>>
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP