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配置转发 ![](https://i-blog.csdnimg.cn/direct/019494ea2b6e4decad26e4775ca7af13.png) 测试![](https://i-blog.csdnimg.cn/direct/c43cbd2b1ee64f27aad747efcfa70f57.png) #### php的缓存模块memcache 安装autoconf和memcache ![](https://i-blog.csdnimg.cn/direct/5ecc39b902554236b1825be41cfc04aa.png) ![](https://i-blog.csdnimg.cn/direct/385504d64e7e495295e72dc2ec89f9fe.png)用户和密码 vim /data/php/memcache.php ![](https://i-blog.csdnimg.cn/direct/7e163969015d45c8a4252c89aa3eacf5.png) vim /usr/local/php/etc/php.ini ![](https://i-blog.csdnimg.cn/direct/0833cdaa1b074e9688d347b060a5d670.png) 部署memcache![](https://i-blog.csdnimg.cn/direct/1d910238c646471fb3d688256433b32a.png) 测试 ![](https://i-blog.csdnimg.cn/direct/4d67b6b8db554e3e9fff474595024719.png) 性能对比 ![](https://i-blog.csdnimg.cn/direct/837be11c5d1c4b38b3512f6b0c668778.png)![](https://i-blog.csdnimg.cn/direct/3dda8479963e433d813c7c62f020d717.png) #### php高速缓存 配置 ![](https://i-blog.csdnimg.cn/direct/21808f2ed74948d8b8314700b0c269cb.png) 测试 ![](https://i-blog.csdnimg.cn/direct/519320db42174ee5bad9872b8e7b2738.png) ## nginx 二次开发版本 安装依旧编译安装![](https://i-blog.csdnimg.cn/direct/fc3bced89122471fa654f68852f53ba7.png)