第十六周作业

1、对常用I/O模型进行比较说明

补充:
1.I/O模型的相关概念:
同步/异步:关注的是消息通信机制,即调用者在等待一件事情的处理结果时,被调用者是否提供完成状态的通知。
(1)同步:synchronous,被调用者并不提供事件的处理结果相关的通知消息,需要调用者主动询问事情是否处理完成。
(2)异步:asynchronous,被调用者通过状态、通知或回调机制主动通知调用者被调用者的运行状态。


阻塞/非阻塞:关注调用者在等待结果返回之前所处的状态。
(3)阻塞:blocking,指IO操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起,干不了别的事情。
(4)非阻塞:nonblocking,指IO操作被调用后立即返回给用户一个状态值,而无需等到IO操作彻底完成,在最终的调用结果返回之前,调用者不会被挂起,可以去做别的事情。


2.网络I/O模型:阻塞型、非阻塞型、复用型、信号驱动型、异步

常用模型的对比:
在这里插入图片描述
总结:

1、epoll只是一组API,比起select这种扫描全部的文件描述符,epoll只读取就绪的文件描述符,再加入基于事件的就绪通知机制,所以性能比较好
2、基于epoll的事件多路复用减少了进程间切换的次数,使得操作系统少做了相对于用户任务来说的无用功。
3、epoll比select等多路复用方式来说,减少了遍历循环及内存拷贝的工作量,因为活跃连接只占总并发连接的很小一部分。

2、nginx中的模块分类及常见核心模块有哪些

Nginx的模块分类:

1.核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件驱动机制 、进程管理等核心功能。
2.HTTP模块:
1)标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP应头设置 等等
2)可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如:Flash多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等
3.邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持
4.stream服务模块:: 实现反向代理功能,包括TCP协议代理
5.第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支持等

常见核心模块:
1.user #指定要使用的连接处理.通常不需要显式指定它,因为nginx默认情况下将使用最有效的方法。

Syntax:	user user [group];
Default:	
user nobody nobody;
Context:	main
注:工作进程使用的定义和凭据。如果省略,则使用名称等于 的组。usergroupgroupuser

2.pid #定义将存储主进程的进程 ID 的 。file

Syntax:	pid file;
Default:	pid logs/nginx.pid;
Context:	main

3.include #将另一个或与指定文件匹配的文件包括在配置中。包含的文件应包含语法正确的指令和块。filemask

Syntax:	include file | mask;
Default:	—
Context:	any
注:指明被包含的其他的配置文件

4.events #提供配置文件上下文,其中指定了影响连接处理的指令,即事件驱动相关设置。

Syntax:	events { ... }
Default:	—
Context:	main
events {                                 				 #事件驱动相关配置
    use epoll;                            				#指明并发连接请求的处理方式
    worker_connections 2048;              #每个worker进程能够打开的最大并发连接数
   #accpet mutex on | off;               
    #处理新连接的方式,on意味着由每个worker轮流处理新请求,off意味着每个新请求到达都会通知所有worker进程
}

5.error_log #定义配置错误日志路径和日志文件名

Syntax:	error_log file [level];
Default:	
error_log logs/error.log error;
Context:	main, , , , , httpmailstreamserverlocation

6.daemon #确定 nginx 是否应成为守护进程。主要在开发过程中使用。

Syntax:	daemon on | off;
Default:	daemon on;
Context:	main

7.master_process #确定是否启动工作(master-worker)进程。此指令适用于nginx开发人员

Syntax:	master_process on | off;
Default:	master_process on;
Context:	main

8.worker_priority #定义工作进程的计划优先级,就像命令完成一样:负表示优先级更高。允许的范围通常从 -20 到 20 不等。nicenumber

Syntax:	worker_priority number;
Default:	worker_priority 0;
Context:	main

3、描述nginx中worker_processes、worker_cpu_affinity、worker_rlimit_nofile、worker_connections配置项的含义

1.worker_processes [number | auto] #定义工作(worker)进程的数量。应该小于等于cpu的核数、auto为当前主机cpu的核数。

Syntax:	worker_processes number | auto;
Default:	worker_processes 1;
Context:	main

2.worker_cpu_affinity
#将工作进程绑定到 CPU 集。每个 CPU 集都由允许的 CPU 的掩码表示。应该为每个工作进程定义一个单独的集合。默认情况下,工作进程不绑定到任何特定的 CPU。
即:worker进程和通过cpumask通过绑定至指定的cpu。
目的:减少cpu 的来回切换

Syntax:	worker_cpu_affinity cpumask ...;
 				worker_cpu_affinity auto [cpumask];
Default:	—
Context:	main

例:

worker_processes    4;
worker_cpu_affinity 0001 0010 0100 1000;
同时将每个工作进程绑定到单独的 CPU
worker_processes    2;
worker_cpu_affinity 0101 1010;

binds the first worker process to CPU0/CPU2, and the second worker process to CPU1/CPU3.

3.worker_rlimit_nofile #指定worker进程能够打开的最大文件数。用于在不重新启动主进程的情况下增加限制

Syntax:	worker_rlimit_nofile number;
Default:	—
Context:	main

4.worker_connections #设置工作进程可以同时打开的最大连接数。

Syntax:	worker_connections number;
Default:	worker_connections 512;
Context:	events

注:这个数字包括所有连接(例如,与代理服务器的连接等),而不仅仅是与客户端的连接。另一个注意事项是,同时连接的实际数量不能超过打开文件最大数量的当前限制,可以通过worker_rlimit_nofile进行更改。

4、编译安装nginx,实现多域名 https"

编译安装nginx:

yum -y install gcc pcre-devel openssl-devel zlib-devel

useradd -s /sbin/nologin nginx

[root@centos8 ~]#cd /usr/local/src/
[root@centos8 src]#wget http://nginx.org/download/nginx-1.18.0.tar.gz
[root@centos8 src]#tar xf nginx-1.18.0.tar.gz 
[root@centos8 src]#cd nginx-1.18.0/
[root@centos8 nginx-1.18.0]#./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

[root@centos8 nginx-1.18.0]#make && make install

[root@centos8 nginx-1.18.0]#chown -R nginx.nginx /apps/nginx

[root@centos8 nginx-1.18.0]#ls /apps/nginx/sbin/
nginx

[root@centos8 nginx-1.18.0]#ln -s /apps/nginx/sbin/nginx /usr/sbin/
[root@centos8 ~]#nginx -v
nginx version: nginx/1.18.0

[root@centos8 ~]#nginx -V
nginx version: nginx/1.18.0
built by gcc 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) 
built with OpenSSL 1.1.1c FIPS  28 May 2019
TLS SNI support enabled
configure arguments: --prefix=/apps/nginx --user=nginx --group=nginx --withhttp_ssl_module --with-http_v2_module --with-http_realip_module --withhttp_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream
--with-stream_ssl_module --with-stream_realip_module


单域名(www.apc.org):(多域名重复该步骤:在加一个域名(www.mobile.org))。
证书:(证书的具体生成步骤:略)

#生成相对应的证书文件
[17:36:17 root@CS8-VM8-10 ssl][#ll
total 32
-rw-r--r-- 1 root root 1078 Aug  2 16:41 apc.org.crt
-rw-r--r-- 1 root root  980 Aug  2 16:41 apc.org.csr
-rw-r--r-- 1 root root 1155 Aug  2 16:41 ca.crt
-rw------- 1 root root 1704 Aug  2 16:41 ca.key
-rw-r--r-- 1 root root  752 Aug  2 16:41 certificate.sh
-rw-r--r-- 1 root root  764 Aug  2 17:04 mobile_certificate.sh
-rw-r--r-- 1 root root 2233 Aug  2 16:42 www.apc.org.crt
-rw------- 1 root root 1704 Aug  2 16:41 www.apc.org.key
[17:36:18 root@CS8-VM8-10 ssl][#pwd 
/apps/nginx/conf.d/ssl
[17:36:26 root@CS8-VM8-10 ssl][#

[17:13:06 root@CS8-VM8-10 conf.d][#vim apc.conf 

  1 server {
  2     listen  80;
  3     listen 443 ssl;
  #指向包含当前虚拟主机和CA的两个证书信息的文件,一般是crt文件(两者合并为:www.apc.org.crt)
  4     ssl_certificate /apps/nginx/conf.d/ssl/www.apc.org.crt;
  
  #当前虚拟主机使用的私钥文件,一般是key文件
  5     ssl_certificate_key /apps/nginx/conf.d/ssl/www.apc.org.key;
  
  #配置ssl缓存
  6     ssl_session_cache shared:sslcache:20m; 

  #客户端连接可以复用ssl session cache中缓存的有效时长,默认5m                                                                    
  7     ssl_session_timeout 10m;
  8 
  9 
 10 
 11     server_name     www.apc.org;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值