当前位置: 首页 > news >正文

web服务器nginx

I/O 模型

模型同步 / 异步阻塞 / 非阻塞核心优势典型场景
阻塞 I/O(BIO)同步阻塞实现简单低并发、短连接
非阻塞 I/O(NIO)同步非阻塞避免无意义阻塞极少单独使用
I/O 多路复用同步阻塞(监控时)高效处理高并发Web 服务器、高并发服务
信号驱动 I/O同步非阻塞无需轮询特定监控场景
异步 I/O(AIO)异步非阻塞效率最高,完全不干预高性能数据库、实时处理

总结

  • 高并发场景下,I/O 多路复用(如epoll)是性价比最高的选择,平衡了效率和复杂度。
  • 极致性能需求下,异步 I/O(如 Windows IOCP)是最优解,但实现成本高。
  • 简单场景用阻塞 I/O,非阻塞和信号驱动 I/O 因局限性较少单独使用。

NGINX核心配置

1.Nginx 编译安装

首先用xshell通过xftp将NGINX-1.26.1传上去再解压

在运行

接下来安装依赖包gcc,openssl,pcre,zlib

然后make,make install

这样编译安装就完成了

验证

添加路径

source ~/.bash_profile

2.平滑升级和回滚

平滑升级

提前安装好nginx-1.24,再编译安装1.26但不要make install

将原来的nginx文件备份一下,再将新的nginx复制过去

通过ps -aux |grep nginx 查看进程

kill -USR2 进程号 升级nginx

kill -WINCH 进程号  回收旧版本

回滚

与升级差不多,先备份1.26版本的nginx,在将升级前备份的1.24版本的nginx覆盖现有的nginx文件

在通过kill -HUP进程号降级,最后通过kill -WINCH 进程号回收版本

3.Nginx 启动文件

systemctl daemon-reload                  #重新加载文件

systemctl start nginx                         #启动nginx

4.实现 nginx 的高并发配置

启动Nginx工作进程的用户,增加CPU的数量,打开文件的数量100000

采用异步非阻塞epoll,最大并发连接数改为100000

 修改pam限制

支持打开的文件数量

ab -c 5000 -n 10000 http://192.168.23.80/(安装httpd-tools)

当需要的并发量过大时,需要增加服务器数量,实现负载均衡

5.root 与 alias

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

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

配置

访问(当访问alias的时候,会显示alias定义的/mnt/dirtest)要提前创建好dirtest目录

 

6.location 的详细使用

location使用:按理说访问时是根据/web/html这个路径访问。而location只需要访问域名下location所指的地址,如上面curl访问域名/dirtest代表访问/mnt/dirtest/index.html

7.Nginx 账户认证功能

访问时需要登录认证

建立用户认证(第一个要加-c,后面不要加否则会直接覆盖)

htpasswd -cmb /usr/local/nginx/.htpasswd admin 123

htpasswd -mb /usr/local/nginx/.htpasswd ldr 123

查看

配置

访问(需要在/web/login/index.html写入内容)

8.自定义错误页面

配置文件

在文件里写内容

进行错误访问

9.自定义错误日志

mkdir "/var/log/nginx" -p

配置

访问错误页面来看日志

10.检测文件是否存在

配置

当访问不存在的页面时会访问default.html

11.长连接配置

在主配置文件配置

开启长连接后,返回客户端的会话保持时间为60s,访问次数为3次,只有第一次的时候才要三次握手,当访问超时或超过访问次数时会自动断开

需要安装telnet

测试

12.作为下载服务器配置

创建共享目录

建立实验素材

子配置文件

root以下内容意思是

自动文件索引功能

计算文件确切大小

显示本机时间而非GMT(格林威治)时间

显示索引的页面文件风格

测试

NGINX高级配置 

1 Nginx 状态页

子配置

测试(前提要在Windows配置hosts解析,在Windows里以管理员身份运行记事本找到hosts文件)

2 Nginx 压缩功能

创建一个小html文件用于测试,在复制一个日志文件作为大文件,当文件大于4k时会压缩

主配置文件

测试(看accept-ranges)

3 nginx中的变量

$remote_addr; #存放了客户端的地址,注意是客户端的公网IP

$args; #变量中存放了URL中的所有参数

&enc=utf-8 #返回结果为: keyword=手机&enc=utf-8

$is_args #如果有参数为? 否则为空

$document_root; #保存了针对当前资源的请求的系统根目录,

$document_uri; #保存了当前请求中不包含参数的URI,注意是不包含请求的指令

$host; #存放了请求的host名称

echo $limit_rate; #如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0

$remote_port; #客户端请求Nginx服务器时随机打开的端口,这是每个客户端自己的端口

$remote_user; #已经经过Auth Basic Module验证的用户名

$request_body_file; #做反向代理时发给后端服务器的本地资源的名称

$request_method #请求资源的方式

$request_filename; #当前请求的资源文件的磁盘路径,由root或alias指令与URI请求生成的文件绝对路径,

$request_uri; #包含请求参数的原始URI,不包含主机名,

$document_uri#包含请求参数的原始URI,不包含主机名,相当于:$document_uri?$args,

$scheme; #请求的协议,例如:http,https,ftp等

$server_protocol; #保存了客户端请求资源使用的协议的版本,

$server_addr; #保存了服务器的IP地址

$server_name; #虚拟主机的主机名

$server_port; #虚拟主机的端口号

$http_user_agent; #客户端浏览器的详细信息

$http_cookie; #客户端的所有cookie信息

$cookie_ <name>#name为任意请求报文首部字部cookie的key名

$http_ <name>#name为任意请求报文首部字段,表示记录请求报文的首部字段,name的对应的首部字段名需要为小写,如果有 横线需要替换为下划线

测试

Nginx Rewrite 相关功能

1.相关指令

if 指令

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

if (条件匹配) {

action

}

 set 指令

指定key并给其定义一个变量,变量可以调用Nginx内置变量赋值给key 另外set定义格式为set $key value,value可以是text, variables和两者的组合。

set $name lee;

 break 指令

用于中断当前相同作用域(location)中的其他Nginx配置 与该指令处于同一作用域的Nginx配置中,位于它前面的配置生效 位于后面的 ngx_http_rewrite_module 模块中指令就不再执行

return 指令

return用于完成对请求的处理,并直接向客户端返回响应状态码,比如:可以指定重定向URL(对于特殊重 定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后的所有配 置都将不被执行,return可以在server、if 和 location块进行配置

2.rewrite 指令

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

配置(例子:当无视location/break中break,那么访问/break时有路径指向/test1会去访问/test1,访问/test1时后面路径指向/lee,最后访问/lee返回到200)

域名永久与临时重定向

redirect;临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端

permanent; #重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端

break; #重写完成后,停止对当前URL在当前location中后续的其它重写操作

last; #重写完成后,停止对当前URI在当前location中后续的其它重写操作,

3.Nginx 防盗链

盗链

首先客户端下载httpd

准备盗链web页面

在nginx上放置图片路径为/web/html/images

测试

防盗链

nginx支持通过ngx_http_referer_module模块,检查访问请求的referer信息是否有效 实现防盗链功能

Nginx 反向代理功能

反向代理:reverse proxy,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的 一种方式,这是用的比较多的一种方式。

动静分离

server {

listen 80;

server_name www.ldr.com;

}

当访问域名时会去访问20,当访问.php|jsp|js时会去访问30

缓存功能

缓存功能默认关闭状态,需要先动配置才能启用

主配置文件

子配置文件

测试

nginx负载均衡

子配置文件放在http模块前面

mysql配置

测试

实现 FastCGI

安装

将nginx删了,让它与fastcgi一起编译安装

解压源码并安装

[root@Nginx ~]# 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/php-fpm.service

vim /lib/systemd/system/php-fpm.service

# Mounts the /usr, /boot, and /etc directories read-only for processes invoked by this unit. #ProtectSystem=full #注释该内容

Nginx配置转发

测试

php的缓存模块memcache

 安装autoconf和memcache

用户和密码

vim /data/php/memcache.php

vim /usr/local/php/etc/php.ini

部署memcache

测试

性能对比

php高速缓存

配置

测试

nginx 二次开发版本

安装依旧编译安装

http://www.lryc.cn/news/605408.html

相关文章:

  • RNN、LSTM、Transformer推荐博文
  • Spring AI 海运管理应用
  • Django常见模型字段
  • 30道JS高频经典笔试题集合+详解(一)
  • LTE广播信道
  • 基于Java对于PostgreSQL多层嵌套JSON 字段判重
  • 视觉语言模型在视觉任务上的研究综述
  • 微服务的编程测评系统8-题库管理-竞赛管理
  • 闸机控制系统从设计到实现全解析 第 2 篇:数据库设计与 SqlSugar 集成方案
  • Mysql事务原理
  • HPC超算、集群计算
  • 下拉加载问题
  • HTML应用指南:利用POST请求获取全国公牛门店位置信息
  • Elasticsearch(ES)基础语法(笔记)(持续更新)
  • VSCode高效集成开发全流程优化
  • colima 修改镜像源为国内源
  • docker:将cas、tomcat、字体统一打包成docker容器
  • QT---》文件MD5码的获取与验证
  • 结合C++红黑树与AI人工智能的应用
  • Linux启动防火墙提示提示 Active: failed (Result: timeout)
  • 7.pcl滤波(一)
  • IFCVF驱动+vhost-vfio提高虚拟机网络性能
  • 在线免疫浸润分析
  • Kimi-K2技术报告解读:万亿参数大模型,开源模型新SOTA
  • 如何判断一个数据库是不是出问题了?
  • STM32F1 Flash的操作
  • Python Day19 时间模块 和 json模块 及例题分析
  • C语言15-构造数据类型、位运算符、内存管理
  • 2018 年 NOI 最后一题题解
  • yolo8+阿里千问图片理解(华为简易版小艺看世界)