Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。
1、(正向代理): 如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
2、反向代理:
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
通过负载均衡,我们就提高并发数量,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
1、使用远程连接工具连接linux操作系统
2、进入nginx官网,下载http://nginx.org/
4、安装 pcre 依赖
联网下载 pcre 压缩文件依赖
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
5、解压压缩文件
使用命令 tar –xvf pcre-8.37.tar.gz
6、进入解压之后的目录,执行命令:./configure
如果缺少环境,执行:yum install -y gcc gcc-c++
7、使用 make&&make install编译安装,我们的pcre就安装完成了,pcre-config --version命令可以查看版本
8、安装其他依赖(openssl 、zlib 、 gcc)
命令:yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
9、安装nginx
把刚刚下载的nginx安装包传到linux中,依次执行
解压:tar -xvf nginx-1.12.2.tar.gz
进入目录:cd nginx-1.12.2/
命令:./configure
命令:make && make install
10、安装成功后,在usr中会多出来一个文件夹local/nginx,在nginx有sbin有启动脚本
11、查看访问的默认端口
12、在 windows 系统中访问 linux 中 nginx,默认不能访问的,因为防火墙问题(如果是自己学习用的虚拟机,防火墙直接关了就行)
(1)关闭防火墙
(2)开放访问的端口号,80 端口
查看开放的端口号
firewall-cmd --list-all
设置开放的端口号
firewall-cmd --add-service=http –permanent
firewall-cmd --add-port=80/tcp --permanent
重启防火墙
firewall-cmd –reload
使用nginx操作命令的前提:进入nginx的根目录:
cd /usr/local/nginx/sbin
4、重新加载nginx:./nginx -s reload
当我们修改/nginx/conf下的nginx.conf后,我们可以不重启nginx,使用重新加载
配置文件位置:/usr/local/nginx/conf
下面我们来看看配置文件有哪些组成,通过vi命令进入配置文件,我们发现大部分内容前面都有一个#,也就是注释
配置文件一共有三部分组成:
1、全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
2、events块
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置
3、http块
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http 全局块、server 块。
a)http全局块
http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
b)server块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了
节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
全局 server 块:最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
location 块: 这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
location 指令说明: 该指令用于匹配 URL。
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配
成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
实现效果:
(1)打开浏览器,输入www.123.com,跳转到linux系统tomcat主页面中
1、在linux系统中安装tomcat,使用默认端口8080
2、对外开放访问的端口
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd –reload
3、在windows系统中的浏览器测试:输入 ip地址:8080,看能否访问到tomcat页面
2、第一步 在 windows 系统的 host 文件进行域名和 ip 对应关系的配置
实现效果:
使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
nginx 监听端口为 9001,
访问 http://192.168.17.129:9001/edu/ 直接跳转到 127.0.0.1:8080
访问 http:// 192.168.17.129:9001/vod/ 直接跳转到 127.0.0.1:8081
1、准备两个tomcat服务器,一个8080,一个8081,8080我们已经准备好了
3、具体配置
(1)找到nginx的配置文件,在里面进行反向代理的配置
4、记得开放端口9001 8080 8081
实现效果:
(1)浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,负载均衡效果,平均到 8080和 8081 端口中
1、准备两台tomcat服务器8080和8081
2、在两台 tomcat 里面 webapps 目录中,创建名称是 edu 文件夹,在 edu 文件夹中创建页面 a.html,用于测试
3、在 nginx 的配置文件中进行负载均衡的配置
在http块中加上upstream,给服务起个名字,并列出服务器
在server中加上服务名字
4、测试
当我们用上面那种方式,就是用默认的轮询方式,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除,也就是说8080个8081轮流处理请求。
策略2:weight
weight 代表权重,默认为 1,权重越高被分配的客户端越多
策略3: ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,也就是说一个ip访问的服务器一直是一样的,可以解决session共享的问题
策略4: fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面Tomcat 处理动态页面。
方式一: 是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案(使用方式一学习)
方式二: 是动态跟静态文件混合在一起发布,通过 nginx 来分开。
通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。
具体 Expires 定义:
是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,但是不太适合于经常变动的资源。
(1)在 nginx 配置文件中进行配置,expires 参数相加的话位置也是在location中
这样的意思就是:
通过www路径,可以访问到/data/www/中的内容
通过image路径,可以访问到/data/image/中的内容
(2)最终测试
浏览器中输入http://www.123.com/image/01.jpg
我们在配置文件中配置类,autoindex on,这就表示列出当前文件夹中的内容
浏览器中输入http://192.168.17.129/www/a.html
这样我们就通过了不同的访问地址,来访问静态与动态的资源
1、什么是nginx的高可用?
我们之前使用一台nginx转发请求时,如果宕机了,就不能实现效果了,那么接下来就有了高可用集群,所以我们再准备一台备份服务器,如果主机宕机了,就有了备份服务器实现。
我们需要一个keepalive插件来完成操作,并使用虚拟ip访问,虚拟ip与主服务器绑定,主服务器宕机后,有keepalive绑定到备份服务器。
(1)需要两台 nginx 服务器
(2)需要 keepalived
(3)需要虚拟 ip
2、配置高可用的准备工作
(1)需要两台服务器 192.168.17.129 和 192.168.17.131
(2)在两台服务器安装 nginx
(3)在两台服务器安装 keepalived,命令:yum install keepalived –y
配置文件位置:cd /etc/keepalived
至此,准备工作结束
1、我们找到etc/keepalive中的keepalive.conf,拖动到桌面,用下面的内容来替换,直接替换原本的keepalive.conf即可,注意虚拟ip的前三段要和你的本机一致。
# 全局定义
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.17.129 #改成自己的ip
smtp_connect_timeout 30
# 主机的名字,在/etc下的host中可以配置,方式:ip 主机名
router_id LVS_DEVEL
}
# 检测脚本和一些权重的参数
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" #脚本的路径
interval 2 #(检测脚本执行的间隔)
weight 2 #权重,脚本中的条件成立,就设置
}
#虚拟ip的一些配置
vrrp_instance VI_1 {
state MASTER # 备份服务器上将 MASTER 改为 BACKUP
interface ens33 //网卡,ifconfig命令可以查看
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #每个多少时间检测是否存活,默认是一秒一次
#权限校验的方式,方式是密码,密码是1111,也可以自己修改
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.17.50 // VRRP H 虚拟地址
} }
2、在/usr/local/src 添加检测脚本 (根据你设置的脚本路径),这个是检测nginx是否存活
#!/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
接下来同样的方式设置从服务器,只需要修改MASTER和优先级
3、把两台服务器上的nginx和keepalive的启动起来
4、测试
通过你绑定到虚拟ip访问
1、在浏览器中输入虚拟ip地址,能够访问到主服务器
在主服务器中输入 ip a 发现网卡已经绑定了虚拟ip
2、把主服务器的nginx和keepalive停止,继续访问虚拟ip地址
测试结果发现还可以访问,在从服务器中输入ip a,发现网卡也已经绑定了虚拟ip,也就是说,主服务器宕机后,keepalive自动将虚拟ip和备份服务器绑定了
1、mater 和 worker
2、worker 如何进行工作的
3、一个 master 和多个 woker 有好处
(1)可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作,重新加载nginx后,正在工作的worker会工作完再去加载新的配置,而空闲的worker会跟着一起重新加载
(2)每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的,继续进行争抢,实现请求过程,不会造成服务中断
4、设置多少个 woker 合适
worker 数和服务器的 cpu 数相等是最为适宜的
5、连接数 worker_connection
第一个问题:发送请求,占用了 woker 的几个连接数?
答案:2 或者 4 个
第二个问题:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的最大并发数是多少?