什么是web服务器
Web服务器一般指的是“网站服务器”,是某种驻留在因特网上的计算机程序,可以向请求终端提供服务,主要功能时存储、处理和传递网页给“客户”,传递内容一般是HTML文档、图像、样式表或脚本等,也可以放置网站文件以供浏览或下载。
WEB服务器也称为WWW(Word Wide Web)服务器,核心功能就是提供网页信息浏览服务,严格来说Web服务器只负责处理Http协议请求,发送静态页面的内容。
Apache
Apache(或httpd)服务,是Internet上使用最多的Web服务器技术之一,通俗来讲就是一个用于搭建网站的服务。
有两个版本:
http:超文本传输协议,通过线路以明文形式发送,默认使用80端口/TCP
https:经TLS/SSL安全加密的超文本传输协议,默认使用443端口/TCP
Nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
-
Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。
IO
操作系统与内核
现代计算机是由硬件和操作系统组成,我们的应用程序要操作硬件(如往磁盘上写数据),就需要先与内核交互,然后再由内核与硬件交互;
操作系统可以划分为:内核与应用两部分;
内核提供进程管理、内存管理、网络等底层功能,封装了与硬件交互的接口,通过系统调用提供给上层应用使用。
五种IO模型
阻塞式 IO、非阻塞式 IO 、IO 多路复用、信号驱动 IO、异步 IO
前四个被称为同步IO
Nginx架构
Nginx功能
静态的
web
资源服务器
html
,图片,
js
,
css
,
txt
等静态资源
|
http/https
协议的反向代理
|
结合
FastCGI/uWSGI/SCGI
等协议反向代理动态资源请求
|
tcp/udp
协议的请求转发(反向代理)
|
imap4/pop3协议的反向代理
|
高可靠性
|
模块化设计,较好的扩展性
|
支持热部署:不停机更新配置文件,升级版本,更换日志文件
|
低内存消耗:
10000
个
keep-alive
连接模式下的非活动连接,仅需
2.5M
内存
|
虚拟主机(
server
)
|
支持
keep-alive
和管道连接
(
利用一个连接做多次请求
)
|
访问日志(支持基于日志缓冲提高其性能)
|
路径别名
|
基于
IP
及用户的访问控制
|
url rewirte
|
支持速率限制及并发数限制
|
重新配置和在线升级而无须中断客户的工作进程
|
源码安装nginx
官方源码包下载地址:nginx: downloadhttps://nginx.org/en/download.html将安装包传入linux操作系统
1.解压,进入目录
2.下载c语言编辑器
3.编译缺少PCRE,下载相关依赖包
完成
源码安装流程:(下载相关依赖包)
nginx平滑升级
随着 nginx 越来越流行,并且 nginx 的优势也越来越明显,nginx 的版本迭代也来时加速模式,1.9.0版本的nginx更新了许多新功能,例如 stream 四层代理功能,伴随着 nginx 的广泛应用,版本升级必然越来越快,线上业务不能停,此时 nginx 的升级就是运维的工作了
nginx 方便地帮助我们实现了平滑升级。其原理简单概括,就是:
(1)在不停掉老进程的情况下,启动新进程。
(2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求。
(3)新进程接受新请求。
(4)老进程处理完所有请求,关闭所有连接后,停止。 这样就很方便地实现了平滑升级。一般有两种情况下需要升级 nginx,一种是确实要升级 nginx 的版本,另一种是要为 nginx 添加新的模块
Nginx 平滑升级原理
多进程模式下的请求分配方式
nginx 默认工作在多进程模式下,即主进程(master process)启动后完成配置加载和端口绑定等动作,fork出指定数量的工作进程(worker process),这些子进程会持有监听端口的文件描述符(fd),并通过在该描述符上添加监听事件来接受连接(accept)。
Nginx 核心配置
全局配置
·Main 全局配置段常见的配置指令分类
·正常运行必备的配置
·优化性能相关的配置
·用于调试及定位问题相关的配置
·事件驱动相关的配置
配置说明
- user nginx nginx; #启动Nginx工作进程的用户和组
- worker_processes [number | auto]; #启动Nginx工作进程的数量,一般设为和CPU核心数相同
- worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto ;
- 将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的
- 绑定并不是意味着当前nginx进程独占以一核心CPU,但是可以保证此进程不运行在其他核心上,
- 这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转
- 减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务 器的性能。
- #错误日志记录配置,语法:
- error_log file [debug | info | notice | warn | error | crit | alert | emerg]
- #其中debug级别的日志需要编译时使用--with-debug开启debug开关
- pid #文件保存路径
- pid /usr/local/nginx/logs/nginx.pid;
- worker_priority 0; #工作进程优先级,-20~20(19)
- worker_rlimit_nofile 65536; #所有worker进程能打开的文件数量上限,
- #包括:Nginx的所有连接(例如与代理服务器的连接等)
- #而不仅仅是与客户端的连接
- #另一个考虑因素是实际的并发连接数不能超过系统级别的最大打开文件 数的限制
- #最好与ulimit -n 或者limits.conf的值保持一致,
- daemon off; #前台运行Nginx服务用于测试、docker等环境。
- master_process off|on; #是否开启Nginx的master-worker工作模式,仅用于开发调试场景,默认为 on
Nginx 反向代理功能
简介:
Nginx 反向代理是一种网络服务器配置,它接收来自客户端的请求,并将这些请求转发到其他服务器上,然后将从后端服务器收到的响应返回给客户端。这个过程中,客户端不知道自己实际上是在与后端服务器通信,而不是直接与 Nginx 通信。这种方式可以隐藏后端服务器的真实IP地址,隐藏后端服务器的真实IP地址可以增加服务器的安全性,降低被攻击的风险,并且增加攻击者获取服务器信息的难度。
listen 82;当你在本地电脑安装了 Nginx,并将静态资源(比如 index.html 文件)放置在 Nginx 软件的安装目录下的 html 文件夹中。通过在浏览器中访问该 Nginx 监听的端口,你就可以访问到你的 HTML 页面【通过访问http://localhost:82/index.html】
功能:
应用场景 描述
负载均衡 - Nginx 可以将客户端请求分发到多个后端服务器,以此提高性能、可扩展性和可靠性。
缓存 -作为反向代理,Nginx 可以缓存页面的预渲染版本,加速页面加载时间,减少对后端服务器的请求。
SSL 终止 - Nginx 处理客户端的 SSL 连接,进行解密,并加密发送到后端服务器的响应,减轻后端服务器的负担。
缓存服务器 - 如果后端服务器未提供压缩的响应,Nginx 可以配置为在发送给客户端之前对响应进行压缩,节省带宽。
防御 DDoS 攻击 - Nginx 可以限制单个 IP 地址的请求和连接数量,通过限制正常用户值以上的行为来防御分布式拒绝服务攻击。此外,可以根据客户端的位置和请求头信息(如 "User-Agent" 和 "Referer")来阻止或限制访问。