Nginx学习

常用的HTTP服务器

1.nginx
2.Apache Httpd
3.IIS

nginx是http服务器的一种,它能够解析URL,是7层网络应用
URL包含 HTTP + 主机名+ 资源地址

Nginx和apache的优缺点

nginx相对于apache的优点:
  • 轻量级,同样起web 服务,比apache 占用更少的内存及资源
  • 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
  • 高度模块化的设计,编写模块相对简单
  • 社区活跃,各种高性能模块出品迅速
apache 相对于nginx 的优点:
  • rewrite ,比nginx 的rewrite 强大
  • 模块超多,基本想到的都可以找到
  • 少bug ,nginx 的bug 相对较多

Nginx 配置简洁, Apache 复杂

最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;
nginx是异步的,多个连接(万级别)可以对应一个进程

nginx是异步处理磁盘IO和网络IO

解读nginx.conf

nginx.conf

user www-data;
worker_processes 2; //可以开几个进程
pid /run/nginx.pid;

events {
        worker_connections 768; //1个进程可以开几个线程
        # multi_accept on;
}

//当前nginx支持的总线程数= 进程数*work_connection = 2*768;
//官方测试nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定
...

问题:nginx能够支持多少并发?
1.修改nginx中worker_processes 和worker_connection的数量
2.服务器内核能够打开多少文件句柄个数
cat /proc/sys/fs/file-max
3.单一进程能够打开文件句柄个数
cat /proc/sys/fs/file-nr

负载均衡

upstream

反向代理配合upstream使用

  upstream tomcats{
    server 192.168.150.11:80;
    server 192.168.150.12:80;
}
server {
	location / {
		proxy_pass http://tomcats
	}
	...
}

负载均衡算法

1.轮询
2.权重

upstream tomcats{
    server 192.168.150.11:80 weight=1;
    server 192.168.150.12:80 weight=2;
}

3.max_conns
可以根据服务的好坏来设置最大连接数,防止挂掉,比如1000,我们可以设置800

upstream httpds {
    server 127.0.0.1:8050    weight=5  max_conns=800;
    server 127.0.0.1:8060    weight=1;
}
upstream httpds {
    server 127.0.0.1:8050    weight=5  max_conns=800;
    server 127.0.0.1:8060    weight=1;
}

4.max_fails、fail_timeout
max_fails:失败多少次 认为主机已挂掉则,踢出,公司资源少的话一般设置2~3次,多的话设置1次

max_fails=3 fail_timeout=30s代表在30秒内请求某一应用失败3次,认为该应用宕机,后等待30秒,这期间内不会再把新请求发送到宕机应用,而是直接发到正常的那一台,时间到后再有请求进来继续尝试连接宕机应用且仅尝试1次,如果还是失败,则继续等待30秒…以此循环,直到恢复。

upstream httpds {
    server 127.0.0.1:8050    weight=1  max_fails=1  fail_timeout=20;
    server 127.0.0.1:8060    weight=1;
}

5.ip_hash;
会造成数据倾斜(某一台机子访问过大)

upstream tomcats{
    ip_hash;
    server 192.168.150.11:80 weight=1;
    server 192.168.150.12:80 weight=2;
}

6.url_hash

7.least_conn*

8.least_time

健康检查模块

配置一个status的location

location /status {
            check_status;
 
        }

在upstream配置如下

upstream tomcats{
    ip_hash;
    server 192.168.150.11:80 weight=1;
    server 192.168.150.12:80 weight=2;
    
	check interval=3000 rise=2 fall=5 timeout=1000 type=http;
	check_http_send "HEAD / HTTP/1.0\r\n\r\n";
	check_http_expect_alive http_2xx http_3xx;
}

问题:如果一台服务器宕机了,nginx会怎么处理?
会尝试去连接失败的服务器,如果超过5次,就不会再尝试了,这台宕机的服务器不再参与负载均衡,直到服务器重新启动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值