问答、课件及录像地址:NGINX从入门到精通进阶系列培训

在使用NGINX的过程中,用户习惯于从 络搜索引擎/ 区获取特定问题的特定解,往往对 NGINX全貌缺乏系统性的理解。故此,F5开展了“ NGINX进阶系列课程”,阐述NGINX作为WEB服务器和负载均衡方案的功能特性和内在逻辑,通过课程并结合DEMO,为用户使用和部署NGINX提供明确指导。

我们现已完成了“基础篇”及“高级篇”的授课,并精心地整理了相关课件、录像及问答,希望大家可以感受到我们满满的诚意!另外, 将于本周六、周日进行的“应用篇”和“实战篇”的培训资料也会在培训结束后同一地址提供给大家。

希望您利用这些资料全方位的精准回顾并掌握此次培训的内容,祝大家学习进步!

对此次培训内容感兴趣的朋友,这里有新鲜出炉的 培训课件和录像,

课程名称

内容

基础篇

NGINX概要、安装、配置

NGINX日志、运维

高级篇

NGINX变量、API

NGINX SSL、NJS

应用篇

(课程结束后在原地址提供)

实践篇

(课程结束后在原地址提供)

以下为授课时“基础篇”及“高级篇”的在线提问,我们进行了整理, 发布在此供大家讨论。

F5

“基础篇”问与答

Q:编译安装后再添加模块,咋弄?

A:讲解PPT Page 25 load_module modules/module-name.so;注意只有mail, stream, geoip, image_filter, perl , xslt 模块可以动态加载。

Q:对于最新稳定版1.16.1,实现tcp/udp代理转发是否还需打第三方的nginx_tcp_proxy_module补丁?

A:要用nginx -V命令看该版本有没有编译stream模块,目前centos拿到的是可以动态, 区拿到的不可以,nginx plus无需修改可以直接用。

Q:lua可以动态加载吗?

A:可以动态加载的模块只有mail, stream, geoip, image_filter, perl , xslt。

Q:不太理解编译时指定配置的设计初衷或者有什么深意。对于开发测试环境与生产环境路径不一致的情况无法直接复制部署,必须重新编译,这个很难受。

A:编译时候指定模块可以自定义nginx,测试环境nginx和生产环境nginx版本需要严格一致。

Q:主配置文件和次级配置文件两个怎么关联的?

A:在主配置文件中使用inculde命令,如include conf.d/*.conf。

Q:PLUS的模块在 区版里也都有吗?

A:plus独有模块无法从 区下载。

Q:讲讲ipv6对nginx的影响吧。

A:nginx支持ipv6,但是一般设备从ipv4到ipv6 cpu会更多的消耗,15%-20%左右。

Q:server_name有什么用呢?

A:匹配http请求中的host 文头。

Q:两个不同配置文件中,请求命中两个server,是哪一个优先?

A:不同配置文件中,按照精确匹配->前缀->后缀->正则匹配。

Q:老师,listen这个命令是监听自己的IP地址还是访问者的IP地址?

A:nginx自己的地址。

Q:精确=和不使用正则表达式有什么区别吗?非精确匹配除了正则还有什么?

A:精确是location的路径和访问路径完全一致,~^是如果命中到这个项目,后续不去找正则,非精确的有前缀最长匹配和正则匹配。

Q:老师,配置这块官 有介绍文档吗?

A:http://nginx.org/en/docs/。

Q:问一下专家,反向代理对后端的健康探测,能探测到什么程度?

A:健康检查的内容在负载均衡环节讲解。

Q:Stream模块可以使用if语句吗?

A:这部分内容会在负载均衡的课程讲解。

Q:docker部署nginx,一个容器处理http/tcp连接,性能怎么样?

A:性能取决于给这个docker分配的资源。

Q:nginx可以作为正向代理工具吗?

A:可以。

Q:server_tokens off 开源版本和Plus有区别么?

A:server_token off的功能plus和 区版一致,server_token “”只能在plus上用, 区版无法加载server_token “”。

Q:location那个是干啥的?就那个例子?

A:匹配url,对请求进行分别处理。

Q:nginx日志如何分割

A:PPT已介绍。

Q:proxy_set_header能传递cookie吗?

A:可以。

Q:http add_header 继承关系能在讲一下吗?没听明白!

A:如果在http上下文写一个,然后在server上下文没有写,此时在这个server中也会对response上下文进行修改。

Q:您好 刚刚老师讲的使用真实ip我的理解 只是针对了http request ? 请问下 针对tcp请求可以使用真实ip么?

A:不可以。

Q:NGINX得session共享怎么实现?能讲一下么?

A:放到共享内存。

Q:能对日志自动分割吗?

A:可以。

Q:日志是否会根据连接或者线程分开,或者说能否按照连接和线程分开,从刚才的描述中应该都会存放在同一个文件,这样日志会很大吧,不好排查?

A:可以基于location配置不同文件名log来区分。

Q:请问日志如何自定义切割

A:ppt已介绍。

Q:RequestId会重复吗?

A:不会。

Q:请问运维监控方面,nginx需要监控哪些指标,对于日常运维就够了呢

A:”对于Nginx生产监控这块,不同企业可能关注的指标有所不同。常规的一些指标,比如CPU、内存、 络IO,磁盘IO,进程状态等,这是标准的监控指标,另外连接级别,关注并发连接数,关注drop掉的连接数量。请求级的话,重点关注RPS。对于Upstreams,关注健康检查通过的可用的服务器数量。SSL这块,关注当前并发连接跟每秒新建ssl连接,关注Handshakes failed数量。部分指标的话源生status模块没有,需要关注nginx的error log日志,来做同步输出处理。

相关性能指标的阈值设置,建议做个压测,有个上限值,做到心中有数。然后在运维过程中逐步调整。”

Q:如果有会话保持需求。reload是无损的吗?

A:无损的。

Q:问一下专家,反向代理对后端的健康探测,能探测到什么程度?

A:http get。

Q:restry tengine 和nginx咋选择

A:群里已解答。

Q:版本热更新的话,开源版能这样做吗?

A:可以。

Q:nginx版本优先选择开源版本吗?

A:优先选择商业版本,有支持。

Q:动态配置变更。

A:周末实战章节会介绍。

Q:监控模块,刚刚我听到是内嵌页面的方式进行整合,能支持api获取吗?

A:可以。

Q:Ngnix log 里 有 部分请求 错,如何处理?思路是什么?

A:request id来进行请求追踪。

Q:部署在生产环境的Nginx 特别是做为外联前置机的代理 是不具备常常升级的条件的 如何在升级和维持现版本稳定性之间取舍

A:”目前生产上对于nignx升级,不同客户会有不同做法,但主要是以下几种:

(1)投产之后不主动升级。只有遇到安全漏洞需修复或者功能无法满足时升级。这种方式平时省心,但一旦碰到被动升级,往往存在较大隐患。

(2)投产之后定期升级到stable版本。比如两年升级一次,每次升级到最新stable版本。

(3)紧跟 区版本stable版本,每次升级跨度不大,所以风险也可控,但升级频繁。

对于外联前置代理这个场景,建议采用(2)定期升级版本机制。在升级的时候通过灰度升级(Nginx集群N台先升级一台试点)以及热部署(方便版本回退)的方式来最大化规避版本升级的风险。”

Q:有没有相关的NGINX+生产试验指导材料呢?

A:请详见nginx.com官 。

Q:热升级功能的时候,新老master同时提供服务的时候,怎么保证监听端口的?

A:都是fork出来的,都能监听端口。

Q:Nginx默认与客户端保持一个长连接,但是到后端都是短链接?这个设置能修改吗?

A:可以用upstream 的keepalive参数设置,也可以用http上下文的keepalive设置。

Q:老师,请问Stream模块可以使用if语句吗?

A:不可以,可以用map功能取代if的部分功能做选择性负载均衡。

Q:请问,在使用Nginx时,能否将request复制一份,即同时由生成服务器和一个测试服务器都接收到请求?

A:可以。

Q:请问老师,access_log怎么追踪错误请求呢,又怎么确定错误请求的id呢

A:错误请求的信息一定是应用侧给出的,比如交易出了问题。

Q:请讲一下ipv6双栈情况下,nginx需要做什么特殊设置

A:1.14开始nginx是自动就支持的,不需要额外配置。

Q:集群方式下,不同服务器产生的RequestId会否重复?

A:理论上有极小概率重复,可以自己再构建requestid,比如加上服务器ip。

Q:不同操作系统下的NGIN的配置,是通用的吗?

A:不同build下的nginx配置不一定通用,和操作系统无关。

Q:能在大框架讲一下listen,server的流程吗?一个请求发给NGINX,然后他分发给服务器,这些动作是哪几天命令做的?

A:request->listen->server_name->proxy_paas。

Q:通过nginx做灰度发布?ningx有没有成熟的方案?

A:有,周末有实战。

Q:nginx event设置的连接数,具体可以支持多少个请求,连接数是指客户端请求连接数跟nginx与后端real server建立的连接数 加起来的吗

A:是每个work能打开的连接数。

Q:中间状态下 nginx.pid 文件中是老master的pid,还是 新master的pid?这牵扯到 nginx -s quit时发送给哪个master

A:新老不同pid,通知旧master下线,是直接指定旧master进程发信 的,而不是用-s。

Q:NGINX+有图形管理界面吗

A:有,可以用nginx controller。

Q:不同操作系统下,是可以NGINX混搭做集群嘛?

A:可以,但不建议。

Q:生产线可以平滑升级吗?

A:可以的。

A:理论上可以有青中老并存,但没必要这么做。可以通过linux命令来查看连接信息。

Q:一台F5低端型 ,相当于几台NGINX服务器?有过比较吗?

A:5台-10台 4C/8G Nginx。

Q:免费版本可以搭建nginx集群吗?

A:可以。

Q:平滑升级失败怎么回滚?

A:最后用WINCH,保留旧的master进程做回滚。

Q:像F5的管理界面就比较友好?

A:是的。

Q:如果想实现7层负载均衡, 是否需要购买nginx plus?

A:nginx oss可以做7层负载均衡。

Q:reload 业务有损耗,热升级呢?

A:同样也有一些损耗,但升级频率低,基本可以忽略。不像reload 频率高。

Q:老师,请问Stream模块可以使用if语句吗?

A:不可以。

Q :您好!请教一下 NGINX的反向代理 性能指标是怎么样的?

A:关注RPS。

Q:热升级流程中,向老Master进程发送SIGUSR2后,是谁拉起一个新的master进程?

A:老的master进程拉起一个新的master进程。

Q:Nginx Plus 的指标可以输出吗?还是需要通过API 去get?

A:通过API 去get, 也可以集成那个dashboard。

Q:nginx plus 较 区的nginx 在二次开发上是否有差异,目前在 区版本上开发的内容是否可以平滑迁移到plus版本?

A:基本可以。

Q:廖老师讲的那些日志变量,开源的也支持吗?

A:支持。

Q:tengine上的开发项目是否可以平滑迁移到plus版本?

A:基本可以,已有落地案例。

Q:容器方式安装,推荐吗?

A:容器方式也是正常的一种安装方式。

Q:请问老师,开源版本有没有上面方式可以监控或者记录nginx的tcp连接数呢?

A:stub_status模块有简单的几个指标,其中有个tcp连接数。

Q:如果,要用 区的nginx实现一个简单的waf功能,nginx支持哪些开发语言可以实现,老师能否简单说一下实现的步骤。最后是会生成一个新的模块吗?

A:直接加载mod_security模块。

Q:Nginx Plus 实时性能参数指标 支持API 输出;允许远端的一个http client去GET Nginx Plus的这些指标吗?

A:支持。

Q:加载动态模块后,如果在运行过程中不需要此模块,可以删掉load_module指令,执行reload操作吗?这种操作可行吗?

A:可以的。同时也需要去掉对应该模块提供的指令,如果配置了的话。

Q:请详细讲一下怎么通过log_format方式把偶发的错误日志捞出来

A:配置$request_id。

Q:如果允许远端Http client GET这些实时指标,请问具体的Http URI是哪一些?

A:请详见

Q:nginx 高可用,如何实现?还需要其他软件吗?如 keepalive?

A:前面部署F5,给nginx集群做负载。或者nginx依靠Keepalived做主备

Q:nginx 服务器上存在大量time_wait 状态的连接的解决方法?

A:keepalive连接复用。

F5

“高级篇”问与答

Q:父请求使用子请求产量是直接名字引用还是子请求return赋值?

A:直接使用变量。

Q:默默问一下 这用的是什么编程语言?

A:是根据Nginx 优化过的 Java。

Q:keyval的应用场景是什么?

A:希望通过API实现免reload配置来控制变量。

Q: SSL 卸载性能怎么样?

A:需要看具体的硬件参数,但是调优后是软件级别最好的软件。

Q: 开启SNI支持,编译安装时,需要加SNI相关的模块么?

A:不需要。

Q: 这个就是session id resumption功能吗?

A:是的,session cache 也可以叫做session id resumption。

Q: session cache 是基于什么做的?是session id 还是session cookie?

A:session id。

Q: 能够热升级ssl模块吗?

A:目前是不行的。

Q: nginx 支持 SM2吗?

A:只要编译使用最新的openssl版本就可以支持了。

Q: ./config -with-openssl=/usr/local/src/openssl-1.1.1d 请问./是指哪个目录的当前目录?

A:./是nginx的编译的目录啊。

Q: njs对redis,mysql支持好么?

A:对mysql和redis的集成还在roadmap上,这一块暂时用lua实现比较方便。

Q: subrequest能做请求重发,或者请求记录场景吗?

A:可以,nginx的mirror模块其实就是子请求的一种实现。

Q: 动态证书会不会更耗性能?

A:动态证书的优势是减少配置量和reload次数。准求极致的性能和速度推荐使用静态的方式, 需要做一些tradeoff。

Q:密钥如何管理更安全,请推荐下?

A:可以加证书/秘钥挂载到统一的证书服务器进行管理。

Q:http强制转https,用哪种方式性能最好?

A:使用301跳转即可。

Q:有插件开发的培训吗?

A:关注F5,这个可以考虑。

Q:subrequest 和 rewrite 区别?

A:rewrite只是url的重写并重新匹配,request上下文不变,子请求是nginx自己额外创建了一个新的上下文的请求,而且也会重新去find配置。

Q:api给F5返回后台服务器状态的例子比较好,njs举的几个例子感觉这些需求是不是在应用逻辑里实现比较好?

A:谢谢,现代应用越来越多的功能下沉给基础平台。

Q:Url过长用户无法获得服务器响应如何解决?

A:nginx可以设置large header,large_client_header_buffers。

Q:nsj可以发送udp请求吗?

A:udp暂时不能做subrequest的发送,但是可以做自定义的回复。

Q:API的调用需要对调用者进行验证吗?

A:可以配置认证,如培训中所讲可以用户名密码,jwt,客户端证书等都可以。

Q:请问老师,我们有个现 的应用场景,视频会议系统通过nginx做反向代理,但视频会议高并发的时候,就是很多用户使用视频系统开会。nginx性能不足,cpu很高,针对这种问题,如何处理这种问题?

A:可以先参加本周末的nginx性能调优培训,如果还有问题,该扩容了,或者还有别的原因,需要具体分析了。

Q:njs运算逻辑较多的情况下,对性能有多少影响?

A:这个要结合场景具体分析,总体来说专门为nginx优化的njs处理性能是非常好的。

NGINX从入门到精通进阶系列培训

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年1月25日
下一篇 2020年1月25日

相关推荐