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

Nginx-调度器、优化

Nginx调度器

一、HTTP调度

1、反向代理语法格式

http {upstream webserver {    # 定义源服务器组#ip_hash;server 192.168.88.100:80 weight=2;server 192.168.88.200:80 down;server 192.168.88.101:80 max_fails=2 fail_timeout=30;}server {listen       80;server_name  _;location / {proxy_pass http://webserver;    # 调用服务组}}
}

2、调度算法

轮循(默认):逐一循环调度

weight:指定轮循几率,权重值和访问比率成正比

ip_hash:根据客户端IP分配固定的后端服务器

least_conn:新的请求分配给压力最小的服务器

3、服务器组主机状态

down:表示当前server暂时不参与负载

max_fails:允许请求失败的次数(默认为1)

fail_timeout:max_fails次失败后,暂停提供服务的时间

二、TCP/UDP调度

1、模块

  • ngx_stream_core_module模块
  • 使用--with-stream开启该模块

2、语法格式

stream {upstream backend {server 192.168.88.100:22;server 192.168.88.200:22;}server {listen 12345;proxy_pass backend;}
}http {
... ...
}

Nginx优化

一、HTTP错误代码

返回码描述
200一切正常
301永久重定向
302临时重定向
400请求语法错误
401访问被拒绝(账户或密码错误)
403资源不可用,通常由于服务器上文件或目录的权限设置导致
403禁止访问:客户端的IP地址被拒绝
404无法找到指定位置的资源(Not Found)
414请求URI头部太长
500服务器内部错误
502服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答(Bad Gateway)

1、自定义错误页面

http {
fastcgi_intercept_errors on;
server {
error_page 404 /40x.html;error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}
}
}

二、Nginx状态页面

1、status模块

--with-http_stub_status_module开启模块功能

可以查看Nginx连接数等信息

如果要添加模块,但不想删除之前nginx数据,可以将nginx源码目录下的objs目录中的nginx文件拷贝到nginx的sbin目录下替代现有主程序,然后killall nginx 再重启即可

./configure --with-stream --with-http_stub_status_module
make
killall  nginx
cp objs/nginx /usr/local/nginx/sbin/
/usr/local/nginx/sbin/nginxcat /usr/local/nginx/conf/nginx.conf
location /status {stub_status on;
}

三、优化nginx并发量

1、常用压力测试工具

ab -c 并发数 -n 总请求数 URL

2、全局配置优化

调整进程数量

#user  nobody;
worker_processes  1;    # 建议与CPU核心数一致

3、EVENT模块优化

网站常见指标:并发、PV、UV

max_clients=worker_processes * worker_connections

注意修改系统ulimit限制/etc/security/limits.conf

events {worker_connections  1024;    # 每个worker最大并发连接数
}

4、优化Linux内核参数(最大文件描述符数量)

# 查看最大文件数量
[root@proxy ~]# ulimit -n
# 临时设置最大文件数量
[root@proxy ~]# ulimit -n 100000[root@proxy ~]# vim /etc/security/limits.conf.. ..
*               soft    nofile            100000
*               hard    nofile            100000
#该配置文件分4列,分别如下:
#用户或组    硬限制或软限制    需要限制的项目   限制的值

四、优化Nginx数据包头缓存,支持超长地址

优化前,使用脚本测试超长头部请求是否能获得响应

默认情况下nginx无法支持长地址栏,会报414错误

[root@proxy ~]# cat buffer.sh 
#!/bin/bash
URL=http://192.168.99.5/index.html?
for i in {1..5000}
doURL=${URL}v$i=$i
done
curl $URL                              # 经过5000次循环后,生成一个超长的URL地址
[root@proxy ~]# ./buffer.sh
.. ..
<center><h1>414 Request-URI Too Large</h1></center>        #访问失败

修改Nginx配置文件,增加数据包头部缓存大小

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
http {
client_header_buffer_size    200k;        # 请求包头信息的缓存大小    
large_client_header_buffers  4 200k;      # 大请求包头部信息的缓存个数与容量
.. ..
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

优化后,使用脚本测试超长头部请求是否能获得响应

[root@proxy ~]# ./buffer.sh

五、浏览器本地缓存静态数据

修改配置文件,定义对静态页面的缓存时间

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires        30d;            # 定义客户端缓存时间为30天
}
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

六、配置网站限流限速

1、定义limit_rate限制

[root@web1 nginx]# vim /usr/local/nginx/conf/nginx.conf
http {
...    limit_rate 100k;                # 全局限速server {limit_rate 200k;            # 虚拟主机限速listen 80;server_name www.b.com;root html;index index.html;location /file_a {limit_rate 300k;        # file_a目录限速300k}location /file_b {limit_rate 0k;          # file_b目录不限速}}

2、创建测试目录

[root@web1 nginx]# mkdir html/file_a
[root@web1 nginx]# mkdir html/file_b

3、创建测试文件

[root@web1 nginx]# dd if=/dev/zero of=html/test.img  bs=100M count=1
[root@web1 nginx]# dd if=/dev/zero of=html/file_a/test.img  bs=100M count=1
[root@web1 nginx]# dd if=/dev/zero of=html/file_b/test.img  bs=100M count=1

4、下载测试

wget www.b.com/test.img
wget www.b.com/file_a/test.img
wget www.b.com/file_b/test.img

七、防盗链

valid_referers指令可以检测被访问资源从哪个地址来

1、添加防盗链测试语句

[root@web1 nginx]# vim /usr/local/nginx/conf/nginx.conf
server {
...    valid_referers none 192.168.99.100;    # 如果请求头中的referer字段包含者地址是99.100或者没有referer字段则有效,if ($invalid_referer){                  # 如果上述测试无效则条件成立return 403;                         # 返回错误提示}
...
}

2、web1编写测试页面

[root@web1 nginx]# cat html/index.html
web1
测试页面  --
<a href="http://192.168.99.100/nr.html">内容</a>[root@web1 nginx]# cat html/nr.html
web1内容页面

3、web2编写测试页面

[root@web2 nginx]# cat html/index.html
web2
测试页面  --
<a href="http://192.168.99.100/nr.html">内容</a>

4、测试

从192.168.99.100主页点内容可以访问,但从99.200点不可以

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 解决在navicat上向mysql5.7运行sql文件时报错Error: Unknown storage engine‘InnoDB’的问题
  • 短剧小程序系统开发,让短剧观看与创作更加便捷。短剧系统源码搭建
  • JSBridge原理 - 前端H5与客户端Native交互
  • 7款公司电脑监控软件
  • Taro打包生成不同目录
  • 聚类分析 | 聚类有效性评价指标外部NMI(MATLAB)
  • python统计分析——分类数据的检验
  • 大数据之搭建Hive组件
  • 设计模式之策略模式讲解
  • 性能测试入门基本概念
  • 代码随想录算法训练营 DAY 27 | 39.组合总和 40.组合总和 II 131.分割回文串
  • 解决Django中的UnicodeDecodeError问题
  • 机器学习machine learning
  • python爬-------urllib代理和代理池(第十七天)
  • 专业140+总410+国防科技大学831信号与系统考研经验国防科大电子信息与通信,真题,大纲,参考书。
  • 分享一款快速APP功能测试工具
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【知识碎片】第三方登录弹窗效果
  • AHK 中 = 和 == 等比较运算符的用法
  • CentOS6 编译安装 redis-3.2.3
  • js
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • mysql_config not found
  • php ci框架整合银盛支付
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Redis学习笔记 - pipline(流水线、管道)
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SQL 难点解决:记录的引用
  • TCP拥塞控制
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 前端性能优化--懒加载和预加载
  • 前嗅ForeSpider教程:创建模板
  • 如何优雅地使用 Sublime Text
  • 一个完整Java Web项目背后的密码
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (1)Jupyter Notebook 下载及安装
  • (11)MATLAB PCA+SVM 人脸识别
  • (13)Hive调优——动态分区导致的小文件问题
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (黑马点评)二、短信登录功能实现
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)C#调用WebService 基础
  • (转)母版页和相对路径
  • ***测试-HTTP方法
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .net 7和core版 SignalR
  • .net core + vue 搭建前后端分离的框架
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET DataGridView数据绑定说明
  • .NET 设计模式初探
  • .net 托管代码与非托管代码
  • .net 无限分类
  • .NET/C# 使窗口永不获得焦点
  • .NET大文件上传知识整理