N46期第十八周作业

第18周作业:

1、请列出 nginx 常用模块的各个优缺点以及区别

 

 

 

2、请写出用户通过 nginx 访问的工作过程

nginx主要用途是作为静态资源服务器和7层的反向代理服务器

用户基于http或https访问web资源时, 会经历一下步骤

1. 通过DNS解析网站的ip地址

2. 通过tcp连接与服务器建立三次握手

3. 三次握手后建立连接

4. 客户端发起http请求达到nginx服务器

5. 如果客户请求的资源是静态资源并且直接保存在了nginx服务器上, 那么nginx会予以相应

6. 如果请求的资源保存在了本地, 或者用户上传资源等, 那么nginx会将请求或者上传的资源发给后端的静态资源服务器, 如果需要保存数据, 那么会最终保存到存储服务器

7. 如果客户请求的是动态资源, 那么nginx会将请求转发给后台的动态服务器, 处理完毕后, 交还给nginx, 再交给用户

3、请写出实现 nginx-https 访问得步骤过程

1. nginx的https功能基于模块,ngx_http_ssl_module, 配置https时要先确保该模块已被编译进nginx; 如果是yum安装的nginx, 该模块已经被编译好.

2. 编辑配置文件

server {
listen 443 ssl;
ssl_certificate /data/crt/www.linux.as/www.linux.as.crt;
ssl_certificate_key /data/crt/www.linux.as/www.linux.as.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
listen 80;
server_name www.linux.as;

location / {
root /apps/nginx/html;
index index.html index.htm;
}
}

3. 搭建CA, 生成CA私钥和自签名证书

[22:49:41 root@c8prac /data/crt/www.linux.as]#openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt

[22:50:27 root@c8prac /data/crt/www.linux.as]#ls
ca.crt ca.key

4. 制作服务器私钥和证书申请文件

[22:54:58 root@c8prac /data/crt/www.linux.as]#openssl req -newkey rsa:4096 -nodes -sha256 -keyout www.linux.as.key -out www.linux.as.csr

[22:55:30 root@c8prac /data/crt/www.linux.as]#ls
ca.crt ca.key www.linux.as.csr www.linux.as.key

5. 签发服务器证书

[22:57:24 root@c8prac /data/crt/www.linux.as]#openssl x509 -req -days 3650 -in www.linux.as.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out www.linux.as.crt
Signature ok
subject=C = CN, ST = LN, L = AS, O = www.linux.as, OU = IT, CN = www.linux.as, emailAddress = 88@as.com
Getting CA Private Key
[22:58:17 root@c8prac /data/crt/www.linux.as]#ls
ca.crt ca.key ca.srl www.linux.as.crt www.linux.as.csr www.linux.as.key

6. 重启nginx服务, 通过浏览器验证

 

4、请写出隐藏 Nginx 版本号得过程

第一种方法: 保留配置文件中默认的server_token on; 修改源码包中的src/core/nginx.h文件, 然后重新编译nginx

1. 编辑www.linux.org域名的配置文件

2. 修改源码: 需要修改nginx.h文件中的第13,14行

[21:46:40 root@c8prac ~]#vim /usr/local/src/nginx-1.18.0/src/core/nginx.h

3. 备份编译安装主程序, 避免重新编译时出错

[21:50:16 root@c8prac ~]#cp /apps/nginx/sbin/nginx{,.bak}

4.  重新编译nginx

./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module

make && make install

5. 重启服务测试

第二种方法: 

修改server_tokens 为 off;

修改src/http/ngx_http_header_filter_module.c文件

第49行

static char ngx_http_server_string[] = 'Server: VERSION' CRLF;

重新编译nginx即可;

5、请写出 nginx 各种优化参数。以及每个参数得作用是什么

1. net.ipv4.tcp_tw_reuse=1 参数设置为1, 表示允许将TIME_WAIT状态的socket重新用于新的TCP连接, 这对于服务器来说意义重大, 因为总有大量的TIME_WAIT状态的连接存在

2. net.ipv4.tcp_keepalive_time=600 当keepalive启动时, TCP发送keepalive消息的频率; 默认2小时, 将其设置为10分钟, 可更快的清理无效连接

3. net.ipv4.tcp_fin_timeout=30 当服务器主动关闭连接时, socket保持在FIN_WAIT_2状态的最大时间

4. fs.file-max=1000000 表示单个进程最大可以打开文件数
5. net.ipv4.tcp_max_tw_buckets = 5000 表示操作系统允许TIME_WAIT
6. net.ipv4.ip_local_port_range=1024 65000 定义UDP和TCP链接的本地端口的取值范围
7. net.ipv4.tcp_rmem=10240 87380 12582912 定义了TCP接受缓存的最小值, 默认值, 较大值
8. net.ipv4.tcp_wmem=10240 87380 12582912 定义了TCP发送缓存的最小值, 默认值, 较大值
9. net.core.netdev_max_backlog=8096 当网卡接收数据包的速度大于内核处理速度时, 会有一个列队保存这些数据包. 这个参数表示该队列的较大值
10. net.core.rmem.default=6291456 表示内核套接字接受缓存区默认大小
11. net.core.wmem_default= 6291456 表示啮合套接字发送缓存区默认大小
12. net.core.rmem_max=12582912 表示内核套接字接受缓存区较大大小
13. net.core.wmem_max=12582912 表示内核套接字发送缓存区较大大小
14. net.ipv4.tcp_syncookies=1 与性能无关, 用于解决TCP的SYN攻击
15. net.ipv4.tcp_max_syn_backlog=8192 这个参数表示TCP三次握手建立阶段接受SYN请求列队的较大长度, 默认1024, 将其设置的大一写可使出现Nginx繁忙来不及accept新连接时, Linux不至于丢失客户端发起的连接请求
16. net.ipv4.tcp_tw_recycle=1 这个参数用于设置启用timewait快速回收
17. net.core.somaxconn=262114 选项默认值是128, 这个参数用于调节系统同时发起的TCP连接数, 在高并发的请求中, 默认的值可能会导致链接超时或重传, 因此需要结合高并发请求数来调优此值
18. net.ipv4.tcp_max_orphans=262114 选项用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上. 如果超过这个数字, 孤立连接将立即被复位并输出警告信息. 这个限制指示为了防止简单的DOS攻击, 不用过分依靠这个限制甚至认为的减小这个值, 更多的情况是增加这个值
 

 

原文地址:https://www.cnblogs.com/davidwang1970/p/13744130.html