Nginx的这些妙用,你肯定有不知道的!
Nginx 模块开发 由于 Nginx 的模块化特性,所以可以支持模块配置,也可以自定义模块,Nginx 的模块开发,程序员目前还不需要太深入。 Nginx 模块分类如下图: Nginx配置选项,解压 Nginx 后的配置操作示例: ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-pcre --with-http_ssl_module Nginx 面试题 ①Nginx 功能,你们项目中用到的 Nginx? 反向代理服务器 实现负载均衡 做静态资源服务器 作为 HTTP Server ②Nginx 常用命令有哪些? 启动nginx ./sbin/nginx 停止nginx ./sbin/nginx -s stop ./sbin/nginx -s quit 重载配置 ./sbin/nginx -s reload(平滑重启) service nginx reload 重载指定配置文件 ./sbin/nginx -c /usr/local/nginx/conf/nginx.conf 查看nginx版本 ./sbin/nginx -v 检查配置文件是否正确 ./sbin/nginx -t 显示帮助信息 ./sbin/nginx -h ③Nginx 常用配置? worker_processes 4; #工作进程数work_connections 65535; #每个进程的并发能力error_log /data/nginx/logs/error.log; #错误日志 ④Nginx 是如何实现高并发的? Nginx 采用的是多进程(单线程)&多路 IO 复用模型,异步,非阻塞。 一个主进程 Master,多个工作进程 Worker,每个工作进程可以处理多个请求 ,Master 进程主要负责收集、分发请求。 每当一个请求过来时,Master 就拉起一个 Worker 进程负责处理这个请求。同时 Master 进程也负责监控 Woker 的状态,保证高可靠性。 在 Nginx 中的 Work 进程中,为了应对高并发场景,采取了 Reactor 模型(也就是 I/O 多路复用,NIO)。 I/O 多路复用模型:在 I/O 多路复用模型中,最重要的系统调用函数就是 Select(其他的还有 epoll 等)。 该方法能够同时监控多个文件描述符的可读可写情况(每一个网络连接其实都对应一个文件描述符),当其中的某些文件描述符可读或者可写时,Select 方法就会返回可读以及可写的文件描述符个数。 Nginx Work 进程使用 I/O 多路复用模块同时监听多个 FD(文件描述符),当 Accept、Read、Write 和 Close 事件产生时,操作系统就会回调 FD 绑定的事件处理器。 这时候 Work 进程再去处理相应事件,而不是阻塞在某个请求连接上等待。 这样就可以实现一个进程同时处理多个连接。每一个 Worker 进程通过 I/O 多路复用处理多个连接请求。 为了减少进程切换(需要系统调用)的性能损耗,一般设置 Worker 进程数量和 CPU 数量一致。 ⑤Nginx 和 Apache 的区别? 轻量级,同样起 Web 服务,比 Apache 占用更少的内存及资源抗并发,Nginx 处理请求是异步非阻塞的,而 Apache 则是阻塞型的。 在高并发下 Nginx 能保持低资源低消耗高性能高度模块化的设计,编写模块相对简单,最核心的区别在于 Apache 是同步多进程模型,一个连接对应一个进程;Nginx是异步的,多个连接(万级别)可以对应一个进程。 ⑥Nginx 的 Upstream 支持的负载均衡方式? 轮询(默认) weight:指定权重 ip_hash:每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器 第三方:fair、url_hash ⑦Nginx 常见的优化配置有哪些? 调整 worker_processes:指 Nginx 要生成的 Worker 数量,最佳实践是每个 CPU 运行 1 个工作进程。 最大化 worker_connections。 启用 Gzip 压缩:压缩文件大小,减少了客户端 HTTP 的传输带宽,因此提高了页面加载速度。 为静态文件启用缓存。 禁用 access_logs:访问日志记录,它记录每个 Nginx 请求,因此消耗了大量 CPU 资源,从而降低了 Nginx 性能。 参考资料: 《Nginx 核心知识 100 讲》 《精通 Nginx》 nginx.conf 配置文件详解 《尚硅谷 Nginx》 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |