因为项目需要的,需要一些负载均衡的东西,我个人也比较好奇,所以在自己空闲的时候,看了一些资料,并且整理一下的。
做这篇博客的主要目的是想替换掉项目的heartbeat的方案,虽然heartbeat更简单一点,但是不能做到负载均衡。
nginx主要的目的是代理。代理位于web客户端和web服务器之间,扮演“中间人”的角色。Http的代理服务器即是web服务器又是wen客户端。
谈到nginx服务器,不得不谈到正向代理和反向代理:
正向 是一个位于客户端和原始服务器之间的服务器,为了从原始服务器获得内容,客户端向代理发送一个请求并制定目标,然后代理向原始服务器转交请求并将获得的内容返回客户端。客户端必须要进行一些特别的设置才能使用正向代理。
反向代理服务器 在服务器接受客户端的请求,然后将请求分发给具体的服务器进行处理,然后在将服务器的响应结果反馈给客户端。
首先看一个请求的基本过程:建立连接-接受数据-发送数据。
nginx在启动时,会解析配置文件,得到需要监听的端口和ip地址,然后在nginx的master进程里面,先初始化这个监控的socket,然后再fork出多个子进程出来,然后子进程会竞争accept新的连接。此时,客户端就可以向nginx发起连接了。当客户端与nginx进行三次握手,与nginx建立一个一个连接后,此时,某一个子进程会accept成功,得到这个建立好的连接的socket,然后创建好的连接的socket,然后创建nginx对连接的封装。
worker_processes 8;
nginx进程数,建议设置为等于CPU总核心数
worker_connections 65535;
单个进程最大连接数(最大连接数=连接数*进程数)
client_header_buffer_size 32k; #上传文件大小限制
large_client_header_buffers 4 64k; #设定请求缓
client_max_body_size 8m; #设定请求缓
autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on; #防止网络阻塞
tcp_nodelay on; #防止网络阻塞
keepalive_timeout 120; #长连接超时时间,单位是秒
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
upstream blog.ha97.com {
upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
server 192.168.80.121:80 weight=3;
server 192.168.80.122:80 weight=2;
server 192.168.80.123:80 weight=3;
}
虚拟主机的配置
server
{
监听端口
listen 80;
域名可以有多个,用空格隔开
server_name www.ha97.com ha97.com;
index index.html index.htm index.PHP;
root /data/www/ha97;
location ~ .*.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
通过以上的图片可以,看出来已经完成了简单的负载均衡。