【liunx】web高可用---nginx

NGINX简介

Nginx(发音为 “engine x”)是一款由俄罗斯程序员 Igor Sysoev 开发的 轻量级、高性能的 HTTP 和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。自 2004 年首次发布以来,Nginx 凭借其 高并发处理能力、低内存消耗和稳定性,成为全球最受欢迎的 Web 服务器之一,广泛应用于静态资源服务、反向代理、负载均衡、API 网关等场景

NGINX安装

源码编译

#解压压缩包
tar zxf nginx-1.24.0.tar.gzcd nginx-1.24.0
#编译
./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-pcre --
with-stream --with-stream_ssl_module --with-stream_realip_module
make
make install

使用make和makeinstall编译和安装

验证版本以及编译参数

查看版本信息

自定义版本(在编译前编辑文件)

#编辑版本相关文件
[root@Webserver nginx-1.26.1]# vim src/core/nginx.h#define NGINX_VERSION      ""       
#define NGINX_VER          "xixihaha/" NGINX_VERSION

重新编译后查看版本信息

平滑升级

服务器运行时要进行升级,此时不能停止服务器,我们可以进行平滑升级---即不停止服务器的情况下进行升级

将新版本编译和make后不用makeinstall

[root@Nginx sbin]# cd /usr/local/nginx/sbin/
[root@Nginx sbin]# cp -p nginx nginx.old
[root@Nginx sbin]# /usr/bin/cp -f /mnt/nginx-1.26.1/objs/nginx /usr/local/nginx/sbin/nginx
[root@Nginx sbin]# ps aux | grep nginx
root       37705  0.0  0.1   9868  2052 ?        Ss   16:04   0:00 nginx: master process ./nginx
nginx      37706  0.0  0.2  14200  5124 ?        S    16:04   0:00 nginx: worker process
root       40854  0.0  0.1   6408  2304 pts/0    S+   16:20   0:00 grep --color=auto nginx
[root@Nginx sbin]# kill -USR2 37705
[root@Nginx sbin]# kill -WINCH 37705
[root@Nginx sbin]# ps aux | grep nginx
root       37705  0.0  0.1   9868  2564 ?        Ss   16:04   0:00 nginx: master process ./nginx
root       40857  0.0  0.3   9876  6528 ?        S    16:20   0:00 nginx: master process ./nginx
nginx      40858  0.0  0.2  14208  4996 ?        S    16:20   0:00 nginx: worker process
root       40862  0.0  0.1   6408  2304 pts/0    S+   16:21   0:00 grep --color=auto nginx
[root@Nginx sbin]# nginx -V
nginx version: nginx/1.26.1
built by gcc 11.4.1 20231218 (Red Hat 11.4.1-3) (GCC)
built with OpenSSL 3.0.7 1 Nov 2022
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module ip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_modm_realip_module

使用sysstemctl控制nginx

#编辑/lib/systemd/system/nginx.service文件
[root@Webserver ~]# cd /lib/systemd/system
[root@Webserver system]# vim nginx.service
#配置文件内容
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid   #指定pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t    #在主服务启动之前执行的命令
ExecStart=/usr/local/nginx/sbin/nginx   #启动服务的核心进程
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target

NGINX核心配置

nginx主配置文件

main block:主配置段,即全局配置段#事件驱动相关的配置
event {
...
}#http/https 作为web服务器相关配置段
http {
...
}#默认配置文件不包括下面两个部分
#mail 作为邮件服务器相关配置段
mail {
...
}#stream 反向代理相关配置段
stream {
...
}

全局配置参数

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

http块参数


[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
http {#在响应报文中将指定的文件扩展名映射至MIME对应的类型include       mime.types;				#可以识别文本,图像,音频,视频等其他的数据default_type  application/octet-stream;	#没有识别的默认类型,例如php,ngxin不识别需要安装php才能渲染呈现log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  logs/access.log  main;		#使用定义为main的日志格式,存放在根目录的logs/access.log中sendfile        on;						#零拷贝功能,sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作)#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;					#长连接超时时间,单位是s#gzip  on;								#开启压缩功能server {#web服务配置}include "/usr/local/nginx/conf.d/*.conf";	#导入其他路径的配置文件,子配置文件#要放在默认发布文件目录下,不然会覆盖默认

核心配置块

c10k高并发

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

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

image-20250724153054696

[root@Webserver ~]#vim /etc/security/limits.conf

image-20250724164908954

安装测试压力工具以及测试

[root@Nginx sbin]# dnf install httpd-tools -y
[root@Nginx sbin]# ab -n 100000 -c 5000 http://172.25.254.10/index.html

基于域名的web站点发布

root和alias

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

示例:

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

示例:

location详细使用

location指令用于匹配请求 URI,其匹配规则可分为匹配模式和优先级两部分

匹配模式符号规则优先级
精确匹配=规则:仅匹配与uri完全一致的请求,不包含子路径最优先
前缀匹配^~规则:匹配以uri为前缀的请求,一旦匹配成功,不再检查正则匹配其次
正则匹配

~或~*

~是区分大小写的

~*是不区分大小写的

规则:按正则表达式匹配 URI,仅匹配完整路径中符合正则的部分再其次
一般匹配无符号规则:匹配以uri为前缀的请求,但优先级低于正则匹配,会先检查正则匹配再判断最不优先

示例:

假设配置如下

location = / { ... }          # 1. 精确匹配 /
location ^~ /static/ { ... }   # 2. 前缀匹配 /static/ 及子路径
location ~ \.php$ { ... }      # 3. 正则匹配 .php 结尾的请求
location /test { ... }         # 4. 普通前缀匹配 /test 及子路径

当访问/时匹配精准匹配

当访问/static/css/style.css匹配前缀匹配

当访问/index.php时会匹配正则匹配

当访问/test/abc会匹配普通匹配

账户认证

账户认证是一种通过用户名和密码验证访问者身份的安全机制,常用于限制对特定网页、目录或整个网站的访问,适用于内部系统、后台管理界面等需要权限控制的场景

配置文件:

image-20250726124442872

实验效果:

image-20250726124622186

自定义错误页面

自定义错误页面是指通过配置 Nginx,将默认的错误提示页面(如 404、500 等)替换为自定义设计的页面,以提升用户体验、保持网站风格一致性,甚至传递品牌信息或引导用户操作

创建错误页面

image-20250726125100092

子配置文件内容:

image-20250726125252436

效果:

image-20250726125457994

自定义错误日志

自定义错误日志是指通过配置,对错误日志的存储路径、记录格式、日志级别等进行个性化设置,以便更高效地监控、排查和分析服务器运行过程中出现的错误

配置文件:

image-20250726125715881

效果:

image-20250726125907600

检测文件是否存在

当检测的文件不存在时会显示指定的内容

image-20250726130507071

image-20250726130721118

测试效果:

image-20250726130735777

长连接

长连接(Persistent Connection)是指客户端与服务器建立一次 TCP 连接后,可在该连接上发送多个 HTTP 请求,而无需每次请求都重新建立连接,从而减少连接建立 / 关闭的开销,提升通信效率。这一机制在 HTTP/1.1 中默认启用,是优化 Web 性能的重要手段

长连接一般在主配置文件中配置

NGINX高级配置

nginx状态页

状态页是 Nginx 提供的一个内置功能,用于展示当前 Nginx 服务器的实时运行状态信息,如连接数、请求处理情况、worker 进程状态等。它通过 ngx_http_stub_status_module 模块实现,是监控 Nginx 性能和排查问题的重要工具

[root@Webserver ~]# vim /usr/local/nginx/conf.d/jie.conf
location /status {stub_status;auth_basic "login pwsswd";auth_basic_user_file /usr/local/nginx/.htpasswd;}

image-20250726151336937

测试:

image-20250726151406406

压缩功能

通过对发送给客户端的数据进行压缩,有效减少数据传输量,进而提升网站访问速度,优化用户体验,同时还能降低服务器带宽消耗

  [root@Webserver ~]# vim /usr/local/nginx/conf/nginx.confkeepalive_timeout  60;keepalive_requests 120;gzip  on;gzip_comp_level 4;gzip_disable "MSIE [1-6]\.";gzip_min_length 4k;gzip_vary on;

image-20250726151602315

测试效果:

NGINX变量使用

使用nginx的变量需要在编译时添加模块

常用内置变量

$remote_addr客户端的 IP 地址
$args请求中的查询字符串(即 URL 中?后面的部分)
$document_root当前请求对应的 Nginx 配置中的root指令指定的文档根目录
$document_uri$request_uri类似,是当前请求的 URI,不包含域名部分
$host请求头中的Host字段值
$http_user_agent客户端的用户代理字符串,包含客户端的浏览器、操作系统等信息
$request_filename当前请求的文件路径,结合rootalias指令生成
$scheme请求使用的协议,通常是http 或 https
$http_cookie客户端发送的Cookie请求头内容
$cookie_key2获取客户端Cookie中名为key2 的值
$http_Accept客户端发送的Accept请求头内容,表明客户端能够接受的响应内容类型

自定义变量

Nginx Rewrite相关功能

riwrite简介

  • Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求

  • 此功能依靠 PCRE(perl compatible regular expression),因此编译之前要安装PCRE库

  • rewrite是nginx服务器的重要功能之一,用于实现URL的重写,URL的重写是非常有用的功能

  • 比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的 链接,就可以设置为访问

  • 另外还可以在一定程度上提高网站的安全性。

ngx_http_rewrite_module 模块指令

if

if 指令用于根据指定条件执行一系列重写或配置操作,类似于编程语言中的条件判断语句。它允许根据请求的属性(如 URL、请求头、变量等)动态调整 Nginx 的处理逻辑,是实现 URL 重写、访问控制、动态配置等功能的核心工具

set

set 指令用于定义或修改变量,这些变量可在后续的配置逻辑(如 if 判断、rewrite 重写、请求头设置等)中引用,是实现动态配置和逻辑处理的重要工具

break

break 指令用于终止当前作用域内的重写规则(rewrite)执行,并停止后续其他重写相关指令的处理,直接按当前 URI 继续处理请求。它的核心作用是控制重写流程,避免不必要的规则重复执行

return

return 指令用于直接终止请求处理流程,并向客户端返回指定的 HTTP 状态码、重定向 URL 或响应内容。它是实现跳转、访问控制、错误处理等功能的常用指令,作用于请求处理的任意阶段,一旦执行就会立即结束当前请求的处理

常用状态码:

200:成功(常用于返回简单响应内容)

301:永久重定向(浏览器会缓存跳转关系,适合永久迁移的 URL)

302:临时重定向(默认,浏览器不缓存,适合临时跳转)

403:禁止访问(常用于权限控制)

404:资源不存在(可自定义错误页面或直接返回)

503:服务暂时不可用(常用于过载保护或维护)

示例:

强制使用加密的https
server {listen 80;server_name example.com;# 所有 HTTP 请求永久重定向到 HTTPSreturn 301 https://www.jie.org;
}

rewrite

通过正则表达式的匹配来改变URI,可以同时存在一个或多个指令,按照顺序依次对URI进行匹配, rewrite主要是针对用户请求的URL或者是URI做具体处理

正则表达式:

. #匹配除换行符以外的任意字符
\w #匹配字母或数字或下划线或汉字
\s #匹配任意的空白符
\d #匹配数字
\b #匹配单词的开始或结束
^ #匹配字付串的开始
$ #匹配字符串的结束
* #匹配重复零次或更多次
+ #匹配重复一次或更多次
? #匹配重复零次或一次
(n) #匹配重复n次
{n,} #匹配重复n次或更多次
{n,m} #匹配重复n到m次
*? #匹配重复任意次,但尽可能少重复
+? #匹配重复1次或更多次,但尽可能少重复
?? #匹配重复0次或1次,但尽可能少重复
{n,m}? #匹配重复n到m次,但尽可能少重复
{n,}? #匹配重复n次以上,但尽可能少重复
\W #匹配任意不是字母,数字,下划线,汉字的字符
\S #匹配任意不是空白符的字符
\D #匹配任意非数字的字符
\B #匹配不是单词开头或结束的位置
[^x] #匹配除了x以外的任意字符
[^jie] #匹配除了jie 这几个字母以外的任意字符

rewrite flag 使用介绍

用于控制重写规则执行后的处理流程,决定是否继续执行其他规则、是否重新匹配 location 等。合理使用 flag 可以精准控制 URL 重写的逻辑,避免不必要的规则循环或错误跳转

redirect;
#临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端
#由客户端重新发起请求;使用相对路径,或者http://或https://开头,状态码:302permanent;
#重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端
#由客户端重新发起请求,状态码:301break;
#重写完成后,停止对当前URL在当前location中后续的其它重写操作
#而后直接跳转至重写规则配置块之后的其它配置,结束循环,建议在location中使用
#适用于一个URL一次重写last;
#重写完成后,停止对当前URI在当前location中后续的其它重写操作,
#而后对新的URL启动新一轮重写检查,不建议在location中使用
#适用于一个URL多次重写,要注意避免出现超过十次以及URL重写后返回错误的给用户

redirect与permanent区别

redirect(临时重定向浏览器会临时记录新 URL,但下次请求原 URL 时,仍会向服务器确认最新地址。搜索引擎不会更新原 URL 的索引,仍会保留原 URL 的权重和排名。通常指HTTP 302 Found(或 307 Temporary Redirect)状态码,表示请求的资源临时转移到了新的 URL。

permanent(永久重定向)浏览器会永久缓存新 URL,下次请求原 URL 时,会直接跳转到新地址,不再向服务器确认。搜索引擎会更新索引,将原 URL 的权重和排名转移到新 URL,原 URL 会逐渐从搜索结果中消失。对应HTTP 301 Moved Permanently状态码,表示请求的资源永久转移到了新的 URL。

动静分离

两台后端服务器一台静态一台动态

配置文件

image-20250727151523622

缓存

配置方法:

image-20250727160633315

image-20250727160653469

测试效果:

缓存前:

image-20250727160709216

缓存后:

image-20250727160731119

二次开发

编译  ​

[root@Webserver openresty-1.25.3.1]# ./configure --prefix=/usr/local/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@Webserver openresty-1.25.3.1]# gmake && gmake install

image-20250729165648388

访问效果:

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

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

相关文章

FPGA+护理:跨学科发展的探索(二)

FPGA护理:跨学科发展的探索(二) 系列文章目录 FPGA护理:跨学科发展的探索(一) 文章目录FPGA护理:跨学科发展的探索(二)系列文章目录引言三、FPGA 在精神医学护理中的应用…

localforage的数据仓库、实例、storeName和name的概念和区别

在 localForage 中,数据仓库、实例、storeName 和 name 是核心概念,用于管理底层存储(IndexedDB/WebSQL/localStorage)。以下是详细解释和区别: 1. 数据仓库 (Database) 定义:指底层的物理数据库&#xff…

使用MAS(Microsoft Activation Scripts)永久获得win10专业版和office全套

文章目录Microsoft Activation Scripts简介下载地址使用方法Microsoft Activation Scripts简介 MAS是Microsoft Activation Scripts缩写。 主要提供如下功能: 使用该脚本可以永久获得win10专业版和office全套(可选) 下载地址 https://pan…

零 shot 语义+在线闭环:深度学习让机器人学会“主动”

来gongzhonghao【图灵学术计算机论文辅导】,快速拿捏更多计算机SCI/CCF发文资讯~在当下,机器人与深度学习的融合正成为AI领域的核心发展趋势,相关研究在顶会顶刊上热度居高不下。从ICLR到CoRL,诸多前沿成果不断涌现&am…

Nginx学习笔记(三)——在 CentOS 7 中配置阿里云镜像源

📚 Nginx学习笔记(三)——在 CentOS 7 中配置阿里云镜像源 在 CentOS 7 中配置阿里云镜像源可显著提升软件安装和更新的速度,以下是详细操作步骤: 🔧 配置阿里云镜像源步骤 1️⃣ 备份原有源配置 sudo mv /…

WebSocket--简单介绍

一、什么是 WebSocket?定义:WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。作用:实现客户端(浏览器)和服务器之间的实时、双向通信。优势:连接保持,通信实时性强(不像 HT…

【STM32 LWIP配置】STM32H723ZG + Ethernet +LWIP 配置 cubemx

STM32H723ZG LAN8742 Ethernet LWIP 配置 cubemx 🌞这边记录一下这块mcu 配置以太网的过程,IDE是KEIL MDK,其实就是在下面多次提到的blog的基础上 在scatter file进行配置 首先,如果想要简单一点 直接去cubemx 那边获取相关的例…

EI检索-学术会议 | 人工智能、虚拟现实、可视化

第五届人工智能、虚拟现实与可视化国际学术会议(AIVRV 2025)定于2025年9月5-7日在中国 成都召开。人工智能正驱动各行业智能化转型,提升效率与质量;虚拟现实技术以其沉浸感重塑教育、娱乐、医疗等领域体验;可视化技术…

力扣(H指数)

一、题目分析 (一)问题描述 给定一个整数数组 citations,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。我们需要计算并返回该研究者的 H 指数。根据维基百科定义:H 指数代表“高引用次数”,一名科研人员的…

标准io(1)

标准I/O基础概念标准I/O&#xff08;Standard Input/Output&#xff09;是C语言提供的一组高级文件操作函数&#xff0c;位于<stdio.h>头文件中。与低级I/O&#xff08;如Unix的系统调用read/write&#xff09;相比&#xff0c;标准I/O引入了缓冲机制&#xff0c;能显著提…

线性代数1000题学习笔记

1000题线代基础第一章1-101000题线代基础第二章1-171000题线代基础第三章1-11

LeetCode算法日记 - Day 8: 串联所有单词的子串、最小覆盖子串

目录 1.串联所有单词的子串 1.2 解法 1.3 代码实现 2. 最小覆盖子串 2.1 题目解析 2.2 解法 2.3 代码实现 1.串联所有单词的子串 30. 串联所有单词的子串 - 力扣&#xff08;LeetCode&#xff09; 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度…

linux实战:基于Ubuntu的专业相机

核心组件就是QTimerOpenCV的组合方案摄像头启停控制用QPushButton实现&#xff0c;帧显示必须用QLabel而不能用普通控件&#xff0c;视频流刷新用QTimer比多线程更简单想快速实现摄像头控制功能&#xff0c;核心组件就是QTimerOpenCV的组合方案。摄像头启停控制用QPushButton实…

《深度剖析前端框架中错误边界:异常处理的基石与进阶》

错误边界作为一种特殊的组件机制&#xff0c;正悄然重塑着应用应对异常的底层逻辑。它并非简单的代码片段组合&#xff0c;而是一套贯穿组件生命周期的防护体系&#xff0c;其核心价值在于将局部错误的影响牢牢锁定在可控范围内&#xff0c;避免整个应用陷入不可挽回的崩溃状态…

6GB显存玩转SD微调!LoRA-scripts本地部署教程,一键炼出专属AI画师

一、介绍LoRA-scripts&#xff08;又名 SD-Trainer&#xff09;&#xff0c;是一个专为训练低秩自适应&#xff08;LoRA&#xff09;模型设计的开源工具集主要应用于Stable Diffusion等AI绘图模型的微调&#xff0c;帮助用户高效创建定制化风格、角色或概念的轻量级模型。目前已…

探索AI的数学奇迹:Gemini 2.5 Pro如何摘得IMO金牌

🌍 引言:从人类天才到AI奇才的跨越 想象一下,一个AI模型坐在国际数学奥林匹克(IMO)的考场里,手里拿着笔(好吧,其实是处理token),面对那些让高中生们头疼不已的难题。它不是靠死记硬背,而是通过深思熟虑的推理,一步步攻克难关。这听起来像科幻小说,但2025年,这已…

MCP学习与实践

目录 1.MCP简介 1.1 MCP是什么 1.2 MCP与Agent关系&#xff1a; 1.3 MCP的架构 2. MCP原理 2.1 MCP 工作过程 2.2 MCP 通讯方式 2. MCP使用 2.1 cursor中增加MCP-SSE(高德地图MCP) 2.2 cursor中增加MCP-STDIO&#xff08;12306-MCP&#xff09; 本文详细讲解了什么是…

MySQL(187)如何使用pt-query-digest进行查询分析?

使用 pt-query-digest 工具可以帮助分析 MySQL 查询的性能&#xff0c;找出慢查询、频繁查询以及消耗资源较多的查询&#xff0c;从而为优化提供依据。以下是详细深入的使用 pt-query-digest 进行查询分析的步骤和相关示例。 一、安装 pt-query-digest pt-query-digest 是 Perc…

分享一个基于Python和Hadoop的的电信客户特征可视化分析平台 基于Spark平台的电信客服数据存储与处理系统源码

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题…

初识STL

一 、STL的诞生在C发展早期&#xff0c;程序员在不同的项目中需要反复编写相似的数据结构和算法。重复开发带来以下问题&#xff1a;代码冗余&#xff1a;每个项目都要重新实现基本数据结构和算法维护困难&#xff1a;不同人编写的代码风格不一致&#xff0c;难以维护效率低下&…