1、请列出 nginx 常用模块的各个优缺点以及区别
核心模块:是nginx服务器正常运行必不可少的模块,提供错误日志记录,配置文件解析,事件驱动机制,进程管理等核心功能
标准http模块:提供http协议解析相关的功能,比如,端口配置,网页编码设置,http响应头设置等等
可选的http模块:主要用于拓展标准的http功能,让nginx能处理一些特殊的服务,比如flash多媒体传输,、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等
邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持
stream(反向代理)服务模块:实现反向代理功能,包括TCP协议代理
第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支持等
2、请写出用户通过 nginx 访问的工作过程
基于cs,nginx的服务端监听80或443,客户端访问,
nginx启动,在默认工作模式下,master进程以root身份启动,加载配置文件,按照配置文件中的配置,开启相应数量的worker进程,通过tcp的三次握手连接处理客户端请求,配置文件中的两个选项可以设定断开连接的,一是按照时间,二是按照获取资源的次数,达到要求后,断开与客户端的连接.
3、请写出实现 nginx-https 访问得步骤过程
客户端发起https请求,一般是443端口
服务端采用https,必须有一套数字证书,这套证书就是一队公钥和私钥
传送服务器的证书给客户端
客户端解析验证服务端证书,客户端验证服务器的证书信息,如果发现异常,会弹出一个警告框,提示证书存在问题,如果证书没有问题,就生成一个随机值,用证书对随机值进行非对称加密
服务端收到客户端加密的信息,用自己的私钥解密后,得到了客户端传来的随机值
服务端将数据利用随机值进行对称加密,再发送给客户端
客户端用之前生成的随机值解密服务端传过来的数据,获得了解密后的内容
4、请写出隐藏 Nginx 版本号得过程
想自定义响应报文的nginx版本信息,需要修改源码文件,重新编译
设定server_tokens off 修改解压目录下的src/http/ngx_http_header_filter_module.c
static char ngx_http_server_string[] = "Server: nginx" CRLF;
示例:把其中的nginx改为自己想要的文字即可
5、请写出 nginx 各种优化参数。以及每个参数得作用是什么
worker-processes auto; #工作进程的数量,一般和cpu核心数相同
worker_cpu_affinity 01 10; #2核心cpu 将工作进程绑定到指定的cpu,每个cpu都有缓存,可以提高速度
work_priority -19; #工作进程的优先级
worker_rlimit_nofile 100000; #所有工作进程打开的文件数量,最好与ulimit -n 的值保持一致.
worker_connections 65536; #设定单个工作进程的最大并发连接数
accept_mutex on; #避免出现"惊群"现象
multi_accept on; #每个工作进程可以同时接受多个的连接