常用的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次,就不会再尝试了,这台宕机的服务器不再参与负载均衡,直到服务器重新启动