文章目录
概念介绍
Apache和nginx的介绍
工作原理和概念:
Apache的工作原理和概念
工作原理:
多进程模型:Apache默认使用的是多进程模型,每个子进程可以处理一个或多个客户端请求。
线程模型:Apache也可以配置成使用线程模型(如使用mod_thread模块),在这种模式下,每个子进程可以创建多个线程来处理请求。
请求处理流程:Apache接收到请求后,会根据配置文件(通常是httpd.conf)中的指令来解析请求,然后调用相应的模块来处理请求。
工作模式:
Prefork模式:预先创建多个子进程,每个子进程处理一定数量的请求。
Worker模式:使用线程来处理请求,每个子进程可以创建多个线程。
Event模式:使用事件驱动的方式来处理请求,适用于高并发场景。
优缺点
优点:
稳定性和成熟度:Apache是一个成熟且稳定的Web服务器,广泛用于静态内容和动态内容的交付。
丰富的模块支持:Apache有大量可用的模块,可以轻松扩展其功能。
强大的社区支持:由于其广泛的使用,Apache有一个强大的社区支持,文档和教程非常丰富。
缺点:
性能瓶颈:在高并发场景下,Apache的多进程模型可能会成为性能瓶颈。
内存占用较高:每个子进程都需要独立的内存空间,可能导致较高的内存占用。
Nginx的工作原理和概念
工作原理:
异步非阻塞I/O:Nginx使用的是异步非阻塞I/O模型,可以同时处理大量的并发连接。
事件驱动:Nginx基于事件驱动模型,每个事件(如新的客户端连接、数据读写等)都会触发相应的处理逻辑。
请求处理流程:Nginx接收到请求后,会根据配置文件(通常是nginx.conf)中的指令来解析请求,然后调用相应的模块来处理请求。
工作模式:
Master-Worker模式:Nginx有一个主进程和多个工作进程。主进程负责接收客户端请求并分配给工作进程,工作进程负责实际处理请求。
优点:
高性能:Nginx在高并发场景下表现出色,能够高效处理大量并发连接。
低资源消耗:由于其异步非阻塞I/O模型,Nginx的资源消耗较低。
丰富的功能模块:Nginx支持丰富的功能模块,可以轻松扩展其功能。
缺点:
处理复杂请求的能力较弱:Nginx在处理复杂的动态请求时,可能不如Apache强大。
配置复杂性:Nginx的配置文件相对复杂,新手可能需要花费更多时间来学习和调试。
总体的架构思想
Apache的架构思想:
模块化设计:Apache采用模块化设计,可以通过加载不同的模块来扩展其功能。
多进程或多线程模型:Apache支持多种工作模式,包括多进程和多线程模型,以适应不同的应用场景。
Nginx的架构思想:
事件驱动:Nginx采用事件驱动架构,能够高效处理大量并发连接。
异步非阻塞I/O:Nginx利用异步非阻塞I/O模型,实现了高性能和低资源消耗。
总结
总结来说,Apache和Nginx各有优缺点,选择哪一个取决于具体的应用场景和需求。Apache更适合处理复杂的动态请求,而Nginx在高并发场景下表现更优秀。在实际应用中,常常会结合使用Apache和Nginx,发挥各自的优势。
基本配置实验
nginx的源码编译
下好安装包:
安装C语言以及其他环境
开始编译
如果后面没有服务,需要执行 make && make install 命令
解释执行make && make install 命令原因
在Linux中通过源码安装软件时,通常会经历以下几个步骤:
- 下载源码:从官方网站或其他可信来源下载软件的源码包。
- 解压源码:使用适当的工具(如
tar
,unzip
等)解压源码包。- 配置编译选项:进入解压后的源码目录,运行
./configure
脚本来配置编译选项。这个脚本会检查系统环境,确定软件的安装路径以及其他配置选项,并生成Makefile文件。- 编译源码:运行
make
命令来编译源码。这个过程会根据前面生成的Makefile文件中的规则,将源码编译成可执行文件或库文件。- 安装软件:运行
make install
命令来安装编译后的软件。这个过程会将编译好的文件复制到系统中的适当位置,使其可以在系统中正常运行。为什么需要执行
make && make install
编译过程:
make
命令负责根据configure
脚本生成的Makefile文件,将源码编译成可执行文件或库文件。这一步骤是必要的,因为不同的系统环境可能需要不同的编译选项和优化参数。安装过程:
make install
命令负责将编译好的文件复制到系统中的适当位置。这样,系统就可以找到并运行这些文件。如果不执行make install
,编译好的文件将不会被安装到系统中,软件也无法正常运行。
总结 : 执行make && make install
命令是源码安装过程中必不可少的步骤。make
命令负责编译源码,而make install
命令负责将编译好的文件安装到系统中,使其可以正常运行。这两个步骤确保了软件能够在当前系统环境中正确运行。
nginx的平滑升级及版本回滚
准备编译:
之后:那个yebeichen是自定义的名字
操作NGINX服务
命令解释:
您遇到的错误信息 nginx: invalid option: "-s start"
表明您在尝试使用 -s start
参数启动Nginx时出现了问题。实际上,-s
参数在Nginx中用于发送信号给Nginx主进程,而不是用来启动Nginx。
正确的使用 -s
参数的方式是:
-s stop
:立即停止Nginx。-s quit
:优雅地停止Nginx。-s reopen
:重新打开日志文件。-s reload
:重新加载配置文件。
如果您想要启动Nginx,应该直接运行Nginx的可执行文件,而不需要任何额外的参数。例如:
/usr/local/nginx/sbin/nginx
这将启动Nginx服务。如果您希望使用Systemd来管理Nginx服务,可以使用以下命令:
systemctl start nginx
请确保你有适当的权限来执行这些命令,如果需要,可以在命令前加上 sudo
。
如果已经在使用Systemd管理Nginx,并且希望启动服务,那么使用 systemctl start nginx
是更合适的方法。如果您手动启动Nginx,那么只需运行Nginx的可执行文件即可。
(之后一定要去新版本的 nginx下面执行 make &&make install 这里应该是Server后面1.26的,我这里后面执行忘截图了)
启动文件
解析:
这段代码定义了一个 systemd 服务单元文件,用于管理 Nginx Web 服务器。Systemd 是大多数现代 Linux 发行版使用的系统和服务管理器。下面是对这个 nginx.service
文件的逐节解释:
[Unit] 部分
Description=The NGINX HTTP and reverse proxy server
: 描述服务的简短说明。After=syslog.target network-online.target remote-fs.target nss-lookup.target
: 指定此服务应在哪些其他服务之后启动。这里表示 Nginx 应在系统日志服务、网络服务、远程文件系统和名称服务查找服务启动后启动。Wants=network-online.target
: 表示如果network-online.target
成功启动,则 Nginx 服务也会被启动。这是一种弱依赖关系,意味着即使网络服务启动失败,Nginx 也可能会尝试启动。
[Service] 部分
Type=forking
: 指示服务的启动行为。对于 Nginx,这意味着主进程启动后会 fork 出子进程,而主进程将退出。systemd 会监控子进程中的一个特定进程(通常是 PID 1)作为服务的代表。PIDFile=/usr/local/nginx/logs/nginx.pid
: 指定 Nginx 主进程的 PID 文件的位置。systemd 会使用这个文件来跟踪 Nginx 的主进程。ExecStartPre=/usr/local/nginx/sbin/nginx -t
: 在启动 Nginx 之前执行的命令,用于检查配置文件的语法是否正确。ExecStart=/usr/local/nginx/sbin/nginx
: 启动 Nginx 服务的命令。ExecReload=/usr/local/nginx/sbin/nginx -s reload
: 重新加载 Nginx 配置的命令。ExecStop=/bin/kill -s QUIT $MAINPID
: 停止 Nginx 服务的命令。这里使用QUIT
信号来优雅地关闭 Nginx。PrivateTmp=true
: 为服务分配独立的临时空间,这样服务就不能访问其他服务的临时文件,增加了安全性。
[Install] 部分
WantedBy=multi-user.target
: 表示这个服务应该在多用户模式下启用。当系统启动到多用户模式时,这个服务会被自动启动。
通过将这个文件放置在 /lib/systemd/system/
目录下,并使用 systemctl
命令,你可以控制 Nginx 服务的启动、重启、停止和状态查询等操作。例如:
# 启动 Nginx 服务
systemctl start nginx.service
# 停止 Nginx 服务
systemctl stop nginx.service
# 重启 Nginx 服务
systemctl restart nginx.service
# 重新加载 Nginx 配置
systemctl reload nginx.service
# 查看 Nginx 服务状态
systemctl status nginx.service
# 设置开机自启
systemctl enable nginx.service
# 取消开机自启
systemctl disable nginx.service
请注意,这个 nginx.service
文件是针对特定安装路径的 Nginx 配置的,如果你的 Nginx 安装路径不同,你需要相应地修改文件中的路径。
nginx命令参数(全局配置)
worker_cpu_affinity 0101 1010
worker_cpu_affinity
指令用于设置 Nginx 工作进程的 CPU 亲和性。这允许你将特定的工作进程绑定到特定的 CPU 核心,从而优化性能,尤其是在多核或多处理器系统上。
worker_cpu_affinity
指令后面跟的是一个或多个二进制掩码,每个掩码对应一个工作进程。每个二进制位代表一个 CPU 核心,其中 1 表示该核心会被使用,0 表示不使用。
例如,假设你有一个 4 核心的 CPU,且你设置了两个工作进程:
- 第一个工作进程的 CPU 亲和性掩码为
0101
,这意味着它将绑定到第 1 和第 3 个核心(从右到左计数)。 - 第二个工作进程的 CPU 亲和性掩码为
1010
,这意味着它将绑定到第 2 和第 4 个核心。
这样设置的好处是可以避免 CPU 之间的竞争,提高缓存局部性,从而提升整体性能。
以下是具体的解释:
0101
:表示第 1 和第 3 个核心(因为这些位置上的二进制位为 1)。1010
:表示第 2 和第 4 个核心。
如果你有更多的 CPU 核心或工作进程,你可以继续添加更多的掩码。
需要注意的是,worker_cpu_affinity
的效果取决于操作系统和硬件的支持。如果操作系统不支持 CPU 亲和性,那么这个指令将被忽略。
此外,如果你不确定如何设置 CPU 亲和性,或者你的系统没有特别高的并发需求,通常不需要手动设置这个指令。默认情况下,Nginx 会自动分配工作进程到所有可用的 CPU 核心。
第二部分
这条命令使用了 Apache Benchmark (ab
) 工具,它是 Apache HTTP 服务器项目的一部分,用于测试 HTTP 服务器的性能。ab
可以模拟多个并发请求来测试服务器的负载能力。
命令中的选项和参数解释如下:
-c 5000
:表示并发(concurrent)请求的数量为 5000。这意味着ab
将同时发送 5000 个请求到目标服务器
(5000超标了,是因为当前会话只支持1024。可以强行临时增加当前会话的文件描述的数量ulimit -n 100000)。-n 10000
:表示总共要发送的请求数量为 10000。即使指定了并发请求数,ab
也会确保总共发送 10000 个请求。
请求是否 崩溃也跟当前会话窗口是否支持的请求数量有很大关系:
在linux里面/etc/security/limits.conf的nginx nofile 10000配置和在shell窗口设置命令ulimit -n 100000 执行:ab -n 30000 -c 15000 http://172.25.253.153/index.html为什么这个命令不会崩,还请大家解决回答
理论展示:
location用法
alias 说到底就是定义一个别名或者软连接,学过Apache就很容易明白
用户认证:
错误页面:
重点关注注释下面的和server下面的第三行
自定义错误日志
检测文件是否存在
把多余的注释掉
$uri内置变量简述
nginx里的$uri变量是Nginx内置的变量之一,用于表示当前请求的URI部分(不包括协议、主机名、端口和参数)。
在Nginx的配置中,变量是一个非常重要的概念,它们可以在配置中的不同位置被引用,以动态地根据请求的特征来调整Nginx的运行行为。$uri
是一个内置的变量,它代表当前请求的标准化后的URI,即除去了前面路径的尾部斜线[1]。
例1,如果请求的URL是 http://example.com/foo/bar.html
,那么 $uri
的值将会是 /bar.html
。
使用$uri
变量可以帮助我们编写更加灵活和强大的location匹配规则,以及控制Nginx如何处理这些请求。例如,可以利用$uri
来指定特定的返回值、进行内部重定向或反向代理等操作。
例2
在Nginx的配置文件中,try_files
指令用于处理请求的路径。它会尝试按顺序查找指定的文件,如果找不到,则会返回默认的错误页面。
try_files $uri $uri.html $uri/index.html /error/default.html;
这一行的含义如下:
$uri
:这是请求的原始URI。例如,如果用户请求的是/about
,那么这里就是/about
。$uri.html
:这是将请求的URI作为文件名,添加.html
后缀。例如,如果用户请求的是/about
,那么这里就是/about.html
。$uri/index.html
:这是将请求的URI作为目录,并在其下查找index.html
文件。例如,如果用户请求的是/about
,那么这里就是/about/index.html
。/error/default.html
:这是默认的错误页面。如果前面的三个路径都找不到对应的文件,那么就会返回这个页面。
所以,当一个请求到达Nginx时,它会首先尝试找到请求的原始URI对应的文件,如果找不到,就尝试找到请求的URI添加.html
后缀的文件,如果还找不到,就尝试找到请求的URI作为目录下的index.html
文件,如果仍然找不到,最后就会返回/error/default.html
这个默认的错误页面。
nginx长链接控制
nginx的压缩功能
nginx的内建变量
代码:
nginx的网页从写功能
break和latest的区别和作用是什么
在Nginx的配置文件中,特别是在使用 rewrite
指令时,break
和 last
是两个重要的标志,它们决定了重写规则如何影响后续的请求处理流程。下面是它们的区别和作用:
last
标志
- 作用:当Nginx执行一个
rewrite
指令并遇到last
标志时,它会停止当前的请求处理,并将新的URI重新开始新一轮的内部处理。这意味着Nginx会立即开始一个新的location匹配过程,就好像一个新的请求刚刚到达一样。 - 特点:使用
last
标志后,所有在当前server
块内的后续rewrite
规则都不会被执行,因为Nginx已经开始了一个新的location匹配过程。
break
标志
- 作用:当Nginx执行一个
rewrite
指令并遇到break
标志时,它同样会停止当前的请求处理,但不会开始新的location匹配。相反,Nginx会继续执行当前location块内剩余的指令,包括输出过滤器、日志记录等。 - 特点:使用
break
标志后,当前location
块内的后续rewrite
规则不会被执行,但其他指令(如try_files
、proxy_pass
等)会按照顺序继续执行。
示例
假设有以下的Nginx配置片段:
location / {
rewrite ^/old-path/(.*)$ /new-path/$1 last;
# 这里的指令不会被执行,因为使用了 `last` 标志
proxy_pass http://backend;
}
location /new-path/ {
# 处理 /new-path/ 下的请求
proxy_pass http://new-backend;
}
在上面的例子中,如果请求的URI是 /old-path/something
,Nginx会将URI重写为 /new-path/something
,然后开始一个新的location匹配过程,最终由 /new-path/
对应的 location
块处理请求。
如果将 last
改为 break
:
location / {
rewrite ^/old-path/(.*)$ /new-path/$1 break;
# 这里的指令会继续执行,因为使用了 `break` 标志
proxy_pass http://backend;
}
location /new-path/ {
# 这里的指令不会被执行,因为没有机会匹配到
proxy_pass http://new-backend;
}
在这种情况下,URI被重写为 /new-path/something
,但Nginx不会开始新的location匹配,而是继续执行当前 location
块内的 proxy_pass
指令,将请求转发到 http://backend
。
总结来说,last
用于结束当前的location处理并开始新的匹配,而 break
用于结束当前的rewrite规则处理,但继续执行当前location内的其他指令。选择使用哪个标志取决于你的具体需求和预期的请求处理流程。
nginx网页从写实战案例(break小实验)
后面输出之后request_filename输出有 ’ ?’ 说明没有完全定义(忘截图了,只能口述)
if判定:
return介绍
- return`指令可以用于任何location块中,包括根location、正则表达式location和路径前缀location。
return
指令会导致Nginx立即返回响应,不再处理当前location块中的其他指令。- 如果
return
指令中没有指定状态码,Nginx会默认使用200 OK状态码。 - 如果
return
指令中没有指定响应体,Nginx会使用默认的错误页面。
总之,return
指令在Nginx配置中是一个非常有用的工具,可以用于返回特定的HTTP状态码、重定向请求和显示自定义的错误消息。
nginx的反向代理
反向代理的概念
反向代理(Reverse Proxy)是一种代理方式,它位于客户端和实际服务器之间。客户端发送请求到反向代理服务器,反向代理服务器根据请求目标选择合适的后端服务器处理请求,并将结果返回给客户端。对于客户端来说,它并不知道实际的服务器地址,只知道反向代理服务器的地址。
反向代理的实现原理
反向代理的实现原理主要包括以下几个步骤:
- 接收请求:反向代理服务器接收客户端发送的请求。
- 解析请求:反向代理服务器解析请求中的目标地址和端口。
- 选择后端服务器:根据解析得到的目标地址和端口,反向代理服务器选择合适的后端服务器来处理请求。
- 转发请求:反向代理服务器将请求转发到选定的后端服务器。
- 返回响应:后端服务器处理完请求后,将响应返回给反向代理服务器,反向代理服务器再将响应转发给客户端。
反向代理的工作模式
反向代理的工作模式主要有以下几种:
- 负载均衡:通过反向代理服务器将请求分发到多个后端服务器,实现负载均衡,提高系统的并发处理能力和可靠性。
- 安全防护:反向代理服务器可以作为一道防护屏障,隐藏后端服务器的真实地址,防止直接攻击。
- 缓存加速:反向代理服务器可以缓存常用请求的响应结果,减少后端服务器的压力,提高响应速度。
- SSL卸载:反向代理服务器可以负责处理SSL加密请求,减轻后端服务器的负担。
Nginx在反向代理中的应用
Nginx是一个广泛使用的反向代理服务器,它具有高效、稳定、灵活等特点。以下是Nginx在反向代理中的具体应用:
- 配置虚拟主机:通过配置不同的域名或IP地址,Nginx可以将请求分发到不同的后端服务器。
- 负载均衡:Nginx支持多种负载均衡算法,如轮询、最少连接数、IP哈希等,可以将请求均匀地分发到多个后端服务器。
- 缓存加速:Nginx支持HTTP代理缓存,可以缓存后端服务器的响应结果,减少重复请求,提高响应速度。
- SSL卸载:Nginx可以处理SSL加密请求,卸载SSL加密任务,减轻后端服务器的负担。
总结
反向代理是一种重要的运维技术,通过在客户端和实际服务器之间设置一个代理服务器,实现请求的转发和响应的返回。Nginx是一个常用的反向代理服务器,它通过高效的请求处理和灵活的配置,实现了负载均衡、安全防护、缓存加速等多种功能,广泛应用于各种复杂的网络环境中。
实验(准备三台虚拟机)另外两台安装Apache服务,并且是redhat9版本
nginx:172.25.253.153/24
httpd1: 172.25.253.20/24
httpd2: 172.25.253.30/24
因为172.25.253.30的默认监听端口是80,所以需要改一下,
172.25.253.30操作:
把监听端口改成8080或者添加8080
测试:
实现 Nginx 四层负载均衡
Nginx在1.9.0版本开始支持tcp模式的负载均衡,在1.9.13版本开始支持udp协议的负载,udp主要用于
DNS的域名解析,其配置方式和指令和http 代理类似,其基于ngx_stream_proxy_module模块实现tcp
负载,另外基于模块ngx_stream_upstream_module实现后端服务器分组转发、权重分配、状态监测、
调度算法等高级功能。
如果编译安装,需要指定 --with-stream 选项才能支持ngx_stream_proxy_module模块
tcp负载均衡配置参数
负载均衡实例: MySQL
php源码编译
重置nginx
然后如果后面nginx服务不行,记得 make && make install 进行编译安装
nginx和php的整合
安装memcache模块
我之前已经dnf 了memcache
优化: 两个php测试
如果失败或者web页面失败,先把原来的nginx进程杀死,并清空缓存,再重启服务测试
理论总结
高性能Web服务器(Nginx)的概念
Nginx是一个高性能的Web服务器和反向代理服务器,由Igor Sysoev开发,最初用于处理高并发请求。Nginx以其高效、稳定、轻量级的特点,广泛应用于各种高性能Web服务场景。
Nginx的工作原理
Nginx的工作原理主要基于以下几点:
- 事件驱动模型:Nginx采用异步非阻塞的事件驱动模型,可以同时处理大量的并发连接。每个连接作为一个事件,由事件循环机制统一管理。
- 高效的I/O处理:Nginx利用epoll(Linux)、kqueue(FreeBSD)等高效的I/O多路复用技术,实现高效的I/O处理。
- 模块化设计:Nginx采用模块化设计,可以通过加载不同的模块来扩展其功能。常见的模块包括HTTP模块、邮件模块、流媒体模块等。
- 灵活的配置:Nginx支持灵活的配置,可以通过配置文件实现复杂的请求处理逻辑,如URL重写、反向代理、负载均衡等。
Nginx的工作模式
Nginx的工作模式主要包括以下几种:
- Master-Worker模式:Nginx有一个主进程(master process)和多个工作进程(worker processes)。主进程负责接收客户端请求,并将请求分发到工作进程。工作进程负责处理具体的请求。
- 负载均衡模式:Nginx可以作为负载均衡器,将请求分发到多个后端服务器。支持多种负载均衡算法,如轮询、最少连接数、IP哈希等。
- 反向代理模式:Nginx可以作为反向代理服务器,接收客户端请求,选择合适的后端服务器处理请求,并将响应返回给客户端。
- 缓存加速模式:Nginx可以作为缓存服务器,缓存后端服务器的响应结果,减少重复请求,提高响应速度。
为什么要使用Nginx
- 高性能:Nginx采用异步非阻塞的事件驱动模型,可以同时处理大量的并发连接,具有很高的性能。
- 稳定性:Nginx经过多年的开发和测试,具有很高的稳定性。即使在高并发场景下,也能保持稳定的运行。
- 轻量级:Nginx的内存占用和CPU消耗都很低,是一个轻量级的Web服务器。
- 灵活性:Nginx支持灵活的配置和模块化设计,可以通过配置文件和模块实现复杂的功能。
- 社区支持:Nginx有一个活跃的开源社区,提供了大量的文档、教程和插件,方便用户学习和使用。
总结
Nginx是一个高性能、稳定、轻量级的Web服务器,通过事件驱动模型、高效的I/O处理、模块化设计和灵活的配置,实现了高性能和多功能。广泛应用于各种高性能Web服务场景,如负载均衡、反向代理、缓存加速等。使用Nginx可以有效提高Web服务的性能和可靠性,降低系统资源消耗。总结