原文参考:https://blog.csdn.net/zy1471162851/article/details/91795712
Nginx业务服务器状态
- down:表示当前server暂时不参与负载
- weight:默认为1,weight越大,负载的权重就越大
- max_fails:允许请求失败的次数,默认为1.当超过最大次数时,返回proxy_next_upstream模块定义错误
- fail_timeout:max_fails次失败后,暂停的时间,默认为10秒
- backup:其他所有的非backup机器down掉或者忙时,请求backup机器。backup 不能和 ip_hash 关键字一起使用
upstream bakend{ #定义负载均衡设备的Ip及设备状态 ip_hash; server 10.0.0.11:9090 down; server 10.0.0.11:8080 weight=2; server 10.0.0.11:6060 max_fails=3 fail_timeout=30s; #最大失败次数为 3,也就是最多进行 3 次尝试,且超时时间为 30秒。max_fails 的默认值为 1,fail_timeout 的默认值是 10s }
实例
案列:
#user nobody; worker_processes 4; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; charset utf-8,gbk; sendfile on; keepalive_timeout 65; ##### 反向代理 ##### upstream seaup { server 192.168.18.51:7206; } server { listen 80; server_name localhost; # 代理本地静态资源 location /pic/ { alias C:/Users/lshan/Desktop/pic/; autoindex on; } location /api/ { proxy_redirect off; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-Port $remote_port; proxy_set_header X-Scheme $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.18.51:7206/; #proxy_pass http://seaup; } location /api2/ { proxy_redirect off; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-Port $remote_port; proxy_set_header X-Scheme $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.18.51:7206/; #proxy_pass http://seaup; } } server { listen 8080; server_name localhost; location / { root html; index index.html index.html; } } upstream airflow { #server 192.168.25.140:9888; server 192.168.18.51:7206; } server { listen 9888; server_name localhost; location / { proxy_pass http://airflow; index index.html index.htm; } } upstream filebrowser { server 192.168.25.140:9000; } server { listen 9000; server_name localhost; location / { proxy_pass http://filebrowser; index index.html index.htm; } } #end http }
tip: nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器
nginx 的应用场景 (
http服务器,可以做网页静态服务器;
虚拟主机;
反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。)
windows常用命令
nginx.exe -s stop –停止
nginx优缺点
占内存小,可以实现高并发连接、处理响应快。
可以实现http服务器、虚拟主机、反向代理、负载均衡。
nginx配置简单
可以不暴露真实服务器IP地址
一:反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
启动一个Tomcat 127.0.0.1:8080
使用nginx反向代理 8080.zyhome.com 直接跳转到127.0.0.1:8080
Host文件新增
127.0.0.1 8080.sea.com
127.0.0.1 8081.shan.com
nginx.conf 配置:
server { listen 80; server_name 8080.sea.com; location / { proxy_pass http://127.0.0.1:8080; index index.html index.htm; } } server { listen 80; server_name 8081.shan.com; location / { proxy_pass http://127.0.0.1:8081; index index.html index.htm; } }
http,默认转为https:
server { listen 80; server_name sea-d01.shan.net; if ($http_x_forwarded_proto = 'http'){ return 301 https://$host$request_uri; } location / { proxy_pass http://127.0.0.1:9000/; } } server { listen 80; server_name sea-t01.shan.net; if ($http_x_forwarded_proto = 'http'){ return 301 https://$host$request_uri; } location / { alias /opt/UI/sea/; } }
二:负载均衡:
轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 upstream backserver { server 192.168.0.14; server 192.168.0.15; } 2、指定权重 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 upstream backserver { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; } 3、IP绑定 ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 upstream backserver { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; } 4、fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 upstream backserver { server server1; server server2; fair; } 5、url_hash(第三方) 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 upstream backserver { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; }
配置代码:
upstream backserver
{ server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; server_name www.zyhome.com; location / { proxy_pass http://backserver; index index.html index.htm; } }
宕机轮训配置规则
upstream backserver { server 127.0.0.1:8080; server 127.0.0.1:8081; }
server { listen 80; server_name www.sea.com; location / { proxy_pass http://backserver; index index.html index.htm; proxy_connect_timeout 1; proxy_send_timeout 1; proxy_read_timeout 1; } }
三:配置DDOS
限制请求次数
设置Nginx、Nginx Plus的连接请求在一个真实用户请求的合理范围内。比如,如果你觉得一个正常用户每两秒可以请求一次登录页面,你就可以设置Nginx每两秒钟接收一个客户端IP的请求(大约等同于每分钟个请求)。
Nginx限流就是限制用户请求速度,防止服务器受不了
限流有3种,我这只写了最平常的一种(限制访问频率(正常流量))
1、限制访问频率(正常流量)
2、限制访问频率(突发流量)
3、限制并发连接数
1、限制访问频率(正常流量):限制一个用户发送的请求,我Nginx多久接收一个。
#定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m; #绑定限流维度 server{ location/seckill.html{ limit_req zone=one proxy_pass http://lj_seckill; } }
1r/s代表1秒一个请求 1r/m一分钟接收一个请求
(此流也叫做漏桶流,多余的请求全部不要,漏掉)
`limit_req_zone`命令设置了一个叫one的共享内存区来存储请求状态的特定键值,在上面的例子中是客户端IP($binary_remote_addr)。location块中的`limit_req`通过引用one共享内存区来实现限制访问/login.html的目的。
原文链接:https://blog.csdn.net/zy1471162851/article/details/91795712
ngnix 配置监控
、配置Nginx的监控选项: 配置文件路径:/usr/local/nginx/nginx.conf 添加如下代码:
#设定Nginx状态访问地址
location /NginxStatus
{
stub_status on;
access_log on;
auth_basic "NginxStatus";
#auth_basic_user_file conf/htpasswd;
}
配置完成重启Nginx,命令:/usr/local/nginx/nginx -s reload
状态查看:
、参数说明
activeconnections–活跃的连接数量
serveracceptshandledrequests—总共处理了107520387个连接,成功创建107497834次握手,总共处理了639121056个请求
每个连接有三种状态waiting、reading、writing
reading—读取客户端的Header信息数.这个操作只是读取头部信息,读取完后马上进入writing状态,因此时间很短。
writing—响应数据到客户端的Header信息数.这个操作不仅读取头部,还要等待服务响应,因此时间比较长。
waiting—开启keep-alive后等候下一次请求指令的驻留连接.
正常情况下waiting数量是比较多的,并不能说明性能差。反而如果reading+writing数量比较多说明服务并发有问题。
补充:
查看Nginx并发进程数:ps-ef|grepnginx|wc-l
监控参考链接:https://www.zhihu.com/question/343670407/answer/812948531