1、请列出 nginx 常用模块的各个优缺点以及区别
ngx_http_auth_basic_module:实现基于用户的访问控制,使用basic机制进行用户认证,优点:使用登陆对话框的方式实现用户认证,缺点:认证文件依赖httpd-tools软件包。
ngx_http_stub_status_module:http状态统计,优点:可以查看http活动状态连接数、总连接数、成功的连接数、总共处理的请求数等,缺点:需要单独写个location。
ngx_http_ssl_module:用于nginx支持https协议,优点:支持自签名证书和通配符证书,缺点:使用低版本openssl有安全漏洞。
2、请写出用户通过 nginx 访问的工作过程
1、浏览器输入网址,通过DNS服务器将域名解析成IP地址。
2、IP地址路由到nginx服务器,经过TCP三次握手后发送http请求报文。
3、nginx服务器收到请求报文后,根据资源类型将处理请求直接处理或转发给后端服务器。
4、后端服务器将处理结果返回给nginx服务器。
5、nginx服务器将响应报文发给客户端,通过四次挥手关闭TCP连接,完成响应请求。
6、用户浏览器呈现响应页面。
3、请写出实现 nginx-https 访问得步骤过程
1.客户端发起HTTPS请求
客户端访问某个Web端的https地址,一般都是443端口
2.服务端的配置
采用https协议的服务器必须要有一套证书,可也通过一些组织申请,也可也自己制作,目前国内很多网站都是自己制作的,当你访问一个网站的时候提示证书不可信任就表示证书是自己做的,证书就是一个公钥和私钥匙,就像一把锁和钥匙,正常情况下只有你的钥匙才可也打开你的锁,你可也把这个送给别人让他锁住一个箱子,里面放满了钱或秘密,别人不知道里面放了什么而且别人也打不开,只有你的钥匙是可也打开的。
3.传送证书
服务端给客户端传递证书,其实就是公钥,里面包含了很多信息,例如证书得到颁发机构、过期时间等等。
4.客户端解析证书
这部分工作是由客户端完成的,首先验证公钥的有效性,比如颁发机构、过期时间等等,如果发现异常则会弹出一个警告框提示信息证书可能存在问题,如果证书没有问题就生成一个随机值,然后用证书对该随机值进行加密,就像2步骤所说把随机值锁起来,不让别人看到。
5.传送4步骤的加密数据
就是将用证书加密后的随机值传递给服务器,目的就是为了让服务器得到这个随机值,以后客户端和服务端的通信就可也通过这个随机值进行加密解密了。
6.服务端解密信息
服务端用私钥解密5步骤的随机值之后,得到客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,对称加密就是将信息和私钥通过算法混合在一起,这样除非你知道私钥,不然是无法获取其内部的内容,而正好客户端和服务端都知道这个私钥,所以只要机密算法够复杂就可以保证数据的安全性。
7.传输加密后的信息
服务端将用私钥加密后的数据传递给客户端,客户端可也被还原出原数据内容。
8.客户端加密信息
客户端用之前生成的私钥获解密服务端传递过来的数据,由于数据一直是加密的,因此即使第三方获取到数据也无法知道其详细内容。
4、请写出隐藏 Nginx 版本号得过程
修改server字段
如果想自定义响应报文的nginx版本信息,需要修改源码文件,重新编译
如果nginx配置文件中的字段设定为server_tokens on,请修改 src/core/nginx.h 修改13-14行,如下示例
[root@centos8-1 nginx-1.18.0]$pwd
/usr/local/src/nginx-1.18.0
[root@centos8-1 nginx-1.18.0]$vim src/core/nginx.h
#define NGINX_VERSION "1.1999" ##自定义修改版本号
#define NGINX_VER "zhanginx/" NGINX_VERSION ##自定义修改版本信息
如果nginx配置文件中的字段设定为server_tokens on,请修改 src/http/ngx_http_header_filter_module.c
第49行,如下示例:
static u_char ngx_http_server_string[] = "Server: zhanginx" CRLF;
####自定义修改版本
修改完之后回到nginx源码包里面,然后重新编译即可
[root@centos8-1 nginx-1.18.0]$nginx -V ##编译完成测试
nginx version: zhanginx/1.1999
[root@centos8-2 ~]$curl 10.0.0.8/test.php -I ##编译完成测试
HTTP/1.1 200 OK
Server: zhanginx
Date: Fri, 25 Sep 2020 03:31:08 GMT
Content-Type: text/html
Content-Length: 20
Last-Modified: Fri, 25 Sep 2020 03:18:08 GMT
Connection: keep-alive
ETag: "5f6d6170-14"
Accept-Ranges: bytes
注:src路径是在nginx源码包解压完成cd进去的
5、请写出 nginx 各种优化参数。以及每个参数得作用是什么
(1)worker_processes #启动nginx工作进程的数量,一般设为和cpu核心数相同
(2)worker_cpu_affinity #将nginx工作进程绑定到指定的cpu核心,默认Nginx是不进行进程绑定的。
(3)worker_priority #工作进程优先级
(4)worker_rlimit_nofile #所有worker进程能打开的文件数量上限
(5)gzip on #开启文件压缩
(6)keepalive_requests #允许最大请求的数量 keepalive_timeout #长连接超时时间
(7)use epoll #使用epoll模式
(8)multi-accept on #尽可能多的接受用户请求
(9)tcp_nopush on #防止网络阻塞