第18周作业:
1、请列出 nginx 常用模块的各个优缺点以及区别
ngx_http_access_module 四层基于IP的访问控制,可以通过匹配客户端源IP地址进行限制
ngx_http_auth_basic_module 状态页,使用basic机制进行用户认证,在编译安装nginx的时候需要添加编译参数--withhttp_stub_status_module,否则配置完成之后监测会是提示语法错误
ngx_http_stub_status_module 状态统计模块
ngx_http_gzip_module 文件的压缩功能
ngx_http_gzip_static_module 静态压缩模块
ngx_http_ssl_module nginx https 功能
ngx_http_rewrite_module 重定向模块,解析和处理rewrite请求
ngx_http_referer_module 防盗链功能,基于访问安全考虑
ngx_http_proxy_module 将客户端的请求以http协议转发至指定服务器进行处理
ngx_stream_proxy_module tcp负载,将客户端的请求以tcp协议转发至指定服务器处理
ngx_http_fastcgi_module 将客户端对php的请求以fastcgi协议转发至指定服务器助理
ngx_http_uwsgi_module 将客户端对Python的请求以uwsgi协议转发至指定服务器处理
ngx_http_headers_module 可以实现对头部报文添加指定的key与值
ngx_http_upstream_module 负载均衡模块,提供服务器分组转发、权重分配、状态监测、调度算法等高级功能
ngx_stream_upstream_module 后端服务器分组转发、权重分配、状态监测、调度算法等高级功能
ngx_http_fastcgi_module 实现通过fastcgi协议将指定的客户端请求转发至php-fpm处理
ngx_http_flv_module 为flv伪流媒体服务端提供支持
2、请写出用户通过 nginx 访问的工作过程
首先,用户通过客户端浏览器访问服务器,服务器端的Nginx服务是由俩个工作进程组成的,Master主进程负责接收访问请求,新请求到来时,
主进程传递信号给worker进程,由worker进程对请求进行处理.处理完后将结果返回给Master进程,由Master将最终结果返回给用户.
3、请写出实现 nginx-https 访问得步骤过程
1.客户端发起https请求
客户端访问某个web端的https地址,一般都是443端口
2.服务器的配置
采用https协议的服务器必须有一套证书,可以通过一些组织申请,也可以自己制作.
3.传送证书.
服务器给客户端传递证书
4.客户端解析证书
客户端首先会验证公钥的有效性,如果有异常,则会弹出一个警告框提示证书可能存在问题;如果没问题,就生成一个随机值,然后用证书对
该随机值进行加密
5.传送步骤4 的加密数据
将证书加密后的随机值传递给服务器
6.服务器端解密信息
服务器用私钥解密步骤5加密后的随机值之后,得到客户端传过来的随机值(私钥),然后将内容通过该值进行对称加密.
7.传输加密后的信息
服务器将用私钥加密后的数据传递给客户端,将客户端可以被还原出原数据内容
8.客户端解密信息
客户端用之前生成的私钥解密服务器端传递过来的数据.
4、请写出隐藏 Nginx 版本号得过程
server_tokens off;
5、请写出 nginx 各种优化参数。以及每个参数得作用是什么
mian模块:
worker_processes auto; 启动nginx工作进程的数量.
worker_cpu_affinity 0001 0010 0100 1000; 将Nginx工作进程绑定到指定的0-3cpu核心.可以减少cpu对进程的资源分配和回收以及内存管理,可以有效提升Nginx服务器的性能.
workerrlimit_nofile 65536;所有woker进程能打开的文件数量上限,设置这个必须要与ulimit -n 相一致,最好在/etc/security/limits.conf里面修改"* - nproc 65536".
events模块:
worker_connections 65536;设置单个工作进程的最大并发连接数
use epoll ; 使用epoll事件驱动
accept_mutex on; 默认是off,新请求会唤醒所有的worker进程,造成多余的cpu消耗.可以适当优化设置为on
mulit_accpet on; on时Nginx服务器的每个工作进程可以同时接受多个新的网络连接,默认是off
http模块:
server_tokens on ; 隐藏nginx版本号信息,若要自定义响应报文的Nginx版本信息,需要修改源码文件,重新编译
如果server_tokens on ,修改src/core/nginx.h 的 13-14行
#define NGINX_VERSION "1.18.9" 中的1.18.9改为想要的文字
#define NGINX_VER "nginx/" NGINX_VERSION 中的nginx改为想要的文字
如果server_tokens off,修改src/http/ngx_http_header_filter_module.c 的49行
statuc char ngx_http_server_string[] = "Server: nginx" CRLF; 中的nginx改为自己想要的文字即可.