Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet则需要通过代理服务器来访问,这种代理服务就称为正向代理
其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址
在处理高并发的问题时我们可以进行纵向扩展也就是提高电脑配置的方式来解决问题,但是这样总是会行不通的,那么我们就需要进行横向扩展,就是增加服务器的数量,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原来的请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力
whereis nginx # 查找安装路径
# 使用nginx必须进入sbin目录,需要先找到nginx的安装目录 进入sbin目录执行一下命令
./nginx
./nginx -v 查看版本号
./nginx -s stop
./nginx -s quit
./nginx -s reload
# ./nginx -s quit:此方式停止步骤是待nginx进程处理任务完毕进行停止。
# ./nginx -s stop:此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
在安装目录下的conf目录中有一个nginx.conf文件
从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行Nginx服务器的用户组,允许生成的worker process数,进程PID存放路径,日志存放路径和类型以及配置文件的引入等
worker_processes 1;
这是nginx服务器并发处理服务的关键配置,worker_processes越大,可以支持的并发处理数量也越多,但是会受到硬件,软件等设备的制约
events {
worker_connections 1024; # 表示每个work process支持的最大连接数为1024
}
events块涉及的指令主要影响Nginx服务器与用户的网络连接,这部分的配置对Nginx的性能影响较大,在实际中应该灵活配置
Nginx服务器配置中最频繁的部分,http块也可以包括http全局块、server块
http全局块配置的指令包括文件引入、MIME-TYPE定义,日志自定义,连接超时时间、单链接请求数上限等
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本
每个http块可以包括多个srever块,而每个server块就相当于一个虚拟主机,而每个server也分为全局server块以及可以同时包含多个location块
最常见的配置时本虚拟机主机的监听配置和本虚拟机主机的名称或IP配置
一个server块可以配置多个location块,这块的作用是基于nginx服务器接收到的请求字符串,对虚拟注解名称之外的字符串进行匹配,对特定的请求进行处理,地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行
案例一
实现效果:打开浏览器,在浏览器地址栏输入地址www.123.com
,跳转Linux系统tomcat主页面中
准备工作:在linux中安装tomcat
具体实现:在windows的host文件中加入
10.10.10.129 www.123.com
前面是虚拟机ip地址 后面是映射的域名
nginx也需要配置
案例二
实现效果:使用nginx反向代理,根据访问的路径跳转到不同端口的服务中,nginx监听端口为9001
访问 http://127.0.0.1:9001/edu/ 直接跳转到127.0.0.1:8080
访问 http://127.0.0.1:9001/vod/ 直接跳转到127.0.0.1:8081
先弄两个tomcat并修改配置文件中的端口号
之后启动两个tomcat并进行测试
在8080端口的tomcat中创建edu文件夹并创建a.html文件
在8081端口的tomcat中创建vod文件夹并创建a.html文件
修改nginx的配置文件
添加这一段配置之后重启nginx在浏览器地址访问
http://10.10.10.129:9001/edu/a.html
http://10.10.10.129:9001/vod/a.html
就会产生我们要的效果
实现效果:
浏览器地址栏输入地址 http://10.10.10.129/edu/a.html 负载均衡效果,平均8080和8081端口中
需要在nginx的配置文件中进行负载均衡的配置
在http块中进行如下配置
之后访问地址之后进行刷新,每次刷新之后显示的内容都不容易,表示已经实现了负载均衡
每个请求按时间顺序注意分配到不同的后端服务器,如果果断服务器down掉,能自动剔除
weight代表权重,默认为1,权重越高被分配的客户端越多
配置方式就是在轮询配置的upstreat配置中,端口号后面加上权重
每个请求按访问ip的hash结果分配,这样每个方可固定访问一个后端服务器,可以解决session的问题
这样做可以保证同一个ip访问到的服务器永远是同一个服务器,这样就可以保证session的正常使用
准备工作:
准备一些静态资源,用于进行访问
具体配置:
在nginx配置文件中进行配置
访问http://10.10.10.129/www/a.html和http://10.10.10.129/image/123.JPG
autoindex on 配置是列表显示
当我们直接访问的是一个目录的时候就会这么显示内容
所有的服务器都有宕机的可能性,所以当我们只有一台服务器的时候就不能保证程序的正常运行,这个时候我们就需要使用多台服务器来保证服务器的正常运行,其中会有一台主服务器和多台备用服务器。
一般都是先发送到主服务器,如果主服务器宕机那么就会使用备份服务器进行转发
需要使用一个软件keepalived类似于一个路由,会检测当前nginx服务器是否宕机
需要两台nginx服务器
需要一个虚拟ip地址
修改keepalived配置
修改etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 10.10.10.130
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usr/local/nginx/nginx_check.sh"
interval 2 # 检测脚本执行的间隔
weight 2
}
vrrp_instance VI_1 {
state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
interface ens33 # 网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 须相同
priority 100 # 主、备机取不同的优先级,主机值较大,备机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 # VRRP H 虚拟地址
}
}
在/usr/local/nginx/中添加一个nginx_check.sh脚本
#!/bin/bash
A=`ps -C nginx ¨Cno-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
启动nginx和keepalived
service keepalived start
测试
在浏览器地址栏输入虚拟ip进行测试,之后将主服务器停掉,然后再访问ip