nginx
nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强
常用功能:
1.HTTP代理和反向代理
请求稳定,后端转发与业务配合分离,配置灵活,支持判断表达式,可以进行自定义配置,支持通过缓存加速访问,支持虚拟主机,支持URL重定向,支持网络监控,支持流媒体传输等
2.负载均衡
1)将单一的重负载分担到多个网络节点上做并行处理,每个节点处理结束后将结果汇总给用户提高网络系统的处理能力
2)将大量的前端并发访问或者数据流量分担到多个后端网络节点上分别处理
- nginx的负载均衡策略
- 内置策略:轮询 加权轮询 IP HASH
- 扩展策略 主要通过第三方模块实现,常见有url hash
3.WEB缓存
主要由Proxy_Cache(提供代理服务时,对后端服务器返回内容进行URL缓存) 和FastCGI_Cache(对FastCGI程序缓存)指令集构成
nginx编译安装
server1
tar zxf nginx-1.14.0.tar.gz
cd nginx-1.14.0
yum install -y gcc openssl-devel pcre-devel # 解决软件包依赖
vim src/core/nginx.h #删除nginx版本信息,为了安全,这样编译后外界无法获取程序的版本号
vim auto/cc/gcc #注释掉debug,这样编译以后程序只有几百 k
./configure --help #查看帮助
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #为了方便调用,建立软链接
nginx #开启nginx
netstat -antlp | grep nginx #查看端口信息
curl -I localhost
Nginx反向代理加负载均衡
server1
lscpu #查看cpu信息
vim /usr/local/nginx/conf/nginx.conf
user nginx nginx; #用户
worker_processes 1; #cpu worker
#worker_cpu_affinity 01 10; #当worker_processes 为1时不需要此行,当为2时,worker_cpu_affinity 01 10;为4时,worker_cpu_affinity 0001 0010 0100 1000;以此类推
events {
worker_connections 65535; #进程最大连接数
}
http {
添加论叫配置
upstream westos {
# ip_hash; #若不填写默认rr,
server 172.25.254.2:80;
server 172.25.254.3:80;
}
server {
listen 80; #端口为80
server_name www.westos.org;
location / {
proxy_pass http://westos;
}
}
vim /etc/security/limits.conf
最后一行添加
nginx - nofile 65535
useradd -M -d /usr/local/nginx/ -u 800 nginx #建立nginx用户,-M 不建立用户的家目录
nginx -t #检查语法是否有错
nginx -s reload #加载配置
server2与server3
配置apache
测试
curl www.westos.org 实现访问轮询
nginx 自带健康检查
关闭server2httpd,则会一直访问server3
在server1中编辑nginx默认发布页面
修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
http {
upstream westos {
# ip_hash;
server 172.25.254.2:80 down; #停掉后端服务器
server 172.25.254.3:80 down; #停掉后端服务器
server 172.25.254.1:80 backup; #本机作备机
}
nginx -s reload
测试:
curl www.westos.org
nginx基于cookie粘滞实现负载均衡
nginx-sticky-module 是 Nginx 的一个扩展模块,实现了通过 Cookie 的会话粘贴效果。
nginx以前对session 保持支持不太好,主要采用ip_hash把同一来源的客户(同一C段的IP)固定指向后端的同一台机器,ip_hash有个缺点是不能实现很好的负载均衡;直到nginx的扩展模块nginx-sticky-module的出现,解决了session sticky的问题。
基本原理:
首先根据轮询RR随机到某台后端,然后在响应的Set-Cookie上加上route字段,第二次请求再处理的时候,发现有route字段,直接导向原来的那个节点
重新编译安装nginx
nginx -s stop #关闭nginx
cd nginx-1.14.0
make clean
unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
make && make install
vim /usr/local/nginx/conf/nginx.conf
http {
upstream westos {
sticky;
server 172.25.24.2:80;
server 172.25.24.3:80;
}
nginx
nginx -s reload
测试:
需用浏览器测试,curl命令不支持cookies
使用火狐浏览器按F12在storage中查看详细信息