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 二次开发版本
安装依旧编译安装