无敌美少男和无敌美少女都在看的企业高性能web服务器(nginx)

1 篇文章 0 订阅

目录

一.Nginx 概述

1.1Nginx 介绍

1.2 Nginx 功能介绍

1.3 基础特性

1.4 Web 服务相关的功能

二:Nginx 安装  

2.1:Nginx版本和安装方式

2.2:Nginx 编译安装

2.21:编译安装 Nginx 

 2.22:验证版本及编译参数

 2.3:平滑升级和回滚

平滑升级案例

2.4:Nginx 启动文件

 三:Nginx 核心配置详解

3.1:配置文件说明

 3.2:全局配置

3.21:实现 nginx 的高并发配置

3.3:核心配置示例

3.31 :新建一个 PC web 站点

3.32:root 与 alias

root

alias

3.33:location 的详细使用

3.34:Nginx 账户认证功能

3.35自定义错误页面

3.36:自定义错误日志

3.37检测文件是否存在

3.38:长连接配置

3.39:作为下载服务器配置 

四: Nginx 高级配置

4.1 Nginx 状态页

4.2 Nginx 压缩功能

4.3:Nginx 变量使用

4.31 :内置变量

4.32:自定义变量  

 五 Nginx Rewrite 相关功能

 5.1:if 指令 

 5.2:break 指令

5.3:return 指令  

 5.4:rewrite 指令

5.41域名永久与临时重定向  

5.411:永久重定向301

5.412临时重定向302 

 六:Nginx 反向代理功能

6.1:指定 location 实现反向代理 

6.11:实现动静分离 

6.2:非缓存场景压测


一.Nginx 概述

1.1Nginx 介绍

Nginxengine X 2002年开发,分为社区版和商业版(nginx plus )

2019311 F5 Networks 6.7亿美元的价格收购

Nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理服务器

解决 C10K 问题( 10K Connections
Nginx 官网: http://nginx.org
nginx 的其它的二次发行版:
  • Tengine:由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加 了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了 很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。从201112月开始, Tengine成为一个开源项目官网: http://tengine.taobao.org/
  • OpenResty:基于 Nginx Lua 语言的高性能 Web 平台, 章亦春团队开发,官网:http://openr esty.org/cn/

1.2 Nginx 功能介绍

  • 静态的web资源服务器html,图片,jscsstxt等静态资源
  • http/https协议的反向代理
  • 结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求
  • tcp/udp协议的请求转发(反向代理)
  • imap4/pop3协议的反向代理

1.3 基础特性

  • 模块化设计,较好的扩展性
  • 高可靠性
  • 支持热部署:不停机更新配置文件,升级版本,更换日志文件
  • 低内存消耗:10000keep-alive连接模式下的非活动连接,仅需2.5M内存
  • event-driven,aio,mmapsendfile

1.4 Web 服务相关的功能

  • 虚拟主机(server
  • 支持 keep-alive 和管道连接(利用一个连接做多次请求)
  • 访问日志(支持基于日志缓冲提高其性能)url rewirte
  • 路径别名
  • 基于IP及用户的访问控制
  • 支持速率限制及并发数限制
  • 重新配置和在线升级而无须中断客户的工作进程

二:Nginx 安装  

2.1:Nginx版本和安装方式

 Nginx版本

  • Mainline version 主要开发版本,一般为奇数版本号,比如1.19
  • Stable version 当前最新稳定版,一般为偶数版本,:1.20
  • Legacy versions 旧的稳定版,一般为偶数版本,:1.18
Nginx 安装可以使用 yum 或源码安装,但是推荐使用源码编译安装
  • yum的版本比较旧
  • 编译安装可以更方便自定义相关路径
  • 使用源码编译可以自定义相关功能,更方便业务的上的使用

2.2:Nginx 编译安装

编译器介绍
源码安装需要提前准备标准的编译器, GCC 的全称是( GNU Compiler collection ),其有 GNU 开发,并以
GPL LGPL 许可,是自由的类 UNIX 即苹果电脑 Mac OS X 操作系统的标准编译器,因为 GCC 原本只能处理 C
言,所以原名为 GNU C 语言编译器,后来得到快速发展,可以处理 C++,Fortran pascal objective C
java 以及 Ada 等其他语言,此外还需要 Automake 工具,以完成自动创建 Makefile 的工作, Nginx 的一些模块
需要依赖第三方库,比如 : pcre (支持 rewrite ), zlib (支持 gzip 模块)和 openssl (支持 ssl 模块)
等。

2.21:编译安装 Nginx 

首先把需要的依赖包全部下完

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

 如果知道缺什么包,查询需要的包方法

yum search xxxx   你需要下载的包

 添加用户并设置家目录

useradd -s /sbin/nologin -M nginx

 解压下载的1.24的压缩包

tar zxf nginx-1.24.0.tar.gz

 进入解压好的文件夹,并且把需要的东西全部添加进去

cd nginx-1.24.1/
./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
 

 然后进行安装

make && make install

 2.22:验证版本及编译参数

把nginx软件的命令执行路陷阱添加到环境变量中

编辑  ~/.bash_profile 配置文件

vim ~/.bash_profile
export PATH=$PATH:/usr/local/nginx/sbin

 运行配置文件

source ~/.bash_profile
然后运行nginx
nginx

 2.3:平滑升级和回滚

有时候我们需要对 Nginx 版本进行升级以满足对其功能的需求,例如添加新模块,需要新功能,而此时 Nginx又在跑着业务无法停掉,这时我们就可能选择平滑升级

平滑升级案例

首先解压nginx-1.26的压缩包

tar zxf nginx-1.26.1.tar.gz

进入压缩好的文件夹并且编译新版本

cd nginx-1.26.1/
# 开始编译新版本   ./configure --prefix=/usr/local/nginx --add-module=/root/echo-nginx-module-0.63    --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
 

 这个时候安装只需要make而不需要make install 了,前面已经做过了

make

 把之前的旧版的nginx命令备份

cd /usr/local/nginx/sbin
cp nginx nginx.old

 注意:此时要把nginx服务开启!!!!!!!!!!!!!不然会导致后面升级失败(不终止nginx服务下升级版本)

把新版本的nginx命令复制过去

 cd /usr/local/nginx/sbin

 \cp -f /root/nginx/nginx-1.26.1/objs/nginx     /usr/local/nginx/sbin

检测一下有没有问题

[root@node-nginx sbin]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

平滑升级可执行程序 , 将存储有旧版本主进程 PID 的文件重命名为 nginx.pid.oldbin ,并启动新的
nginx
kill -USR2 43498 #nginx master ID
# 此时两个 master 的进程都在运行 , 只是旧的 master 不在监听 , 由新的 master 监听 80
# 此时 Nginx 开启一个新的 master 进程,这个 master 进程会生成新的 worker 进程,这就是升级后的 Nginx 进 程,此时老的进程不会自动退出,但是当接收到新的请求不作处理而是交给新的进程处理。

此时通过ps aux | grep nginx 发现mater的不见了

但是查看版本依旧是老版本

[root@node-nginx]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.24.0        ## 依旧是旧版本生生效
Date: Thu, 18 Jul 2024 07:45:58 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Thu, 18 Jul 2024 03:41:13 GMT
Connection: keep-alive
ETag: "66988ed9-267"
Accept-Ranges: bytes

 此时回收旧版本

kill -WINCH 43498 #nginx master ID 

 然后再看看什么版本:

[root@node-nginx]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.26.1        # 新版本生效
Date: Thu, 18 Jul 2024 07:59:45 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Thu, 18 Jul 2024 03:41:13 GMT
Connection: keep-alive
ETag: "66988ed9-267"
Accept-Ranges: bytes

2.4:Nginx 启动文件

如果说你先平滑升级之后做这个小实验的话,就要先把所有的进程全部结束掉,不然无法重启nginx服务

pkill nginx

 然后在开始配置

[root@node-nginx ~]# vim /lib/systemd/system/nginx.service 
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
 

 然后把这个配置文件重载一下并开启nginx服务

systemctl daemon-reload
systemctl start nginx

 三:Nginx 核心配置详解

3.1:配置文件说明

Nginx 的配置文件的组成部分:
  • 主配置文件:nginx.conf
  • 子配置文件: include conf.d/*.conf
  • fastcgi uwsgiscgi 等协议相关的配置文件
  • mime.types:支持的mime类型,MIME(Multipurpose Internet Mail Extensions)多用途互联网邮
  • 件扩展类型,MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据,是设定某
  • 种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动
  • 使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
nginx 配置文件格式说明
配置文件由指令与指令块构成
每条指令以 ; 分号结尾,指令与值之间以空格符号分隔
可以将多条指令放在同一行 , 用分号分隔即可 , 但可读性差 , 不推荐
指令块以 { } 大括号将多条指令组织在一起 , 且可以嵌套指令块
include 语句允许组合多个配置文件以提升可维护性
使用 # 符号添加注释,提高可读性
使用 $ 符号使用变量
部分指令的参数支持正则表达式

Nginx 主配置文件的配置指令方式:

directive value [value2 ...];

注意
(1) 指令必须以分号结尾
(2) 支持使用配置变量
内建变量:由 Nginx 模块引入,可直接引用
自定义变量:由用户使用 set 命令定义 , 格式 : set variable_name value;
引用变量: $variable_name

主配置文件结构:四部分

main block :主配置段,即全局配置段,对 http,mail 都有效
# 事件驱动相关的配置
event {
...
}
#http/https 协议相关配置段
http { ...
}
# 默认配置文件不包括下面两个块
#mail 协议相关配置段
mail {
...
}
#stream 服务器相关配置段
stream {
...
}

默认的nginx.conf 配置文件格式说明

# 全局配置端,对全局生效,主要设置 nginx 的启动用户 / 组,启动的工作进程数量,工作模式, Nginx PID
径,日志路径等。
user nginx nginx;
worker_processes 1; # 启动工作进程数数量
events { #events # 设置快,主要影响 nginx 服务器与用户的网络连接,比如是否允许同时接受多
个网络连接,使用哪种事件驱动模型 # 处理请求,每个工作进程可以同时支持的
最大连接数,是否开启对多工作进程下的网络连接进行序列化等。
worker_connections 1024; # 设置单个 nginx 工作进程可以接受的最大并发,作为 web 服务器
的时候最大并发数为 #worker_connections *
worker_processes ,作为反向代理的时候为
#(worker_connections * worker_processes)/2
}
http { #http 块是 Nginx 服务器配置中的重要部分,缓存、代理和日志格
式定义等绝大多数功能和第三方模块都 # 可以在这设置, http 块可
以包含多个 server 块,而一个 server 块中又可以包含多个 location 块,
#server 块可以配置文件引入、 MIME-Type 定义、日志自定义、是
否启用 sendfile 、连接超时时间和 # 单个链接的请求上限等。
include mime.types;
default_type application/octet-stream;
sendfile on; # 作为 web 服务器的时候打开 sendfile 加快静态文件传输,指定是
否使用
#sendfile 系统调用来传输文件
#sendfile 系统调用在两个文件描述符之间直接传递数据 ( 完全在
内核中操作 )
# 从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率
很高,被称之为零拷贝,
# 硬盘 >> kernel buffer ( 快速拷贝到 kernelsocket
buffer) >> 协议栈。
keepalive_timeout 65; # 长连接超时时间,单位是秒
server { # 设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多
location 模块
# 比如本虚拟机监听的端口、本虚拟机的名称和 IP 配置,多个
server 可以使用一个端口比如都使用 #80 端口提供 web 服务
listen 80; # 配置 server 监听的端口 3.2 全局配置
Main 全局配置段常见的配置指令分类
正常运行必备的配置
优化性能相关的配置
用于调试及定位问题相关的配置
事件驱动相关的配置

 3.2:全局配置

Main 全局配置段常见的配置指令分类
  • 正常运行必备的配置
  • 优化性能相关的配置
  • 用于调试及定位问题相关的配置
  • 事件驱动相关的配置

全局配置说明:

user nginx nginx; # 启动 Nginx 工作进程的用户和组
worker_processes [number | auto]; # 启动 Nginx 工作进程的数量 , 一般设为和 CPU 核心数相同
worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto ; # Nginx 工作进程绑定到指定的 CPU 核心,默认 Nginx 是不进行进程绑定的,绑定并不是意味着当前 nginx
程独占以一核心 CPU ,但是可以保证此进程不运行在其他核心上,这就极大减少了 nginx 的工作进程在不同的
cpu 核心上的来回跳转,减少了 CPU 对进程的资源分配与回收以及内存管理等,因此可以有效的提升 nginx 服务
器的性能。
CPU MASK: 00000001 0 CPU
00000010 1 CPU
10000000 7 CPU

全局参数优化小实验:

首先修改/usr/local/nginx/conf/nginx.conf的配置文件,添加启动的用户和组,设置工作进程数量为自动,cpu核心为两个

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

 

然后重载一下

nginx -s reload

 然后修改pam限制为100000

vim /etc/security/limits.conf

然后测试一下:

sudo -u nginx ulimit -a

3.21:实现 nginx 的高并发配置

默认配置不支持高并发,会报错!!!

安装测试工具看报错信息

看报错信息命令:tail /usr/local/nginx/logs/error.log

首先安装测试工具

dnf install httpd-tools -y

然后测试看报错信息:

[root@node-nginx ~]# ab -n 10000 -c 5000 http://172.25.254.100/index.html
This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.25.254.100 (be patient)
socket: Too many open files (24)

可以看到太多文件无法处理

实现步骤高并发步骤:

首先修改配置文件

vim /etc/security/limits.conf

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

 

 重载一下:

ngnix -s reload

 然后再次测试一下,看能否高并发处理文件

[root@node-nginx ~]# ab -n 10000 -c 500 http://172.25.254.100/index.html
This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.25.254.100 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        nginx/1.26.1
Server Hostname:        172.25.254.100
Server Port:            80

Document Path:          /index.html
Document Length:        615 bytes

Concurrency Level:      500
Time taken for tests:   0.375 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      8480000 bytes
HTML transferred:       6150000 bytes
Requests per second:    26631.94 [#/sec] (mean)
Time per request:       18.774 [ms] (mean)
Time per request:       0.038 [ms] (mean, across all concurrent requests)
Transfer rate:          22054.57 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    7   3.1      7      18
Processing:     2   11   4.5     11      34
Waiting:        0    8   4.2      7      32
Total:          7   18   5.2     18      40

Percentage of the requests served within a certain time (ms)
  50%     18
  66%     20
  75%     22
  80%     23
  90%     24
  95%     26
  98%     29
  99%     30
 100%     40 (longest request)

完美处理!!!实验完成!!!!!!

3.3:核心配置示例

基于不同的 IP 、不同的端口以及不用得域名实现不同的虚拟主机,依赖于核心模ngx_http_core_module实现。

3.31 :新建一个 PC web 站点

首先定义子配置文件路径
mkdir -p /usr/local/nginx/conf.d

然后进入配置文件修改配置

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

 

然后创建虚拟主机网站配置

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

 

然后创建网页目录并且输入信息到网站:

 mkdir -p /data/web/html

echo www.chl.org > /data/web/html/index.html

 重载一下nginx

nginx -s reload

然后记得在windows本地添加域名解析

然后进行浏览器测试:

测试成功!!!网页搭建完毕!!!!!

3.32:root alias

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

root小实验

首先修改配置文件
vim /usr/local/nginx/conf.d/vhost.conf
server {
        listen 80;
        server_name www.chl.org;
        root /data/web/html;
        index index.html;
        location /test1/ {
                root /data/web;
        }
}

 创建网站目录并且输入信息到网站

mkdir /data/web/test1 -p

echo you are sb > /data/web/test1/index.html

 然后把nginx重载一下

nginx -s reload

 浏览器测试一下:

测试成功!!!!root小实验成功!!!!

alias
定义路径别名,会把访问的路径重新定义到其指定的路径 , 文档映射的另一种机制 ; 仅能用于
location 上下文 , 此指令使用较少
alias小实验
首先修改配置文件
vim /usr/local/nginx/conf.d/vhost.conf
server {
        listen 80;
        server_name www.chl.org;
        root /data/web/html;
        index index.html;
        location /test1/ {
                root /data/web;
        }
        location /test2  {
                alias /data/web/test1;
       }
}

 重载并浏览器测试

nginx -s reload



3.33:location 的详细使用

  • 在一个serverlocation配置段可存在多个,用于实现从uri到文件系统的路径映射;
  • ngnix会根据用户请求的URI来检查定义的所有location,按一定的优先级找出一个最佳匹配,
  • 而后应用其配置在没有使用正则表达式的时候,nginx会先在server中的多个location选取匹配度最 高的一个uri
  • uri是用户请求的字符串,即域名后面的web文件路径
  • 然后使用该location模块中的正则url和字符串,如果匹配成功就结束搜索,并使用此location处理 此请求。
# 语法规则:
location [ = | ~ | ~* | ^~ ] uri { ... }
= # 用于标准 uri 前,需要请求字串与 uri 精确匹配,大小敏感 , 如果匹配成功就停止向下匹配并立
即处理请求
^~ # 用于标准 uri 前,表示包含正则表达式 , 并且匹配以指定的正则表达式开头
# uri 的最左边部分做匹配检查,不区分字符大小写
~ # 用于标准 uri 前,表示包含正则表达式 , 并且区分大小写
~* # 用于标准 uri 前,表示包含正则表达式 , 并且不区分大写
不带符号 # 匹配起始于此 uri 的所有的 uri
\ # 用于标准 uri 前,表示包含正则表达式并且转义字符。可以将 . * ? 等转义为普通符号
# 匹配优先级从高到低:
=, ^~, ~/~*, 不带符号

3.34:Nginx 账户认证功能

ngx_http_auth_basic_module 模块提供此功能

小实验实现:

首先设置管理员和用户的账号密码

[root@node-nginx ~]# htpasswd -cm /usr/local/nginx/.htpasswd admin
New password: 
Re-type new password: 
Adding password for user admin
[root@node-nginx ~]# cat /usr/local/nginx/.htpasswd 
admin:$apr1$zn0xbHun$PHCTKUKqENlh5Q/9m0o5o1
[root@node-nginx ~]# htpasswd -m /usr/local/nginx/.htpasswd chl
New password: 
Re-type new password: 
Adding password for user chl
[root@node-nginx ~]# cat /usr/local/nginx/.htpasswd 
admin:$apr1$zn0xbHun$PHCTKUKqENlh5Q/9m0o5o1
chl:$apr1$jnEgmjiS$i7nLY.VdiDH7Bk8OD0SJb0

 先建立一个chl来测试一下能不能正常运行

首先建立网站目录并且输入信息到网站

[root@nginx ~]# mkdir -p /data/web/chl
[root@nginx ~]# echo chl > /data/web/chl/index.html

 然后修改配置文件:

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

server {
        listen 80;
        server_name www.chl.org;
        root /data/web/html;
        index index.html;

        location /chl {
                root /data/web;
                index index.html;
                }

}

然后重载一下服务

nginx -s reload

测试一下网页是否正常运行:

然后设置验证密码:

[root@node-nginx ~]# cat /usr/local/nginx/conf.d/vhost.conf 
server {
        listen 80;
        server_name www.chl.org;
        root /data/web/html;
        index index.html;

        location /chl {
                root /data/web;
                auth_basic "login password";
                auth_basic_user_file "/usr/local/nginx/.htpasswd";
                }
}

测试:

 

测试成功!!!!

3.35自定义错误页面

自 定义错误页,同时也可以用指定的响应状态码进行响应 , 可用位置: http, server, location, if in
location
自定义错误页面小实验:
首先编辑配置文件
vim /usr/local/nginx/conf.d/vhost.conf 

server {
        listen 80;
        server_name www.chl.org;
        root /data/web/html;
        index index.html;
        error_page 404 /40x.html;

        location /chl {
                root /data/web;
                auth_basic "login password";
                auth_basic_user_file "/usr/local/nginx/.htpasswd";
                }

        location = /40x.html {
               root /data/web/errorpage;
            }
}

然后创建错误页面的网站目录并且输入信息到网站:

mkdir -p /data/web/errorpage
echo you are sb > /data/web/errorpage/40x.html 

然后浏览器测试一个错误页面:

3.36:自定义错误日志

可以自定义错误日志
Syntax: error_log file [level];
Default:
error_log logs/error.log error;
Context: main, http, mail, stream, server, location
level: debug, info, notice, warn, error, crit, alert, emerg

 自定义错误日志小实验:

首先编辑配置文件:

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

创建日志并且重载一下:

mkdir -p /var/log/chl.org
nginx -s reload

 注意!!!!!需要在虚拟机上添加本地解析,否则无法curl 通

然后测试一下看错误日志:

[root@node-nginx ~]# curl www.chl.org/dsadsa
you are sb

[root@node-nginx ~]# cat /var/log/chl.org/error.log 
2024/08/16 14:39:15 [error] 45657#0: *12192 open() "/data/web/html/dsadsa" failed (2: No such file or directory), client: 172.25.254.100, server: www.chl.org, request: "GET /dsadsa HTTP/1.1", host: "www.chl.org"

测试成功!!!! 

3.37检测文件是否存在

try_files 会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如 果所有文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一 个内部重定向,之前的参数只设置内部URI 的指向。最后一个参数是回退 URI 且必须存在,否则会出现内部500 错误
语法格式
Syntax: try_files file ... uri;
try_files file ... =code;
Default: —
Context: server, location

 检测文件是否存在小实验:

首先编辑配置文件:

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

 创建网页目录并且输入信息到网站

[root@node-nginx ~]# mkdir /data/web/html/error
[root@node-nginx ~]# echo you are sb > /data/web/html/error/default.html

测试:curl www.chl.org/dasdasdasd 没有这个的话就跳转default.html页面  

实验成功!!!!!

3.38:长连接配置

长连接小实验:

首先下载测试工具:

dnf install telnet -y

 然后编辑配置文件:

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

keepalive_timeout timeout [header_timeout]; #设定保持连接超时时长,0表示禁止长连接,
默认为75s
#通常配置在http字段作为站点全局配置
keepalive_requests 数字; #在一次长连接上所允许请求的资源的最大数量
#默认为100次,建议适当调大,比如:500 

然后重启nginx服务!!!!!

然后开始测试

输入信息之后,3s后会断开连接!!!

3.39:作为下载服务器配置 

ngx_http_autoindex_module 模块处理以斜杠字符 "/" 结尾的请求,并生成目录列表 , 可以做为下载服务 配置使用
相关指令:
autoindex on | off; # 自动文件索引功能,默为 off
autoindex_exact_size on | off; # 计算文件确切大小(单位 bytes ), off 显示大概大小(单位 K 、 M),默认 on
autoindex_localtime on | off ; # 显示本机时间而非 GMT( 格林威治 ) 时间,默认 off
autoindex_format html | xml | json | jsonp; # 显示索引的页面文件风格,默认 html
limit_rate rate; # 限制响应客户端传输速率 ( GET HEAD 以外的所有方法 ) ,单位
B/s,bytes/second # 默认值 0, 表示无限制 , 此指令由
ngx_http_core_module 提供
set $limit_rate 4k; # 也可以通变量限速 , 单位 B/s, 同时设置 , 此项优级高 .

 下载服务器小实验:

首先创建下载文件网站的目录,并且添加文件到下载的网站里面去        

[root@node-nginx ~]# mkdir /data/web/download
[root@node-nginx ~]# dd if=/dev/zero of=/data/web/download/chlfile bs=1M count=100    ####添加文件到下载的网站里面去!!!
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.0734139 s, 1.4 GB/s

然后编辑配置文件:

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

浏览器测试看是否成功

 

测试文件能否下载:

完美运行,测试完成!!!!

四: Nginx 高级配置

4.1 Nginx 状态页

  • 基于nginx 模块 ngx_http_stub_status_module 实现,
  • 在编译安装nginx的时候需要添加编译参数 --with-http_stub_status_module
  • 否则配置完成之后监测会是提示法错误

状态页面小实验 

首先编辑配置文件:

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

然后在本地windows做解析: status.chl.org

浏览器测试看看

然后在本地虚拟机上测试

发现不行,测试成功!!!!

4.2 Nginx 压缩功能

Nginx 支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文 件大小将比源文件显著变小,样有助于降低出口带宽的利用率,降低企业的IT 支出,不过会占用相 应的CPU 资源。
Nginx 对文件的压缩功能是依赖于模块 ngx_http_gzip_module, 默认是内置模块
配置指令如下:
# 启用或禁用 gzip 压缩,默认关闭
gzip on | off;
# 压缩比由低到高从 1 9 ,默认为 1 ,值越高压缩后文件越小,但是消耗 cpu 比较高。基本设定未 4 或者 5
gzip_comp_level 4;
# 禁用 IE6 gzip 功能,早期的 IE6 之前的版本不支持压缩
gzip_disable "MSIE [1-6]\.";
#gzip 压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# 启用压缩功能时,协议的最小版本,默认 HTTP/1.1
gzip_http_version 1.0 | 1.1;
# 指定 Nginx 服务需要向服务器申请的缓存空间的个数和大小 , 平台不同 , 默认 :32 4k 或者 16 8k;
gzip_buffers number size;
# 指明仅对哪些类型的资源执行压缩操作 ; 默认为 gzip_types text/html ,不用显示指定,否则出错
gzip_types mime-type ...;
# 如果启用压缩,是否在响应报文首部插入 “Vary: Accept-Encoding”, 一般建议打开
gzip_vary on | off;
# 预压缩,即直接从磁盘找到对应文件的 gz 后缀的式的压缩文件返回给用户,无需消耗服务器 CPU
# 注意 : 来自于 ngx_http_gzip_static_module 模块
gzip_static on | off;

然后进行压缩小实验 

首先编辑配置文件:

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

然后进行测试:

首先输入两个信息到网站里面,小文件不会压缩,大文件会压缩

小文件:[root@node-nginx ~]# echo I am chl > /data/web/html/small.html

[root@node-nginx ~]# du -sh /usr/local/nginx/logs/access.log 
1.1M    /usr/local/nginx/logs/access.log
大文件:[root@node-nginx ~]# cat /usr/local/nginx/logs/access.log > /data/web/html/bigger.html

开始测试小文件是否会压缩

看大文件是否会压缩:

压缩成功!!!!!

4.3:Nginx 变量使用

  • nginx的变量可以在配置文件中引用,作为功能判断或者日志等场景使用
  • 变量可以分为内置变量和自定义变量
  • 内置变量是由nginx模块自带,通过变量可以获取到众多的与客户端访问相关的值。

4.31 :内置变量

官方文档
http://nginx.org/en/docs/varindex.html

常用内置变量 

$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 的对应的首部字段名需要为小写,如果有
横线需要替换为下划线
# 示例 :
echo $http_user_agent;
echo $http_host;
$sent_http_<name>
#name 为响应报文的首部字段, name 的对应的首部字段名需要为小写,如果有横线需要替换为下划线 , 此变量有
问题
echo $sent_http_server;
$arg_<name>
# 此变量存放了 URL 中的指定参数, name 为请求 url 中指定的参数
echo $arg_id;

内置变量小实验:

首先编辑配置文件:

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

server {
    listen 80;
    server_name var.chl.org;
    root /data/web/html;
    index index.html;

    location /var {
        default_type text/html;
        echo $remote_addr;
        echo $args;
        echo $is_args;
        echo $document_root;
        echo $document_uri;
        echo $host;
        echo $remote_port;
        echo $remote_user;
        echo $request_method;
        echo $request_filename;
        echo $request_uri;
        echo $scheme;
        echo $server_protocol;
        echo $server_addr;
        echo $server_name;
        echo $server_port;
        echo $http_user_agent;
        echo $http_cookie;
        echo $cookie_key2;
    }
}

然后重启一下nginx服务:

nginx -s reload

然后测试:

[root@nginx ~]# curl -b "key1=chl,key2=chl1" -u chl:chl var.chl.org/var?name=chl&&id=6666
172.25.254.100
name=chl
?
/data/web/html
/var
var.chl.org
40516
chl
GET
/data/web/html/var
/var?name=chl
http
HTTP/1.1
172.25.254.100
var.chl.org
80
curl/7.76.1
key1=chl,key2=chl1
chl1 

4.32:自定义变量  

假如需要自定义变量名称和值,使用指令 set $variable value;
语法格式:
Syntax: set $variable value;
Default: —
Context: server, location, if

自定义变量实现 

首先编辑配置文件:

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

server {
    listen 80;
    server_name var.chl.org;
    root /data/web/html;
    index index.html;

    location /var {
        default_type text/html;
        set $chl chl;
        echo $chl;
    }
}

然后重载nginx服务

nginx -s reload

测试一下:

[root@nginx ~]# curl -b "key1=chl,key2=chl1" -u chl:chl var.chl.org/var?name=chl&&id=6666
chl 

  Nginx Rewrite 相关功能

  • Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求
  • 此功能依靠 PCRE(perl compatible regular expression),因此编译之前要安装PCRE
  • rewritenginx服务器的重要功能之一,用于实现URL的重写,URL的重写是非常有用的功能
  • 比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的 链接,就可以设置为访问
  • 另外还可以在一定程度上提高网站的安全性

 5.1:if 指令 

用于条件匹配判断,并根据条件判断结果选择不同的 Nginx 配置,可以配置在 server location 块中进行 配置,Nginx if 语法仅能使用 if 做单次判断,不支持使用 if else 或者 if elif 这样的多重判断,用法如下:
if (条件匹配) {
action
}
使用正则表达式对变量进行匹配,匹配成功时 if 指令认为条件为 true ,否则认为 false ,变量与表达式之间 使用以下符号链接:
= # 比较变量和字符串是否相等,相等时 if 指令认为该条件为 true ,反之为 false
!= # 比较变量和字符串是否不相等,不相等时 if 指令认为条件为 true ,反之为 false
~ # 区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~ # 区分大小写字符 , 判断是否匹配,不满足匹配条件为真,满足匹配条件为假
~* # 不区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~* # 不区分大小字符 , 判断是否匹配,满足匹配条件为假,不满足匹配条件为真
-f !-f # 判断请求的文件是否存在和是否不存在
-d !-d # 判断请求的目录是否存在和是否不存在
-x !-x # 判断文件是否可执行和是否不可执行
-e !-e # 判断请求的文件或目录是否存在和是否不存在 ( 包括文件,目录,软链接 )
# 注意:
# 如果 $ 变量的值为空字符串或 0 ,则 if 指令认为该条件为 false ,其他条件为 true
#nginx 1.0.1 之前 $ 变量的值如果以 0 开头的任意字符串会返回 false

 if小实验:

首先编辑配置文件:

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

server {
    listen 80;
    server_name var.chl.org;
    root /data/web/html;
    index index.html;

    location /var {
        default_type text/html;
        set $chl chl;
        echo $chl;
    }

    location /test2 {
    if ( !-e $request_filename ){
        echo "$request_filename is not exist";
    }
  }

 然后重载nginx服务

nginx -s reload

测试:

[root@nginx ~]# curl var.chl.org/test2/index.html
/data/web/html/test2/index.html is not exist

 5.2:break 指令

用于中断当前相同作用域 (location) 中的其他 Nginx 配置
与该指令处于同一作用域的 Nginx 配置中,位于它前面的配置生效
位于后面的 ngx_http_rewrite_module 模块中指令就不再执行
Nginx 服务器在根据配置处理请求的过程中遇到该指令的时候,回到上一层作用域继续向下读取配置,
该指令可以在 server 块和 locationif 块中使用
注意!!!!
注意 : 如果 break 指令在 location 块中后续指令还会继续执行 , 只是不执行 ngx_http_rewrite_module
模块的指令 , 其它指令还会执行
break小实验:

 首先编辑配置文件:

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

server {
    listen 80;
    server_name var.chl.org;
    root /data/web/html;
    index index.html;

    location /var {
        default_type text/html;
        set $chl chl;
        echo $chl;
    }

    location /test2 {
    if ( !-e $request_filename ){
        echo "$request_filename is not exist";
    }
  }
    location /break {
        default_type text/html;
        set $name chl;
        echo $name;
        if ( $http_user_agent = "curl/7.76.1" ){
            break;
        }
        set $id 666;
        echo $id;
    }
}

重载一下nginx服务

然后测试:

[root@nginx ~]# curl var.chl.org/break
chl

[root@nginx ~]# curl -A "firefox" var.chl.org/break
chl
666

5.3:return 指令  

return 用于完成对请求的处理,并直接向客户端返回响应状态码,比如 : 可以指定重定向 URL( 对于特殊重 定向状态码,301/302 ) 或者是指定提示文本内容 ( 对于特殊状态码 403/500 ) ,处于此指令后的所有配 置都将不被执行,return 可以在 server if location 块进行配置
语法格式:
return code; # 返回给客户端指定的 HTTP 状态码
return code [text]; # 返回给客户端的状态码及响应报文的实体内容
# 可以调用变量 , 其中 text 如果有空格 , 需要用单或双引号
return code URL; # 返回给客户端的 URL 地址

小实验:

首先编辑配置文件:

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

server {
    listen 80;
    server_name var.chl.org;
    root /data/web/html;
    index index.html;

    location /var {
        default_type text/html;
        set $chl chl;
        echo $chl;
    }

    location /test2 {
    if ( !-e $request_filename ){
        echo "$request_filename is not exist";
    }
  }
    location /break {
        default_type text/html;
        set $name chl;
        echo $name;
        if ( $http_user_agent = "curl/7.76.1" ){
            break;
        }
        set $id 666;
        echo $id;
    }
}

location /return {
        default_type text/html;
        if ( !-e $request_filename){
            return 301 http://www.baidu.com;
        }
        echo "$request_filename is exist";
    }
}

 然后创建一下return网站目录:

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

测试:

[root@nginx ~]# curl -I var.chl.org/return
HTTP/1.1 200 OK
Server: nginx/1.26.1
Date: Tue, 20 Aug 2024 15:30:10 GMT
Content-Type: text/html
Connection: keep-alive 

 5.4:rewrite 指令

通过正则表达式的匹配来改变 URI ,可以同时存在一个或多个指令,按照顺序依次对 URI 进行匹配, rewrite主要是针对用户请求的 URL 或者是 URI 做具体处理
语法格式 :
rewrite regex replacement [flag];
rewrite 将用户请求的 URI 基于 regex 所描述的模式进行检查,匹配到时将其替换为表达式指定的新的 URI
注意:如果在同一级配置块中存在多个 rewrite 规则,那么会自下而下逐个检查 ; 被某条件规则替换完成 后,会重新一轮的替换检查,隐含有循环机制, 但不超过 10 ; 如果超过,提示 500 响应码, [flag] 所表示的 标志位用于控制此循环机制
如果替换后的 URL 是以 http:// https:// 开头,则替换结果会直接以重定向返回给客户端 , 即永久重定向 301
正则表达式格式:
. # 匹配除换行符以外的任意字符
\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 以外的任意字符
[^lee] # 匹配除了 magedu 这几个字母以外的任意字符

5.41域名永久与临时重定向  

域名的临时的调整,后期可能会变,之前的域名或者 URL 可能还用、或者跳转的目的域名和 URL 还会跳 转,这种情况浏览器不会缓存跳转, 临时重定向不会缓存域名解析记录 (A 记录 ) ,但是永久重定向会缓存。
5.411:永久重定向301
域名永久型调整,即域名永远跳转至另外一个新的域名,之前的域名再也不使用,跳转记录可以缓存到 客户端浏览器
永久重定向会缓存 DNS 解析记录 , 浏览器中有 from disk cache 信息 , 即使 nginx 服务器无法访问 , 浏览器也会利用缓存进行重定向

重定向小实验:

首先编辑配置文件:

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

重载一下nginx服务

然后测试一下:

[root@nginx ~]# curl -I var.chl.org
HTTP/1.1 301 Moved Permanently
Server: nginx/1.26.1
Date: Tue, 20 Aug 2024 15:37:32 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: http://var.chl.org 

5.412临时重定向302 

域名临时重定向,告诉浏览器域名不是固定重定向到当前目标域名,后期可能随时会更改,因此浏览器 不会缓存当前域名的解析记录,而浏览器会缓存永久重定向的DNS 解析记录,这也是临时重定向与永久
重定向最大的本质区别。
即当 nginx 服务器无法访问时 , 浏览器不能利用缓存 , 而导致重定向失败
重定向302小实验
首先编辑配置文件:
[root@nginx ~]# vim /usr/local/nginx/conf.d/vhost.conf 

重载nginx服务

测试一下:

[root@nginx ~]# curl -I var.chl.org
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.26.1
Date: Tue, 20 Aug 2024 15:40:16 GMT
Content-Type: text/html
Content-Length: 145
Connection: keep-alive
Location: http://var.chl.org

 六:Nginx 反向代理功能

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

Nginx 除了可以在企业提供高性能的web服务之外,另外还可以将 nginx 本身不具备的请求通过某种预 定义的协议转发至其它服务器处理,不同的协议就是Nginx服务器与其他服务器进行通信的一种规范,主 要在不同的场景使用以下模块实现不同的功能

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协议转发至指定服务器处理

6.1:指定 location 实现反向代理 

首先在主机10和主机20上安装好httpd服务并且让网站有信息,让nginx主机能访问到

主机10:

[root@web1 ~]# echo 172.25.254.10 > /var/www/html/index.html
 

主机20:

[root@web2 ~]# echo 172.25.254.20 > /var/www/html/index.html

 nginx主机测试一下:

[root@nginx ~]# curl 172.25.254.10
172.25.254.10
[root@nginx ~]# curl 172.25.254.20
172.25.254.20

 修改主机20的端口为8080

[root@web2 ~]# vim /etc/httpd/conf/httpd.conf

 

然后重启服务

修改nginx中的配置文件

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

 

然后重载一下

然后在主机20中创建目录并且输入信息到网站

[root@web2 ~]# mkdir -p /var/www/html/static
[root@web2 ~]# echo static 172.25.254.20 > /var/www/html/static/index.html

 客户端测试是否成功:

[C:\~]$ curl www.chl.org
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--100    14  100    14    0     0    444      0 --:--:-- --:--:-- --:--:--   538
172.25.254.10

[C:\~]$ curl www.chl.org/static/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--100    21  100    21    0     0   2060      0 --:--:-- --:--:-- --:--:--  4200
static 172.25.254.20

6.11:实现动静分离 

先在主机10上安装php服务,然后重启httpd服务

yum install php -y

systemctl restart httpd

然后配置文件

vim /var/www/html/index.php

<?php
  phpinfo();
?>

 然后修改/usr/local/nginx/conf.d/vhost.conf 的配置文件

server {
        listen 80;
        server_name www.chl.org;

        location ~ \.php$ {
            proxy_pass http://172.25.254.10:80;
        }

        location /static {
            proxy_pass http://172.25.254.20:8080;
        }
}

 然后重载一下nginx服务

nginx -s reload

然后测试一下:

PHP:

static:

测试成功!!!

6.2:非缓存场景压测

首先在主机10中测试一下压力:

[root@web1 ~]#  ab -n1000 -c100 http://www.timinglee.org/static/index.html
This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.timinglee.org (be patient)
apr_sockaddr_info_get() for www.timinglee.org: Name or service not known (670002)
[root@web1 ~]#  ab -n1000 -c100 http://www.chl.org/static/index.html
This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.chl.org (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        Microsoft-IIS/4.0
Server Hostname:        www.chl.org
Server Port:            80

Document Path:          /static/index.html
Document Length:        461 bytes

Concurrency Level:      100
Time taken for tests:   8.943 seconds
Complete requests:      1000
Failed requests:        0
Non-2xx responses:      1000
Total transferred:      604000 bytes
HTML transferred:       461000 bytes
Requests per second:    111.82 [#/sec] (mean)
Time per request:       894.320 [ms] (mean)
Time per request:       8.943 [ms] (mean, across all concurrent requests)
Transfer rate:          65.95 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      248  324 196.0    300    3297
Processing:   247  320 246.3    300    3365
Waiting:      247  308 163.0    299    3264
Total:        500  644 314.6    602    3688

Percentage of the requests served within a certain time (ms)
  50%    602
  66%    616
  75%    625
  80%    636
  90%    666
  95%    706
  98%   1592
  99%   3401
 100%   3688 (longest request)

 然后在/usr/local/nginx/conf/nginx.conf修改配置文件

再修改/usr/local/nginx/conf.d/vhost.conf的文件

server {
        listen 80;
        server_name www.chl.org;

        location ~ \.php$ {
            proxy_pass http://172.25.254.10:80;
        }

        location /static {
            proxy_pass http://172.25.254.20:8080;
            proxy_cache proxycache;
            proxy_cache_key $request_uri;
            proxy_cache_valid 200 302 301 10m;
            proxy_cache_valid any 1m;
        }
}

然后重载一下再在主机10上进行压力测试

nginx -s reload

[root@web1 ~]#  ab -n1000 -c100 http://www.chl.org/static/index.html
This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.chl.org (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        Microsoft-IIS/4.0
Server Hostname:        www.chl.org
Server Port:            80

Document Path:          /static/index.html
Document Length:        461 bytes

Concurrency Level:      100
Time taken for tests:   7.106 seconds
Complete requests:      1000
Failed requests:        0
Non-2xx responses:      1000
Total transferred:      604000 bytes
HTML transferred:       461000 bytes
Requests per second:    140.73 [#/sec] (mean)
Time per request:       710.593 [ms] (mean)
Time per request:       7.106 [ms] (mean, across all concurrent requests)
Transfer rate:          83.01 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      243  292  80.2    288    1304
Processing:   245  303 178.2    287    3353
Waiting:      245  299 149.4    287    3353
Total:        490  595 195.9    576    3640

Percentage of the requests served within a certain time (ms)
  50%    576
  66%    584
  75%    588
  80%    591
  90%    641
  95%    703
  98%    706
  99%   1218
 100%   3640 (longest request)

 会发现压力由Time per request: 894.320 [ms] (mean)变成了Time per request:710.593 [ms(mean)!!!测试成功

nginx把主机10的缓存存放地:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值