WEB服务器的部署及优化

news2024/9/21 4:40:02
什么是 www?
www world wide web 的缩写,及万维网,也就是全球信息广播的意思
通常说的上网就是使用 www 来查询用户所需要的信息。
www 可以结合文字、图形、影像以及声音等多媒体,超链接的方式将信息以 Internet 传递到世界各
处去。
当你连接 www 网站,该网站会提供一些数据,客户端要使用可以解析这些数据的软件来处理,那就 是浏览器
网址
URI Uniform Resource Identifier 统一资源标识,分为 URL URN
URN:Uniform Resource Naming ,统一资源命名, P2P 下载使用的磁力链接是 URN 的一种实现
URL Uniform Resorce Locator ,统一资源定位符用于描述某服务器某特定资源位置
两者区别:而 URL 提供查找该事物的方法。 URN 仅用于命名,而不指定地址
URL 组成机构如下:
每部分的定义为:
<scheme>://<user>:<password>@<host>:<port>/<path>:<params>?<query>#<frag>
scheme :方案 访问服务器以获取资源时要使用哪种协议
user :用户 某些方案访问资源时需要的用户名
password: 密码 用户对应的密码,中间用: 分隔
host:主机 资源宿主服务器的主机名或IP 地址
port:端口 资源宿主服务器正在监听的端口号, 很多方案有默认端口号
path:路径 服务器资源的本地名,由一个/ 将其与前面的 URL 组件分隔
params:参数 指定输入的参数,参数为名/ 值对,多个参数,用 ; 分隔
query:查询 传递参数给程序,如数据库,用? 分隔 , 多个查询用 & 分隔
frag:片段 一小片或一部分资源的名字,此组件在客户端使用,用# 分隔
什么是 http
HTTP 协议:全称为 Hyper Text Transfer Protocol (超文本传输协议)
简单来说 http 就是从服务器传输超文本( html )到本地浏览器的传输协议
HTTP 协议工作于 B/S 架构上,浏览器作为 HTTP 客户端通过 URL HTTP 服务端即 WEB 服务端发送请求(Request Web 服务端根据接收到的请求数据后,向客户端发送响应信息( Response)
http 访问请求完整过程
1. 建立连接:
TCP 3 次握手建立链接,向服务器发送 http 请求,服务器拒绝或允许
2. 接受请求
接受客户端请求报文对某个资源的一次请求过程 web 响应访问模型
3. 处理请求:
服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选
的主体部分对请求进行处理常用请求 Method: GET POST HEAD PUT DELETE TRACE OPTIONS
4. 访问资源 :
服务器获取请求报文中请求的资源 web 服务器,即存放了 web 资源的服务器,负责向请求者提供对方请求
的静态资源,或动态运行后生成的资源
5. 构建响应报文 :
一旦 Web 服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响
应状态码、响应首部,如果生成了响应主体的话,还包括响应主体。
web 服务的常用种类
Apache
Nginx
openresty
大厂自研
这里主要将Nginx

nginx源码编译

通过源码下载nginx

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

安装nginx需要的模块

创建nginx用户

useradd -s /sbin/nologin -M nginx

解压安装包

tar zxf nginx-1.24.0.tar.gz

vim auto/cc/gcc

编译debug

编译模块

./configure --prefix=/usr/local/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

编译完成后会出现Makefile和objs两个文件

在进行编译

make && make install

查看编译完成的文件

编译参数

使用nginx启动nginx服务,查看版本

nginx平滑升级和回滚

平滑升级

Nginx平滑升级是指在不中断服务的情况下更新Nginx服务器的过程。这个过程通常涉及到以下几个步骤:

  1. 备份当前Nginx实例:在开始升级之前,应该备份当前的Nginx配置文件、二进制文件以及相关的静态资源,以防止升级过程中出现问题需要回滚。

  2. 准备新版本的Nginx:下载新版本的Nginx源代码,并根据当前版本的配置参数重新编译新版本的Nginx。在编译阶段,只执行make命令,不执行make install,以避免覆盖原有的Nginx实例。

  3. 替换Nginx二进制文件:将编译得到的新版本Nginx二进制文件复制到生产环境中,替换掉旧版本的Nginx二进制文件。

  4. 发送升级信号:向Nginx的主进程发送USR2信号,使Nginx主进程使用新版本的二进制文件启动一个新的主进程,同时保持老版本的主进程运行。新的主进程将创建新的工作进程(worker processes),而老版本的工作进程继续处理当前的请求。

  5. 优雅停止老版本工作进程:向老版本的主进程发送WINCH信号,指示其优雅地停止所有工作进程。新版本的工作进程接管所有新的请求,而老版本的工作进程在处理完当前请求后关闭。

  6. 确认升级成功:检查新版本的Nginx是否正常运行,可以通过检查Nginx的状态或者访问网站来验证。

tar zxf nginx-1.26.1.tar.gz

cd nginx-1.26.1/

编译新版本

./configure --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 install

编译

查看两个版本

ll objs/nginx /usr/local/nginx/sbin/nginx

将原版本的文件进行备份并建立新版本运行文件

查看原进程号并激活新进程进程

查看两个进程号

回收新进程并查看版本,版本升级成功

回滚

Nginx回滚的原理和作用

Nginx回滚是指在升级失败或需要恢复到旧版本时,将Nginx服务器还原到升级前的状态。回滚的步骤通常包括:

  1. 停止新版本的Nginx:如果新版本的Nginx存在问题,首先需要停止新版本的Nginx服务。

  2. 重启老版本的Nginx:向老版本的主进程发送HUP信号,使其重新加载配置并重启工作进程。如果老版本的主进程不再运行,可以手动启动它。

  3. 确认回滚成功:检查服务是否已经成功回滚到旧版本,并且所有功能正常运作。

通过上述步骤,Nginx能够在不影响用户访问的情况下完成升级或回滚,确保服务的连续性和稳定性。在实际操作中,应该严格按照流程进行,并在升级前后进行充分的测试和监控。

将文件备份修改回来

将原进程添加回来,并回收新进程

再次查看进程,只有一个原进程,新进程已被回收

查看版本,版本回滚成功

开机启动nginx

修改cpu与进程绑定

cpu有几个内核才能绑定几个进程,不可多写内核

vim /usr/local/nginx/conf/nginx.conf

修改pam限制

修改前只支持1024个文件

修改后支持100000个文件

vim /usr/local/nginx/conf/nginx.conf

vim /etc/security/limits.conf

查看是否生效

测试:

dnf install httpd-tools -y

ab -c 1000 -n 5000 http://172.25.254.100/index.html

新建一个 PC web 站点

创建路径和文件

mkdir /usr/local/nginx/conf.d/

vim /usr/local/nginx/conf.d/vhost.conf

记得提前写入写入东西

root alias
Nginx中的root和alias指令都用于指定Web服务器中的文件根目录,但它们在处理请求时的方式有所不同。以下是两者的对比:

综合以上信息,选择root还是alias取决于具体的配置需求。如果需要为整个站点或大部分内容设置统一的根目录,root指令更为合适。而如果需要针对特定的location块自定义路径,且这些路径不是位于服务器的根目录下,alias指令则更加适用。在使用alias时,还需要注意正确地使用路径结束符,并且在正则表达式匹配中要特别小心处理路径的替换逻辑。

root:

指定web的家目录,在定义location的时候,文件的绝对路径等于 root+location

在web页面的基础上root只需要新建文件并写入东西即可

mkdir /data/web/test1 -p

echo /data/web/test1 > /data/web/test1/index.html

alias:

定义路径别名,会把访问的路径重新定义到其指定的路径 , 文档映射的另一种机制 ; 仅能用于
location 上下文 , 此指令使用较少

location详细使用

在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;

ngnix会根据用户请求的URI来检查定义的所有location,按一定的优先级找出一个最佳匹配,

而后应用其配置在没有使用正则表达式的时候,nginx会先在server中的多个location选取匹配度最

高的一个uri

uri是用户请求的字符串,即域名后面的web文件路径,然后使用该location模块中的正则url和字符串,如果匹配成功就结束搜索,并使用此location处理此请求。

语法规则:

location [ = | ~ | ~* | ^~ ] uri { ... }

= #用于标准uri前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立

即处理请求

^~ #用于标准uri前,表示包含正则表达式,并且匹配以指定的正则表达式开头

#对uri的最左边部分做匹配检查,不区分字符大小写

~ #用于标准uri前,表示包含正则表达式,并且区分大小写

~* #用于标准uri前,表示包含正则表达式,并且不区分大写

不带符号 #匹配起始于此uri的所有的uri

\ #用于标准uri前,表示包含正则表达式并且转义字符。可以将 . * ?等转义为普通符号

准备工作:

将实验的显示结果写入发布页中,利于观察实验结果

测试代码

vim /usr/local/nginx/conf.d/vhost.conf

在浏览器中通过解析域名访问

出现web2,说明等号的优先级最高

注释掉location=,发现访问web4

将web4和web5调换位置,发现访问的是web5,说明两个参数优先级是一样的

查看另外两个参数的优先级

说明不带任何符号优先级高于^~

最后表示^~优先级最低

由此得出结论优先级由高到低:

=>~,~* > 不带符号 > ^~ >

nginx用户验证功能

建立用户

htpasswd -cm /usr/local/nginx/.htpasswd lee

htpasswd -m /usr/local/nginx/.htpasswd ljx 

如果创建了用户,就只用-m创建另外的用户

创建发布页面及写入东西

配置参数

vim /usr/local/nginx/conf.d/vhost.conf

访问创建的发布页面

输入用户及密码

成功进入发布页

自定义访问页面

Nginx自定义访问页面的原理

Nginx自定义访问页面通常涉及到配置error_page指令,该指令用于定义当Nginx遇到特定HTTP状态码时应该返回哪个页面。例如,如果配置了error_page 404 /custom_404.html;,那么当用户尝试访问网站上不存在的页面时,Nginx会返回/custom_404.html文件作为404错误页面。

此外,proxy_intercept_errors on;指令可以启用错误页面的拦截功能,使得Nginx能够捕获来自后端服务器的错误响应并返回自定义的错误页面,而不是原始的错误信息。

Nginx自定义访问页面的作用

自定义访问页面的主要作用包括:

  1. 改善用户体验:提供定制化的错误页面可以让用户在遇到问题时获得更友好的界面和可能的帮助信息,减少用户的困惑和不满。
  2. 统一品牌形象:通过自定义设计的错误页面,可以保持网站整体的视觉风格一致,增强品牌识别度。
  3. 简化错误处理逻辑:在后端服务器上处理错误可能更加复杂,而通过Nginx自定义错误页面,可以将这些逻辑集中在Web服务器层面,简化维护和管理。
  4. 隐藏敏感信息:默认的错误页面可能会泄露服务器的内部信息,自定义错误页面可以避免这种风险。

通过上述配置和优化,Nginx能够更有效地处理各种HTTP状态码,同时提升网站的专业性和用户满意度。

没有设置前访问不了,出现错误404

vim /usr/local/nginx/conf.d/vhost.conf

error_page 404 /40x.html; :当出现404错误时,直接访问40x.html文件

写入内容并重启

[root@nginx ~]# mkdir -p /data/web/errorpage

[root@nginx ~]# echo error page > /data/web/errorpage/40x.html

[root@nginx ~]# nginx -s reload

重启后再次访问直接跳转到了40x.html文件

定义日志生成

Nginx日志主要分为两种类型:访问日志(access_log)和错误日志(error_log)。访问日志用于记录客户端对服务器的请求信息,而错误日志则用于记录Nginx在处理请求过程中遇到的错误信息。

访问日志

访问日志记录了客户端的IP地址、请求的处理时间、请求的HTTP状态码、请求的URI、传输的字节数等信息。Nginx通过access_log指令来配置访问日志的路径和格式。默认情况下,Nginx使用预定义的combined格式来记录访问日志,但用户可以通过log_format指令自定义日志格式,以包含所需的特定信息。

错误日志

错误日志记录了Nginx服务器和请求处理过程中的错误信息,包括警告、错误、临界事件等。错误日志通过error_log指令来配置,可以指定日志文件的路径和日志级别。日志级别从debugemerg不等,用户可以根据需要调整日志的详细程度。

Nginx日志的作用

Nginx日志的作用非常重要,它们是系统维护和故障诊断的关键工具:

  1. 安全审计:通过分析访问日志,管理员可以检测未授权的访问尝试或其他潜在的安全威胁。
  2. 性能监控:日志文件可以帮助管理员识别服务器的性能瓶颈,例如某些页面或资源的过度使用。
  3. 故障诊断:错误日志提供了关于服务器错误和异常行为的信息,有助于快速定位和解决问题。
  4. 报告生成:日志数据可以用于生成报告,帮助了解网站的使用情况和用户行为。
  5. 合规性:在某些行业中,保留详细的访问和错误日志是法规要求的一部分。

通过合理配置和管理Nginx日志,管理员可以更有效地监控和维护Web服务器的健康和安全。

vim /usr/local/nginx/conf.d/vhost.conf

建立文件生成路径

mkdir /var/log/timinglee.org

测试

访问日志:

错误日志:

判断文件是否存在

Nginx通过多种内置指令和模块来判断文件是否存在。其中两种常用的方法是使用try_files指令和if条件结合-e测试操作符。

try_files指令

try_files指令允许Nginx按顺序检查一系列文件或目录的存在性。如果找到第一个存在的文件或目录,Nginx就会停止搜索并处理该文件或目录。如果所有指定的文件或目录都不存在,Nginx会执行try_files指令的最后一个参数,通常是一个内部重定向到另一个URI。

Nginx文件存在性判断的作用

文件存在性判断在Nginx配置中扮演着重要角色,尤其是在静态文件服务和反向代理场景中。以下是一些具体的作用:

  1. 静态文件服务:通过检查文件是否存在,Nginx可以直接提供静态资源,提高响应速度和效率。

  2. 单页应用(SPA)路由:对于前端框架构建的SPA,Nginx可以配置为在特定文件不存在时代理请求到后端API服务器,从而动态渲染页面内容4。

  3. 错误处理:如果请求的文件不存在,Nginx可以返回自定义的错误页面或重定向到其他页面,改善用户体验。

  4. 负载均衡和故障转移:在多服务器环境中,Nginx可以根据文件存在性检查结果决定请求分发到哪个后端服务器,或者在某个服务器不可用时进行故障转移。

通过这些机制,Nginx能够灵活地处理各种HTTP请求,确保系统的稳定性和性能

配置如下:

[root@nginx ~]# mkdir /data/web/html/error

[root@nginx ~]# echo error deafult > /data/web/html/error/default

测试,访问一个不存在的文件

curl www.timinglee.org/lee,如果文件存在,则返回文件内的内容,如果不存在,则返回error deafult

长链接控制

长链接控制原理

在HTTP/1.1协议中,客户端和服务器之间的连接默认是持久的,这意味着在一个TCP连接上可以传输多个HTTP请求和响应,直到客户端或服务器主动关闭连接。Nginx通过配置proxy_http_version 1.1;指令来启用HTTP/1.1协议,并通过设置Connection头为空字符串来告诉客户端保持连接开放,即proxy_set_header Connection "";。此外,Nginx还可以配置keepalive指令来控制空闲连接的超时时间,例如keepalive 16;表示保持连接16秒。

长链接控制的主要作用包括:

  1. 减少延迟:通过复用现有的TCP连接,减少了每次请求都需要进行的TCP握手和TLS握手的时间。
  2. 提高效率:减少了建立和关闭连接的开销,使得服务器能够更快地处理更多的请求。
  3. 负载均衡:在使用Nginx作为反向代理服务器时,长链接可以帮助更有效地分配请求到后端服务器,尤其是在处理长时间运行的请求时。
  4. 节省资源:维持较少的连接数可以减轻服务器的资源消耗,包括文件描述符和内存。

在配置Nginx时,管理员需要根据具体的应用场景和性能要求来调整长链接的相关设置,以达到最佳的性能平衡。

[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf

下载测试工具

测试两次后断开连接

修改requests为1后

一次就断开连接

nginx作为下载服务器配置

Nginx作为下载服务器的工作原理基于其高效的静态文件处理能力和反向代理功能。它能够处理大量的并发连接,并且通过优化内存和磁盘I/O操作来提高文件传输效率.

  • 高性能文件传输:Nginx设计用于处理高并发的静态文件请求,适合用作下载服务器。
  • 断点续传支持:通过配置aiodirectio指令,Nginx可以支持断点续传功能,提高用户体验。
  • 缓存管理:可以设置HTTP缓存头,控制客户端对文件的缓存行为,减少服务器负载。
  • 资源保护:通过配置文件权限和Nginx的访问控制规则,可以限制对敏感文件的访问。
  • 易于维护:Nginx的配置相对简单,便于管理和维护,尤其是在处理大量下载请求时.

[root@nginx ~]# mkdir /data/web/download

[root@nginx ~]# dd if=/dev/zero of=/data/web/download/leefile bs=1M count=100

100+0 records in

100+0 records out

104857600 bytes (105 MB, 100 MiB) copied, 0.0422292 s, 2.5 GB/s

创建路径和文件

vim /usr/local/nginx/conf.d/vhost.conf

autoindex on | off; #自动文件索引功能,默为off

开启后可在浏览器中查看

autoindex_localtime on | off ; #显示本机时间而非GMT(格林威治)时间,默认off

如果不开,则显示格林威治时间

autoindex_exact_size on | off; #计算文件确切大小(单位bytes),off 显示大概大小(单位K、

M),默认on

limit_rate 1024k;表示下载速度的限制,如果值为0,则表示不限速。

开启autoindex_localtime后,显示本机时间

下载,由于被限速,所以只有1024KB/s

nginx状态页

Nginx状态页是一个特殊的页面,它展示了Nginx服务器的实时运行状态信息。这些信息包括当前活跃的连接数、已处理的请求数、正在读写的连接数等。状态页的数据来源于Nginx内部的变量和计数器,它们在Nginx处理HTTP请求的各个阶段被更新。

Nginx状态页作用

Nginx状态页的主要作用是提供服务器性能的实时监控。通过分析状态页上的数据,系统管理员可以评估服务器的健康状况、识别潜在的瓶颈、调整配置以优化性能,甚至进行安全审计。例如,如果发现活跃连接数异常高,可能表明服务器正在经历过重的负载,需要增加资源或优化应用程序。

如何配置和访问Nginx状态页

要启用Nginx状态页,需要确保在编译Nginx时包含了--with-http_stub_status_module选项。然后,在Nginx的配置文件中,可以通过location块来定义状态页的位置,并使用stub_status on;指令来激活状态页。此外,可以通过allowdeny指令来控制谁可以访问状态页,以保证安全性。配置完成后,重启Nginx使配置生效,并通过浏览器或命令行工具(如curl)访问状态页地址来查看服务器状态。

vim /usr/local/nginx/conf.d/status.conf

设置访问权限,只允许172.25.254.1访问

重启服务前可以访问,重启服务生效后,只有Windows 172.25.254.1可以访问

Active connections: #当前处于活动状态的客户端连接数

                               #包括连接等待空闲连接数=reading+writing+waiting

accepts:#统计总值,Nginx自启动后已经接受的客户端请求连接的总数。

handled: #统计总值,Nginx自启动后已经处理完成的客户端请求连接总数

              #通常等于accepts,除非有因worker_connections限制等被拒绝的连接

requests: #统计总值,Nginx自启动后客户端发来的总的请求数

Reading: #当前状态,正在读取客户端请求报文首部的连接的连接数

#数值越大,说明排队现象严重,性能不足

Writing: #当前状态,正在向客户端发送响应报文过程中的连接数,数值越大,说明访问量很大

Waiting: #当前状态,正在等待客户端发出请求的空闲连接数开启 keep-alive的情况下,这个                   值等于active –(reading+writing)

nginx压缩功能

Nginx的压缩功能主要是通过内置的ngx_http_gzip_module模块实现的,它支持对HTTP响应内容进行gzip压缩。gzip压缩是一种基于DEFLATE算法的压缩方法,结合了LZ77算法和Huffman编码,能够有效减少数据的传输大小。在压缩过程中,Nginx会扫描响应内容,寻找可压缩的重复字符串,并将它们替换为更短的表示形式,从而实现压缩。压缩后的内容会在HTTP响应头中添加Content-Encoding: gzip,以便客户端知道内容已被压缩,并进行相应的解压23.

启用Nginx的压缩功能可以带来以下好处:

  1. 减少数据传输量:通过压缩静态文件和动态内容,可以显著减少传输的数据量,这对于带宽有限或用户连接速度较慢的情况尤为有用。
  2. 提高页面加载速度:较小的文件尺寸意味着更快的下载时间,从而加快了页面的渲染速度。
  3. 节省带宽成本:减少了传输的数据量,自然也就减少了服务器的带宽使用,对于商业网站来说,这可以转化为成本节约。
  4. 提升用户体验:快速加载的页面可以提供更流畅的浏览体验,减少用户等待时间,提高满意度。

vim /usr/local/nginx/conf/nginx.conf

打开gzip on,默认被注释

压缩比由低到高从1到9,默认为1,值越高压缩后文件越小,但是消耗cpu比较高。基本设定未4或者5

gzip_comp_level 4

#gzip压缩的最小文件,小于设置值的文件将不会压缩

gzip_min_length 1k;

启用压缩功能时,协议的最小版本,默认HTTP/1.1

gzip_http_version 1.0 | 1.1;

如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”,一般建议打开

gzip_vary on | off;

指明仅对哪些类型的资源执行压缩操作;默认为gzip_types text/html,不用显示指定,否则出错

gzip_types mime-type ...;

查看文件大小

du -sh /usr/local/nginx/logs/access.log

[root@nginx conf.d]# echo hello ljx > /data/web/html/xiao.html

[root@nginx conf.d]# cat /usr/local/nginx/logs/access.log > /data/web/html/da.html

使用curl --head --compressed 172.25.254.100/文件名进行压缩

由于xiao.html文件小于1k,所以不进行压缩,而da.html大于1k,所以进行压缩,显示为gzip

curl --head --compressed 172.25.254.100/xiao.html

curl --head --compressed 172.25.254.100/da.html

nginx变量

nginx 的变量可以在配置文件中引用,作为功能判断或者日志等场景使用
变量可以分为内置变量和自定义变量
内置变量是由 nginx 模块自带,通过变量可以获取到众多的与客户端访问相关的值
以下是部分内置变量
$remote_addr; #存放了客户端的地址,注意是客户端的公网 IP
$args; #变量中存放了 URL 中的所有参数 #例如 :https://search.jd.com/Search?keyword= 手机
&enc=utf-8 #返回结果为 : keyword= 手机 &enc=utf-8
$is_args #如果有参数为 ? 否则为空
$document_root; #保存了针对当前资源的请求的系统根目录 , 例如 :/webdata/nginx/timinglee.org/lee
$document_uri; #保存了当前请求中不包含参数的 URI ,注意是不包含请求的指令
# 比如 :http://lee.timinglee.org/var?\id=11111 会被定义为 /var
# 返回结果为 :/var
$host; #存放了请求的 host 名称 limit_rate 10240; echo $limit_rate;
# 如果 nginx 服务器使用 limit_rate 配置了显示网络速率,则会显示,如果没有设置, 则显示 0
$remote_port; #客户端请求 Nginx 服务器时随机打开的端口,这是每个客户端自己的端口
$remote_user; #已经经过 Auth Basic Module 验证的用户名
$request_body_file; #做反向代理时发给后端服务器的本地资源的名称
$request_method; # 请求资源的方式, GET/PUT/DELETE
$request_filename; #当前请求的资源文件的磁盘路径,由 root alias 指令与 URI 请求生成的文件绝对路径,
# :webdata/nginx/timinglee.org/lee/var/index.html
$request_uri; #包含请求参数的原始 URI ,不包含主机名,相当于 :$document_uri?$args,
# 例如: /main/index.do?id=20190221&partner=search
$scheme; #请求的协议,例如 :http https,ftp
$server_protocol; #保存了客户端请求资源使用的协议的版本,例如 :HTTP/1.0 HTTP/1.1 HTTP/2.0
$server_addr; #保存了服务器的 IP 地址
$server_name; #虚拟主机的主机名
$server_port; #虚拟主机的端口号
$http_user_agent; #客户端浏览器的详细信息
$http_cookie; #客户端的所有 cookie 信息
$cookie_<name> #name为任意请求报文首部字部 cookie key
$http_<name> #name为任意请求报文首部字段 , 表示记录请求报文的首部字段, ame 的对应的首部字段名需要为小写,如果有 横线需要替换为下划线
vim /usr/local/nginx/conf.d/vhost.conf

演示:

if判定

        用于条件匹配判断,并根据条件判断结果选择不同的Nginx 配置,可以配置在 server location 块中进行 配置,Nginx if 语法仅能使用 if 做单次判断,不支持使用 if else 或者 if elif 这样的多重判断
vim /usr/local/nginx/conf.d/vhost.conf

如果文件不存在,则返回 文件路径is not exist

如果文件存在,则返回文件内的内容

break

用于中断当前相同作用域 (location) 中的其他 Nginx 配置
与该指令处于同一作用域的 Nginx 配置中,位于它前面的配置生效
位于后面的 ngx_http_rewrite_module 模块中指令就不再执行
Nginx 服务器在根据配置处理请求的过程中遇到该指令的时候,回到上一层作用域继续向下读取配置,
该指令可以在 server 块和 locationif 块中使用
vim /usr/local/nginx/conf.d/vhost.conf
如果没有break,则返回两个参数,如果有break,则返回上一个符合条件的参数

这里加了一个选择浏览器的参数,这样就可以选择在不同浏览器访问不同的东西了

通过百度可以访问两个参数,但通过curl 7.76.1这个浏览器就只能访问第一个有break的参数

return

return 用于完成对请求的处理,并直接向客户端返回响应状态码,比如 : 可以指定重定向 URL( 对于特殊重
定向状态码, 301/302 ) 或者是指定提示文本内容 ( 对于特殊状态码 403/500 ) ,处于此指令后的所有配
置都将不被执行, return 可以在 server if location 块进行配置
如果文件不存在,则跳转百度,如果存在则显示200OK
mkdir -p /data/web/html/return
curl -I var.timinglee.org/return

rewirte 临时和永久重定向

临时重定向(302)

临时重定向(HTTP状态码 302)是一种指示客户端暂时重定向到另一个URL的机制。在这种情况下,客户端会向新的URL发出请求,但会保留原始URL以便后续操作。临时重定向通常用于临时的服务器迁移或页面更新,搜索引擎不会将权重从原始URL转移到新URL,因为它们预期最终会回到原来的位置。此外,客户端在浏览时也会记住临时重定向,但如果多次尝试访问原始页面时遇到重定向,它们可能会直接访问新的URL.

永久重定向(301)

永久重定向(HTTP状态码 301)是一种指示客户端将来所有对某个页面的请求都应该定向到新的URL的机制。这是一种长期的重定向状态,搜索引擎会将权重和排名从原始URL转移到新URL,并且客户端会缓存新的地址,以后直接访问新的URL而不是原始的URL。永久重定向适用于那些不再使用的旧页面,或者是永久性的URL变更.

在配置重定向时,可以使用服务器配置文件或特定的重定向插件来设置相应的状态码和重定向目标。例如,在Nginx服务器中,可以通过rewrite指令配合permanentredirect标志来实现重定向

permanent表示永久重定向,为301
redirect为临时重定向,为302

breka和last的区别

访问break请求被rewrite至test1,而访问test1转递请求再次被rewrite发送至test2

访问last则直接跳出当前location,访问下方的test1,而不是在系统中echo的test1中的内容。

[root@nginx conf.d]# mkdir /data/web/html/{test1,test2,break,last} -p
[root@nginx conf.d]# echo test1 > /data/web/html/test1/index.html
[root@nginx conf.d]# echo test2 > /data/web/html/test2/index.html
[root@nginx conf.d]# echo break > /data/web/html/break/index.html
[root@nginx conf.d]# echo last > /data/web/html/last/index.html

测试:
[root@nginx conf.d]# curl  var.timinglee.org/break/index.html
test1
[root@nginx conf.d]# curl  var.timinglee.org/last/index.html
new test1

全站加密

Nginx全站加密通常指的是使用HTTPS协议来加密网站与用户之间的通信。HTTPS是HTTP协议的安全版本,它通过SSL/TLS协议对数据传输进行加密,确保数据在传输过程中的机密性和完整性。实现全站加密的基本步骤包括:

  1. 获取SSL/TLS证书:可以从证书颁发机构(CA)购买证书,或者使用免费的证书颁发机构(如Let's Encrypt)获取证书。证书包括公钥和私钥,公钥用于加密数据,私钥保留在服务器端用于解密数据。

  2. 配置Nginx服务器:在Nginx的配置文件中,需要指定SSL证书和私钥文件的路径,并配置监听443端口(HTTPS默认端口)。此外,还可以配置SSL/TLS协议的版本和加密套件,以提高安全性。

  3. 强制HTTPS:为了确保所有用户都通过HTTPS访问网站,可以在Nginx配置中使用重定向规则,将所有HTTP请求自动转换为HTTPS请求。

Nginx全站加密的作用

全站加密的主要作用是提高网站的安全性,防止数据在传输过程中被窃听或篡改。具体来说,HTTPS提供了以下安全保障:

  1. 数据加密:通过SSL/TLS协议对数据进行加密,即使数据在传输过程中被截获,未授权的第三方也无法读取数据内容。

  2. 身份验证:SSL证书的颁发过程涉及到对网站身份的验证,这有助于防止中间人攻击,用户可以信任他们正在与真实的网站通信。

  3. 数据完整性:加密机制还包括消息摘要,确保数据在传输过程中未被篡改。

  4. 增强用户信任:大多数现代浏览器会显示锁形图标,表明网站是通过HTTPS安全连接,这增加了用户对网站的信任感。

  5. SEO优化:搜索引擎倾向于优先索引使用HTTPS的网站,因为它们认为这些网站更加安全,这有助于提升网站的排名。

  6. 遵守法规要求:某些行业和地区的法律法规要求网站必须使用HTTPS来保护用户数据。

通过上述措施,Nginx全站加密能够有效地保护网站和用户数据的安全,同时提升网站的专业形象和用户体验。

cd /usr/local/nginx/
mkdir certs
openssl req  -newkey  rsa:2048 -nodes -sha256 -keyout /usr/local/nginx/certs/timinglee.org.key \
-x509  -days 365 -out /usr/local/nginx/certs/timinglee.org.crt
vim /usr/local/nginx/conf.d/vhosts.conf

判断文件是否存在(自动跳转)

Nginx服务器在处理静态文件请求时,会根据配置的指令来判断请求的文件是否存在于服务器的文件系统中。这种判断通常涉及到几种不同的配置指令,其中最常用的包括 try_files 和条件语句 if

Nginx文件存在性判断的作用

文件存在性判断在Nginx配置中扮演着重要角色,它可以提高网站的性能和用户体验:

  1. 动态内容缓存:通过判断静态资源是否已更改,Nginx可以避免不必要的文件传输,从而减少带宽使用和响应时间。
  2. 友好的错误处理:如果请求的文件不存在,Nginx可以返回一个自定义的错误页面,而不是标准的404错误,这样可以提供更好的用户体验。
  3. 负载均衡和故障转移:在多服务器环境中,Nginx可以根据文件是否存在来决定请求应该路由到哪个后端服务器。
  4. URL重写和重定向:通过文件存在性判断,Nginx可以重写URL或将用户重定向到不同的页面,这对于SEO和维护旧链接非常有用。

这些功能使得Nginx成为高性能Web服务器的首选,尤其是在处理大量静态内容和需要优化用户体验的场景中。

如果文件不存在,则访问到默认域名下
直接跳转到 www.timinglee.org里

盗链

盗链(Hotlinking或Direct Linking)是指其他网站直接链接到你网站上的资源(如图片、视频等),导致这些资源在不经过你网站的情况下被直接加载到其他网站上。这不仅会消耗你的带宽资源,还可能影响你的网站性能和用户访问速度。Nginx通过配置可以有效地防止盗链.

防止盗链对网站运营者有以下几个重要作用:

  1. 节省带宽:避免不必要的资源消耗,减少带宽成本。

  2. 提高性能:减少外部请求对服务器的负担,提升网站的响应速度和稳定性。

  3. 保护版权:防止他人未经许可使用你的资源,保护内容版权。

  4. 维护品牌形象:避免你的资源在不合适的网站上展示,维护品牌形象和网站的信誉。

通过合理配置Nginx的防盗链规则,网站运营者可以有效地控制资源的使用,确保资源被正当利用,同时保护自身的利益。

服务机网页设置

nginx主机设置

添加盗链前访问172.25.254.10
添加盗链后

反向代理动静分离

可以实现不同用户对不同需求的实现

反向代理: reverse proxy ,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的
一种方式,这是用的比较多的一种方式。
Nginx 除了可以在企业提供高性能的 web 服务之外,另外还可以将 nginx 本身不具备的请求通过某种预
定义的协议转发至其它服务器处理,不同的协议就是 Nginx 服务器与其他服务器进行通信的一种规范,主
要在不同的场景使用以下模块实现不同的功能
逻辑调用关系:
http://172.25.254.20
ngx_http_proxy_module: # 将客户端的请求以 http 协议转发至指定服务器进行处理
ngx_http_upstream_module # 用于定义为 proxy_pass,fastcgi_pass,uwsgi_pass
# 等指令引用的后端服务器分组
ngx_stream_proxy_module: # 将客户端的请求以 tcp 协议转发至指定服务器处理
ngx_http_fastcgi_module: # 将客户端对 php 的请求以 fastcgi 协议转发至指定服务器助理
ngx_http_uwsgi_module: # 将客户端对 Python 的请求以 uwsgi 协议转发至指定服务器处理
在客户机10上安装php以更好的展现实验结果
访问20下的static文件

nginx缓存功能

Nginx缓存原理

Nginx缓存是一种提高Web服务器性能的技术,它通过存储静态资源或动态内容的副本来减少对数据库和应用服务器的直接请求次数。当用户或其他服务器请求这些资源时,Nginx首先检查请求的资源是否存在于本地缓存中。如果缓存中有该资源的副本且没有过期,Nginx将直接从缓存中提供这些资源,而不是重新生成或从原始服务器检索,从而显著减少响应时间和服务器负载。

Nginx缓存的作用

  1. 提高访问速度:缓存可以减少数据访问的响应时间,使得用户能够更快地获得内容。
  1. 减轻服务器压力:缓存减少了服务器的计算和数据库查询操作,降低了服务器资源的消耗。
  1. 降低网络带宽消耗:由于缓存可以存储经常被请求的数据,减少了通过网络传输的数据量。
  1. 提升系统稳定性:缓存可以缓冲流量波动,减少服务器过载的风险。

Nginx缓存的工作流程

  1. 客户端请求处理:当客户端发送请求到Nginx时,Nginx检查缓存中是否有该资源的副本。
  1. 缓存命中:如果缓存中有资源且未过期,Nginx将直接返回缓存中的副本。
  1. 缓存未命中:如果缓存中没有资源或已过期,Nginx将向原始服务器请求资源。
  1. 后端服务器响应:原始服务器返回资源给Nginx。
  1. 缓存更新:Nginx将接收到的资源保存到缓存中,以备未来的请求使用。
  1. 缓存过期策略:Nginx可以设置缓存的过期时间,过期后的缓存将被更新或删除

开启缓存前访问速度

使用以下命令检测

在web1中访问web2

[root@daol ~]# ab -n1000 -c100 http://www.timinglee.org/static/index.html

查看访问速度只有7.757

开始打开缓存
在主配置文件中添加
vim /usr/local/nginx/conf/nginx.conf
再次访问,访问速度加快,由7.757变为13.859

nginx反向代理负载均衡

Nginx反向代理的基本原理

Nginx反向代理是一种服务器配置,它允许外部请求通过Nginx服务器转发到后端的一组服务器上。在这种配置中,Nginx服务器充当客户端和后端服务器之间的中介,它接收客户端的请求,并将这些请求转发到后端服务器处理。处理完毕后,后端服务器将响应返回给Nginx,然后由Nginx转发回客户端。在这个过程中,客户端通常不知道实际处理请求的后端服务器的存在,因为它们只看到Nginx服务器。

Nginx反向代理的作用

  1. 负载均衡:反向代理可以将进入的网络请求分发到多个后端服务器,从而实现负载均衡。这有助于防止任何单一服务器因过载而崩溃,提高整个系统的稳定性和可用性。

  2. 缓存静态内容:Nginx可以缓存静态内容,如图片、CSS和JavaScript文件,减少后端服务器的负担,加快内容的交付速度。

  3. 提供SSL终端化:Nginx可以处理SSL/TLS加密和解密,作为反向代理服务器接收加密的HTTPS请求,并将其解密后转发给后端服务器,这样后端服务器就可以只用HTTP通信,简化了配置和维护。

  4. 隐藏服务器细节:反向代理可以隐藏后端服务器的真实IP地址和内部网络结构,增加安全性。

  5. 提供灵活的路由规则:通过配置Nginx的反向代理规则,可以根据不同的请求路径、头部信息或其他条件将请求路由到不同的后端服务器或服务。

  6. 提供额外的安全措施:Nginx可以实施额外的安全措施,如防御DDoS攻击、过滤恶意请求等。

七层:

nginx反向代理负载均衡也有算法

ip_hash算法

ip_hash;
# 源地址 hash 调度方法,基于的客户端的 remote_addr( 源地址 IPv4 的前 24 位或整个 IPv6 地址 ) hash 计 算,以实现会话保持

hash $request_uri consistent; #基于用户请求的uri做hash

由于客户机uri没变,所以一直访问20

更换uri后,访问10

cookie算法

根据不同的hash值取模算发,取得最终值

四层负载均衡

主要分为DNS和数据库负载均衡

DNS:

首先在两台服务机上做好dns解析

在http外面做好子配置文件的目录,不然会报错

配置文件内容:

测试:

数据库

由于数据库的端口号为3306.所以只需要在之前实验的基础上该端口号即可

提前在两台服务机上下载mariadb数据库,并加上数据库id和添加权限

源码安装php

PHP是一种广泛使用的服务器端脚本语言,它具有多种功能,包括但不限于:

  • Web开发:生成动态网页、处理表单数据、连接数据库并检索信息。
  • 数据库交互:支持多种数据库,如MySQL、PostgreSQL和SQLite,可以执行复杂的数据库查询和数据操作。
  • 文件处理:读取、写入和编辑文件,上传和下载文件,控制文件权限。
  • 会话管理:存储和检索用户会话信息,跟踪用户登录状态,管理购物车等。
  • 图像处理:裁剪、调整大小和旋转图像,添加水印或文本覆盖,创建缩略图。
  • 加密:使用密码学算法对数据进行加密和解密,保护敏感信息。
  • 电子邮件发送:发送电子邮件,包括HTML和文本格式,支持附件文件和嵌入图像。
  • 其他功能:变量操纵、条件和循环、函数和对象、异常处理等。

利用dnf解决php依赖

[root@Nginx ~]# dnf install -y bzip2 systemd-devel libxml2-devel sqlite-devel

libpng-devel libcurl-devel oniguruma-devel

但是其中的oniguruma-devel没有,需要去阿里云镜像站中下载,名字为:

oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm

下载后,开始编译php依赖文件

[root@Nginx ~]# ./configure \

--prefix=/usr/local/php \ #安装路径

--with-config-file-path=/usr/local/php/etc \ #指定配置路径

--enable-fpm \ #用cgi方式启动程序

--with-fpm-user=nginx \ #指定运行用户身份

--with-fpm-group=nginx \

--with-curl \ #打开curl浏览器支持

--with-iconv \ #启用iconv函数,转换字符编码

--with-mhash \ #mhash加密方式扩展库

--with-zlib \ #支持zlib库,用于压缩http压缩传输

--with-openssl \ #支持ssl加密

--enable-mysqlnd \ #mysql数据库

--with-mysqli --with-pdo-mysql \

--disable-debug \ #关闭debug功能

--enable-sockets \ #支持套接字访问

--enable-soap \ #支持soap扩展协议

--enable-xml \ #支持xml

--enable-ftp \ #支持ftp

--enable-gd \ #支持gd库

--enable-exif \ #支持图片元数据

--enable-mbstring \ #支持多字节字符串

--enable-bcmath \ #打开图片大小调整,用到zabbix监控的时候用到了这个模块

--with-fpm-systemd #支持systemctl 管理

make && make install

进行最后编译,时间可能有点长,需要多等待一会

php相关配置优化

[root@Nginx etc]cd /usr/local/php/etc

[root@Nginx etc]# cp php-fpm.conf.default php-fpm.conf

[root@Nginx etc]# vim php-fpm.conf

去掉注释

pid = run/php-fpm.pid #指定pid文件存放位置

[root@Nginx etc]# cd php-fpm.d/

[root@Nginx php-fpm.d]# cp www.conf.default www.conf

#生成主配置文件

[root@Nginx php-fpm.d]# cd /root/php-8.3.9/

[root@Nginx php-8.3.9]# cp php.ini-production /usr/local/php/etc/php.ini

[root@Nginx ~]# vim /usr/local/php/etc/php.ini

[Date]

; Defines the default timezone used by the date functions

; https://php.net/date.timezone

date.timezone = Asia/Shanghai #修改时区
\#生成启动文件

[root@Nginx ~]# cd /root/php-8.3.9/

[root@Nginx php-8.3.9]# cp sapi/fpm/php-fpm.service /lib/systemd/system/

\# Mounts the /usr, /boot, and /etc directories read-only for processes invoked by

this unit.

\#ProtectSystem=full #注释该内容

[root@Nginx php-8.3.9]# systemctl start php-fpm.service

[root@Nginx php-8.3.9]# netstat -antlupe | grep php

tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 0

820758 176202/php-fpm: mas

添加php环境变量

[root@Nginx ~]# vim .bash_profile

\# .bash_profile
\# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
\# User specific environment and startup programs
export PATH=$PATH:/usr/local/nginx/sbin:/usr/local/php/bin:/usr/local/php/sbin

[root@Nginx ~]# source .bash_profile

访问验证php测试页面

准备测试页面

/data/web/html/php

测试页面内容

vim php.conf #Nginx配置转发配置

访问测试页面

php的动态扩展模块(*php的缓存模块)

安装memcache模块

[root@Nginx ~]# tar zxf memcache-8.2.tgz

[root@Nginx ~]# cd memcache-8.2/

[root@Nginx memcache-8.2]# yum install autoconf

[root@Nginx memcache-8.2]# phpize

[root@Nginx memcache-8.2]# ./configure && make && make install

Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non

zts-20230831/

[root@Nginx memcache-8.2]# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-

20230831/

memcache.so opcache.so

复制测试文件到nginx发布目录中

[root@Nginx memcache-8.2]# ls

autom4te.cache config.log configure.ac example.php Makefile.fragments

README

build config.m4 config.w32 include Makefile.objects run

tests.php

config9.m4 config.nice CREDITS libtool memcache.la src

config.h config.status docker LICENSE memcache.php

tests

config.h.in configure Dockerfile Makefile modules

[root@Nginx memcache-8.2]# cp example.php memcache.php /data/web/html/php

[root@Nginx ~]# vim /data/php/memcache.php

define('ADMIN_USERNAME','admin'); // 账号

define('ADMIN_PASSWORD','ljx'); // 密码
define('DATE_FORMAT','Y/m/d H:i:s');

define('GRAPH_SIZE',200);

define('MAX_ITEM_DUMP',50);

$MEMCACHE_SERVERS[] = 'localhost:11211'; // add more as an array

#$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array

配置php加载memcache模块

root@Nginx ~]# vim /usr/local/php/etc/php.ini

;extension=zip

extension=memcache

;zend_extension=opcache

[root@Nginx ~]# systemctl reload php-fpm

[root@Nginx no-debug-non-zts-20230831]# php -m | grep mem //查看php是否加载成功

memcache

部署memcached

[root@Nginx ~]# yum install memcached -y

[root@Nginx ~]# systemctl enable --now memcached.service

[root@Nginx ~]# netstat -antlupe | grep memcache

tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN

976 1037243 186762/memcached

[root@Nginx ~]# cat /etc/sysconfig/memcached

PORT="11211"

USER="memcached"

MAXCONN="1024"

CACHESIZE="64"

OPTIONS="-l 127.0.0.1,::1"

访问www.timinglee.org/memcache.php和www.timinglee.org/example.php

不断刷新example,example模拟数据写入,memcache右侧hits会不断增加,表示命中率越高

memcache介入前,压测失败文件多

[root@nginx ~]# ab -n5000 -c100 http://www.timinglee.org/index.php

memcache介入后压测,失败文件没有了

[root@nginx ~]# ab -n5000 -c100 http://www.timinglee.org/example.php

php高速缓存

PHP高速缓存通常是指将数据存储在比传统硬盘更快的存储介质中,如内存,以便快速读取和访问。这种缓存技术可以显著提高数据的读写速度,减少对底层数据库的访问次数,从而提高应用程序的性能。

PHP高速缓存的作用

PHP高速缓存的主要作用包括:

  1. 提高性能:缓存技术可以避免重复计算或查询,减少服务器的负载,提高程序的性能和响应速度2。
  1. 减少数据库查询:通过将数据库查询结果缓存起来,可以减少对数据库的频繁查询,减轻数据库的负载2。
  1. 提高用户体验:缓存技术可以显著减少页面加载时间,提高用户的访问体验,降低用户的等待时间2。
  1. 减轻服务器负载:缓存可以减少服务器执行计算和处理数据的次数,从而降低服务器的工作负载4。

在PHP中,可以使用不同的缓存机制,如文件缓存、Memcached、Redis等,来实现高速缓存。这些技术可以应用于页面缓存、数据库查询缓存、对象缓存和片段缓存等多种场景4。通过合理地使用缓存技术,可以有效提升PHP应用的性能和用户体验。

开始实验前,必须有以下两个模块,不然不能完成实验的实现

srcache-nginx-module-0.33.tar.gz

memc-nginx-module-0.20.tar.gz

配置如下:

location /memc中
set $memc_key $query_string; #使用内置变量$query_string来作为key

set $memc_exptime 300; #缓存失效时间300秒


location ~ \.php$中
set $key $uri$args; #设定key的值

srcache_fetch GET /memc $key; #检测mem中是否有要访问的php

srcache_store PUT /memc $key; #缓存为加载的php数据

配置前压测index.php会访问失败

5000个文件会有494个会失败

[root@nginx ~]# ab -n5000 -c100 http://www.timinglee.org/index.php

配置后压测index.php没有访问失败的文件,全部成功

[root@nginx ~]# ab -n5000 -c100 http://www.timinglee.org/index.php

nginx 二次开发版本
openresty
OpenResty® 是一个基于 Nginx Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方 模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、 Web 服 务和动态网关。 OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样 Web 开发人员和系统工程师可以使用 Lua 脚本语言 调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高 性能 Web 应用系统。 OpenResty 由于有功能强大且方便的的 API, 可扩展性更强 , 如果需要实现定制功能 ,OpenResty 是个不错的 选择
编译安装 openresty
[root@Nginx ~]#dnf -yq install gcc pcre-devel openssl-devel perl
[root@Nginx ~]#useradd -r -s /sbin/nologin nginx
[root@Nginx ~]#cd /usr/local/src
[root@Nginx ]#wget https://openresty.org/download/openresty-1.17.8.2.tar.gz
[root@Nginx ]#tar xf openresty-1.17.8.2.tar.gz
[root@Nginx ]#cd openresty-1.17.8.2/
[root@Nginx openresty-1.17.8.2]#./configure \
--prefix=/apps/openresty \
--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@Nginx openresty-1.17.8.2]#make && make install
[root@Nginx openresty-1.17.8.2]#ln -s /usr/local/openresty/bin/* /usr/bin/
[root@Nginx openresty-1.17.8.2]#openresty -v
nginx version: openresty/1.17.8.2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2069262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录一下QGIS栅格操作-植被NDVI指数计算

记录一下QGIS栅格操作-植被NDVI指数计算 以计算植被NDVI指数为例&#xff0c;介绍QGIS栅格的相关操作以及应用。 NDVI 数据简介及下载 下载&#xff1a; 地理空间数据云https://www.gscloud.cn/search 选择波段4&#xff08;可见光红色波段&#xff09;和波段5&#xff08;近…

VS2022 - 制作自己的C#类库dll,并输出Unity识别的pdb调试信息文件

然后编写库代码&#xff0c;设置dll生成目录 *** 输出unity可以识别的pdb调试信息文件 *** 右键项目-属性-生成-高级-调试信息&#xff1a;可移植(Portable PDB) 这是因为Unity只能识别MDB和Portable PDB文件 这样设置后&#xff0c;把dll和pdb文件放入到Unity中同文件夹下&…

金融帝国实验室(Capitalism Lab)官方技术支持中文汉化包_v4.09

<FCT汉化小组>Vol.001号作品 ————————————— ◎ 作品名称&#xff1a;金融帝国实验室&#xff08;Capitalism Lab&#xff09;官方中文汉化包 ◎ 制作发布&#xff1a;FCT汉化小组 ◎ 发布版本&#xff1a;CapLab Simplified Chinese loc v4.09 ◎ 发布时…

django学习入门系列之第十点《初识 django》

文章目录 django初识django1 安装django2 创建django项目3 默认项目文件介绍4 APP 往期回顾 django Python知识点:函数、面向对象。前端开发: HTML、CSS、JavaScript、jQuery、BootStrap。MySQL数据库Python的Web框架Flask&#xff0c;自身短小精悍第三方组件。Django&#xf…

Linux驱动开发基础(SR501人体红外模块)

所学来自百问网 目录 1.模块简介 2.原理图及接线 3.设备树修改 4.驱动程序 5.应用程序 6.makefile 7.编译运行 1.模块简介 人体都有恒定的体温&#xff0c;一般在37度&#xff0c;所以会发出特定波长10uM左右的红外线&#xff0c;被动式红外探头就是靠探测人体发射的1…

Kafka·概述

概览 Producer 生产者发送消息给broker&#xff0c;并不是生成一条消息后立刻发送&#xff0c;而是积攒多条后&#xff0c;批量发送到broker。可以通过配置参数batch.size&#xff08;单位字节&#xff09;调整积攒多少后发送 Consumer Topic 消息的分类 当Producer发送指定…

沾包问题,wireshark和netstat的使用

一.沾包 TCP是一个面向字节流的传输层协议。“流” 意味着 TCP 所传输的数据是没有边界的。这不同于 UDP 协议提供的是面向消息的传输服务&#xff0c;其传输的数据是有边界的。TCP 的发送方无法保证对方每次收到的都是一个完整的数据包。于是就有了粘包、拆包问题的出现。粘包…

[数据集][目标检测]电力场景输电线杆塔塔架金属锈蚀腐蚀生锈检测数据集VOC+YOLO格式1344张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1344 标注数量(xml文件个数)&#xff1a;1344 标注数量(txt文件个数)&#xff1a;1344 标注…

医学领域使用Python语言的逻辑和代码的规范

在医学领域使用Python进行数据分析和建模时&#xff0c;掌握良好的编程逻辑和代码规范非常重要。这不仅可以提高代码的质量&#xff0c;还能让其他研究人员更容易理解和复现你的工作。下面是一些关于如何编写高质量Python代码的建议&#xff1a; 代码组织 模块化&#xff1a;…

软件设计师教程(第5版)第5章 软件工程基础知识(更新中)

5.1 软件工程概述 【软件工程】是指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程&#xff0c;其目的是提高软件生产率、提高软件质量、降低软件成本。P239 5.1.1 计算机软件 计算机软件是指计算机系统中的【程序】及其【文档】。P240 【…

android13 隐藏状态栏里面的背光调节 隐藏下拉栏背光调节

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题分析 3.修改方法 4.编译运行 5.彩蛋 1.前言 隐藏下拉栏里面的背光调节,禁止用户在这里调节背光亮度。 2.问题分析 我们找到对应的布局,然后在里面隐藏掉。 使用之前文章介绍的布局查找工具,查找亮度条id id/bri…

驱动开发系列11 - Linux Graphics 图形栈概述(二)

目录 一:GPU 和 硬件 现代 GPU 功能概览: 硬件结构: 屏幕驱动: 屏幕连接器: 屏幕 CRT 控制器: CPU与GPU通信: 现代主机通信总线介绍: 通信方法: GPU 编程:通过 MMIO 访问寄存器 CPU 和 GPU 内存请求路由: GPU 可访问的内存区域: GTT/GART 是 CPU 与 GPU 共享的通信缓…

谷粒商城实战笔记-254-商城业务-消息队列-Direct-Exchange

文章目录 一&#xff0c;252-商城业务-消息队列-Direct-Exchange1&#xff0c;创建4个队列2&#xff0c;exchange绑定queue3&#xff0c;发送消息 二&#xff0c;253-商城业务-消息队列-Fanout-Exchange1&#xff0c;创建一个type为fanout的exchange2&#xff0c;给这个exchang…

开源的即时聊天解决方案Papercups

Papercups&#xff1a;让聊天支持变得简单、私密、实时。 - 精选真开源&#xff0c;释放新价值。 概览 Papercups是一款开源的实时客户支持工具&#xff0c;它使用Elixir语言构建&#xff0c;为注重客户数据隐私和安全性的公司提供了一个自托管的解决方案。这款工具的设计理念…

【C语言】常见文件操作

文件的常见操作 #include<stdio.h>// 由于devc代码编码为ANCI&#xff0c;故读取的文件中若有中文&#xff0c;请设置文件编码为ANCI&#xff0c;否则会乱码 // 读文件 void test1() {char ch;FILE *fp; // 创建文件指针fp fopen("./file.txt", "r"…

秋招突击——8/21——知识补充——计算机网络——cookie、session和token

文章目录 引言正文Cookie——客户端存储和管理Session——服务端存储和管理Token补充签名和加密的区别常见的加密算法和签名算法 面试题1、HTTP用户后续的操作&#xff0c;服务端如何知道属于同一个用户&#xff1f;如果服务端是一个集群机器怎么办&#xff1f;2、如果禁用了Co…

BaseCTF [第 1 周] ez_maze

笔记。 64ida打开。 更加确定。 所以常规做这类型题 思路(简单的话)&#xff1a; 先提取字符 计算其长度 对半分。 BaseCTF{131b7d6e60e8a34cb01801ae8de07efe}

基于YOLOv8的无人机高空红外(HIT-UAV)检测算法,魔改SimAM注意力助力涨点(一)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文内容&#xff1a;针对基于YOLOv8的无人机高空红外&#xff08;HIT-UAV&#xff09;检测算法进行性能提升&#xff0c;加入各个创新点做验证性试验。 1&#xff09;魔改SimAM注意力&#xff0c;引入切片操作&#xff1a;mAP从原始的…

算法日记day 46(单调栈之下一个更大元素|柱状图中最大图形)

一、下一个更大元素1 题目&#xff1a; nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。 给你两个 没有重复元素 的数组 nums1 和 nums2 &#xff0c;下标从 0 开始计数&#xff0c;其中nums1 是 nums2 的子集。 对于每个 0 …

【Oracle问题】ORA-12516:监听程序找不到符合协议堆栈要求的可用处理程序问题处理

ORA-12516:监听程序找不到符合协议堆栈要求的可用处理程序 这种一般都是会话数或者process和session已经到达临界值或者超过最大值了。 1.先cmd登录sqlplus&#xff1a; sqlplus / as sysdba;2.查看设置的最大的连接数和进程数&#xff1a; show parameter process&#xff…