Use Case
基础配置
自定义欢迎页面
ITEM | NOTE |
---|---|
目的 | 验证自定制默认欢迎页面 |
步骤 |
echo "Hello Nginx" > /usr/share/nginx/html/index.html
echo "ok" > /usr/share/nginx/html/hello |
结果 | 访问默认欢迎页面 访问定制测试页面
|
API 及 Dashboard 能力
ITEM | NOTE |
---|---|
目的 | Nginx Plus 具备 API 能力以及 Dashboard 能力,可视化展示 Nginx Plus 自身及应用交付的状态。 |
步骤 | 备份默认配置 新建 default.conf 文件 重新加载
|
结果 |
|
负载均衡
流量转发中的行为
ITEM | NOTE |
---|---|
空值报文头属性默认被丢弃 | 传递空的 X-Forwarded-For HTTP 头访问,通过应用查看 HTTP 请求头 传递非空的 X-Forwarded-For HTTP 头访问,通过应用查看 HTTP 请求头
|
包含下划线”_”的报文头将会被静默丢弃 | 传递包含下划线的报文头属性访问服务,通过应用查看 HTTP 请求头 在 Server 中配置underscores_in_headers on 后再次执行上面操作 如下配置是否工作?
|
Host 报文头替换 | 直接访问服务,Host 值为 10.1.10.8:8080 通过代理访问服务,Host 值修改为 forwardhttp,Host报文头会被重写为$proxy_host变量值,该变量值为proxy_pass指令中所包含的域名或 ip 地址
|
Conntection报文头将会被修改为 close,HTTP 1.1 将会被修改为 HTTP 1.0 | 浏览器直接访问服务,Conntection 及 Protocol 信息如下 浏览器通过代理访问服务,Conntection 及 Protocol 信息如下
|
服务器获取真实客户端IP
ITEM | NOTE |
---|---|
目的 | Nginx Plus 下服务器端如何获取真实客户端 IP |
操作 | 配置 访问测试 访问测试
|
轮询负载算法
ITEM | NOTE |
---|---|
目的 | Nginx Plus 支持轮询的调度算法 |
步骤 | 默认算法为轮询,新建配置文件rr.conf 重新加载
|
结果 | 命令行访问测试
Dashboard 上查看统计数据 |
最小连接数负载算法
ITEM | NOTE |
---|---|
目的 | Nginx Plus 支持最小连接数的调度算法 |
步骤 | 新建配置文件 least.conf 重新加载
|
结果 | 命令行访问测试
Dashboard 上查看统计数据 |
权重与优先级负载算法
ITEM | NOTE |
---|---|
目的 | Nginx Plus 支持权重优先级的调度算法 |
步骤 | 新建配置文件 weight.conf 重新加载
|
结果 | 命令行访问测试
Dashboard 上查看统计数据 |
IP 哈希负载算法
ITEM | NOTE |
---|---|
目的 | Nginx Plus 支持 IP 哈希调度算法 |
步骤 | 新建配置文件 iphash.conf 重新加载
|
结果 | 命令行访问测试
Dashboard 上查看统计数据 |
被动健康检查
ITEM | NOTE |
---|---|
目的 | Nginx Plus 支持被动的健康检查 |
步骤 | 新建配置文件 health.conf 重新加载
关闭服务 10.1.10.8:8080 |
结果 | 命令行访问测试
Dashboard 上查看统计数据 |
基于 HTTP 的主动健康检查
ITEM | NOTE |
---|---|
目的 | Nginx Plus 支持基于 HTTP 的主动健康检查 |
步骤 | 新建配置文件 healthHTTP.conf 重新加载
关闭服务 10.1.10.8:8080 |
结果 |
|
基于 Cookie 的会话保持
ITEM | NOTE |
---|---|
目的 | Nginx Plus 支持基于 Cookie 的会话保持 |
步骤 | 新建配置文件 persisCookie.conf 重新加载
|
结果 |
|
不同类型应用的负载均衡
ITEM | NOTE |
---|---|
目的 | Nginx Plug 对不同应用负载均衡的能力。 |
L7 | L7 配置 重新加载 访问测试
|
L4 | 准备echoserver 应用 参照 https://github.com/kylinsoong/networks/tree/master/echo,编译出 配置文件 测试
统计结果 |
gRPC |
详细参照 https://grpc.io/docs/languages/go/quickstart/ 配置 grpc_gateway.conflog_format grpc_json escape=json '{"timestamp":"$time_iso8601","client":"$remote_addr",' '"uri":"$uri","http-status":$status,' '"grpc-status":$grpc_status,"upstream":"$upstream_addr"' '"rx-bytes":$request_length,"tx-bytes":$bytes_sent}'; map $upstream_trailer_grpc_status $grpc_status { default $upstream_trailer_grpc_status; # We normally expect to receive grpc-status as a trailer '' $sent_http_grpc_status; # Else use the header, regardless of who generated it } server { listen 50051 http2; # In production, comment out to disable plaintext port access_log /var/log/nginx/grpc_log.json grpc_json; # Routing location /helloworld. { status_zone location_backend; grpc_pass grpc://helloworld_service; } # Error responses include conf.d/errors.grpc_conf; # gRPC-compliant error responses default_type application/grpc; # Ensure gRPC for all error responses } # Backend gRPC servers # upstream helloworld_service { zone helloworld_service 64k; server 10.1.10.6:50051; server 10.1.10.7:50051; server 10.1.10.8:50051; }配置errors.grpc_conf 测试
|
内容缓存
ITEM | NOTE |
---|---|
目的 | Nginx Plug 内容缓存能力 |
步骤 | 新建 cache.conf 文件 重新加载
|
结果 |
性能优化
OS 资源限制调试
本部说明 Nginx 运行所依赖 OS 资源限制调试。
1. CPU# lscpu | grep CPU
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 2
On-line CPU(s) list: 0,1
CPU family: 6
Model name: Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz
CPU MHz: 2699.999
NUMA node0 CPU(s): 0,1
2. 进程# ps -ef | grep nginx
root 955 1 0 Mar29 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 4025 955 6 09:56 ? 00:02:07 nginx: worker process
nginx 4026 955 6 09:56 ? 00:02:07 nginx: worker process
nginx 4027 955 0 09:56 ? 00:00:00 nginx: cache manager process
3. 资源限制for limit in fsize cpu as memlock
do
grep "nginx" /etc/security/limits.conf | grep -q $limit || echo -e "nginx hard $limit unlimited\nnginx soft $limit unlimited" | sudo tee --append /etc/security/limits.conf
done
for limit in nofile noproc
do
grep "nginx" /etc/security/limits.conf | grep -q $limit || echo -e "nginx hard $limit 64000\nnginx soft $limit 64000" | sudo tee --append /etc/security/limits.conf
done
4. Kernel Memory 文件句柄数grep "file-max" /etc/sysctl.conf || echo -e "fs.file-max = 70000" | tee --append /etc/sysctl.conf
5. 文件打开数判断ulimit -n
lsof -p <PID> | wc -l
lsof -p <PID>
ls -l /proc/<PID>/fd | wc -l
6. 日志文件ls /var/log/nginx/
Nginx 性能调优一般步骤
本部分验证性能调优的一般步骤,以及不同步骤对 Nginx 性能的影响。
验证拓扑如下:
客户端:wrk软件
反向代理:性能优化对象
Web端:NGINX
以上所有节点规格都是 2C 4G。
ITEM | NOTE |
---|---|
默认配置性能 | 配置备份 默认配置文件 /etc/nginx/nginx.conf Server 配置 WRK 结果
Dashboard UI 上统计信息 |
优化连接数限制 | 修改 worker_connections 从默认 1024 到 10000 WRK 测试结果
|
优化 worker 数量 | 修改 worker_processes 从 1 到 auto WRK 测试结果
|
连接复用 | 配置连接复用 WRK 测试结果
|
CPU亲和及worker优先级 | 配置 WRK 测试结果
|
日志缓存 | 配置 WRK 测试结果
|
Cache | 配置 WRK 测试结果
|
gzip压缩 | 配置 WRK 测试结果
|
优化CPU开销 | 配置
|
Nginx 日志
本部说明 Nginx 日志。
ITEM | NOTE |
---|---|
日志级别 | Nginx 支持的日志级别
默认Nginx开启的日志级别为notice。 设定 Nginx 日志级别为 debug
|
Access 日志 | 格式
完整变量列表参照:http://nginx.org/en/docs/varindex.html 日志输出
|
IP 和端口调试 | 配置 日志输出
|
TODO
ITEM | NOTE |
---|---|
目的 | |
步骤 | |
结果 |
ITEM | NOTE |
---|---|
目的 | |
步骤 | |
结果 |
ITEM | NOTE |
---|---|
目的 | |
步骤 | |
结果 |
ITEM | NOTE |
---|---|
目的 | |
步骤 | |
结果 |
ITEM | NOTE |
---|---|
目的 | |
步骤 | |
结果 |
ITEM | NOTE |
---|---|
目的 | |
步骤 | |
结果 |