Nginx学习笔记
一、Nginx简介
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强。
Nginx作用:
- 反向代理
- 服务器负载均衡
- 客户端动静分离
1.反向代理
正向代理:如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称之为正向代理。
简而言之,就是如果要访问一个网址,则通过一个中间网址来访问,这个中间网址也就是正向代理。
反向代理:客户端无需做任何配置,直接将请求发送给反向代理服务器,反向代理服务器会将请求转发给处理业务的服务器,也就说不会暴露真实处理业务的服务器的Ip,只会暴露反向代理服务器的ip。
总结:也就是说正向代理是将访问的客户端进行代理、隐藏,而反向代理是将要访问的服务端进行代理、隐藏。
2.负载均衡
随着并发数量增加,服务器会负载能力有限而出现超时等情况,这时候负载均衡就是用来处理这个问题的功能。负载均衡就是通过多个服务器一块,然后将本来是向一个服务器发送的所有请求分发给这些服务器,将负载进行均衡。
也就是Nginx可以作为反向代理服务器,将请求分发给一个服务器集群中,让不同的服务器来处理。
3.动静分离
为了加快解析速度,可以将动态资源和静态资源由不同的服务器来加载,这就是动静分离。
二、Nginx的安装
1.安装环境
安装gcc、pcre-devel、zlib-devel、openssl-devel
yum -y install gcc-c++ #-y表示全都同意,安装gcc
yum install -y pcre pcre-devel #安装pcre-devel
yum install -y zlib zlib-devel #安装zlib-devel
yum install -y openssl openssl-devel #安装openssl-devel
pcre-config --version #检查PCRE版本
2.下载Nginx
3.安装Nginx
1.将安装包上传到/usr/local/src目录下
2.解压
tar -zxvf nginx-1.9.9.tar.gz #-x解压,-v显示详情,-f制定解压文件
3.配置
./configure
make && make install #make
安装完成后,在/usr/local中有个nginx文件夹,在sbin里面有nginx的启动脚本
4.启动Nginx
进入/usr/local/nginx/sbin/
然后输入./nginx执行
输入ps -ef|grep nginx查询进程
然后输入你的ip:80就能访问(:80可以省略)
如果访问不了就开放断口80
sudo firewall-cmd --add-port=80/tcp --permanent
#开放80断口,tcp协议,--permanent表示持久,关机重启都还有
#如果是云服务器,记得开启安全组
三、Nginx常用命令
使用Nginx命令前提:要进入Nginx的目录
cd /usr/local/nginx/sbin #如果没有配置环境变量,就要在该目录下执行命令
命令:
./nginx -v #查询Nginx版本号
./nginx -s stop #关闭nginx
./nginx #启动Nginx
./nginx -s reload #重新加载配置文件
四、Nginx的配置文件
配置文件位置:/usr/loacl/nginx/conf/nginx.conf
一共由三部分组成:
- 全局块
- events块
- http块
1.全局块
配置文件开始到events块之间的内容,涉及的是一些影响运行nginx服务器的配置指令。
例如worker_processes 1;就是表示并发处理数量,数值越大,并发处理数量越多
2.events块
主要是涉及影响nginx与用户的网络连接
例如worker_connections 1024;表示支持的最大连接数是1024
3.http块
配置最频繁的部分,又包括http全局块和server块
五、Nginx实现反向代理
1.设计思想
在浏览器中输入www.woshitest.com能够直接跳转到tomcat的主页
2.实现步骤
客户端访问www.woshitest.com,在hosts文件设置映射给本机端口80,就是转发给代理服务器nginx,然后再转发给tomcat
3.具体配置
修改nginx.conf
首先将server_name改成本机ip
然后设置转发地址
也就是proxy_pass http://localhost:8080;
六、Nginx实现负载均衡
1.设计思想
在浏览器中输入www.woshitest.com/a.html能够跳转到不同的服务器8080,8081
2.配置修改
在nginx配置文件中配置负载均衡
在server块将server_name改成本机ip
然后设置转发地址
也就是proxy_pass http://myserver;
upstream myserver {
server ip:8080;
server ip:8081;
}
默认轮询算法
如果学过ribbon还是很好理解的
3.算法
默认使用轮询算法
轮询算法就是逐一分配给后端服务器
weight算法
按照权重进行分配,权重越高分配的越多
在upstream myserver加上权重,例如
upstream myserver {
server ip:8080 weight:10;
server ip:8081 weight:5;
}
ip_hash
每个请求ip按照hash结果分配,配个固定访问一个服务器,解决session的问题,访问一次后之后就一直访问这个服务器。
upstream myserver {
ip_hash;
server ip:8080 ;
server ip:8081 ;
}
fair
按照后端服务器响应时间分配请求,响应时间段的优先
upstream myserver {
server ip:8080 ;
server ip:8081 ;
fair;
}
七、Nginx实现动静分离
一个请求通过nginx时,nginx将请求中的动态请求分发给动态服务器处理,静态请求分发给静态处理器处理。
通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。
1.准备
在linux创建一个data目录,子目录image和www分别放置一个图片和一个html
2.配置修改
Location /wwww/ {
root /data/ ;
index index.html index.html;
}
Location / image/ {
root /data/ ;
autoindex on;
}
八、集群
假设只有一个Nginx,如果down机,会导致服务无法进行,所以需要多台Nginx集群,如果主服务器down机,就切换到备用服务器,达到高可用的效果。
在访问具体nginx时,首先访问一个vip(虚拟ip),之后转发给nginx集群
1.准备
安装多台Nginx
给每台Nginx安装Keepalived
yum -y install keepalived
2.配置修改
配置文件位置 /etc/keepalived/keepalivec.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 1 92.168.17.129
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2 # #(检测脚本执行的间隔
weight 2
}
vrrp_instance VI_1 {
state BACKUP # 备份服务器上将 MASTER 改为 BA CKUP
interface name # 网卡名字,可以输入ifcong查询
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
vip // VRRP H 虚拟地址
}
}
脚本文件放到/usr/loacl/src下
#!/bin/bash
A=`ps
C nginx no header |wc l`
if [ $A
eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps C nginx no header |wc l` eq 0 ];then
killall keepalived
fi
fi
3.测试
启动nginx和keepalive
./nginx
systemctl start keepalived.service
九、keepalive配置详解
#全局配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 1 92.168.17.129
smtp_connect_timeout 30
router_id LVS_DEVEL #路由id,这个就是访问到的主机名字
}
#检测脚本配置
vrrp_script chk_http_port {
script “/usr/local/src/nginx_check.sh” #脚本位置
interval 2 #(检测脚本执行的间隔,每隔两秒检测一次)
weight 2 #如果脚本成立,该服务器权重+2)
}
#虚拟ip配置
vrrp_instance VI_1 {
state BACKUP # 表示是主服务器还是备份服务器,备份服务器上将 MASTER 改为 BACKUP
interface name # 网卡名字,可以输入ifcong查询
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #每隔多长时间发送一次心跳
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
vip // VRRP H 虚拟地址
}
}
十、Nginx工作原理
工作原理master+worker详解见博客
master下面可以有多个worker,每个woker都有自己独立的进程,互相之间争抢请求,不会造成服务中断。
worker 数和服务器的 cpu 数相等是最为适宜的