1.什么是nginx
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强, 高达 50,000 个并发连接数的响应 ,事实上nginx的并发能力在同类型的网页服务器中表现较好。
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器。
2 .为什么使用nginx反向代理服务器
3 . 国内有哪些企业在使用nginx代理服务器
淘宝 京东 新浪 微博 腾讯等
4.如何安装nginx代理服务器
nginx它使用c语言编写,通过源码的形式安装nginx.
(1)先安装nginx需要的依赖环境
yum install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
或者
yum -y install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
(2)下载nginx
下载地址:nginx: download
(3)把下载的nginx放入linux系统
(4)创建一个目录作为nginx的安装目录
mkdir /usr/soft/nginx
(5)解压nginx源码文件
tar -zxvf nginx-1.24.0.tar.gz
(6)进入解压后的目录
cd nginx-1.24.0
指定nginx安装的目录
./configure --prefix=/usr/soft/nginx
(7)编译和安装
make && make install
(8)查看安装nginx的目录中的内容
ls -l /usr/soft/nginx
(9)启动nginx
sbin/nginx 启动
nginx sbin/nginx -s stop 关闭
nginx sbin/nginx -s reload 重新加载nginx配置
通过放行指定端口号80
firewall-cmd --add-port=80/tcp --zone=public --permanent
systemctl restart firewalld
或者关闭防火墙
#查看防火墙状态
systemctl status firewalld
#防火墙关闭
systemctl stop firewalld
(10)window浏览器就可以访问代理服务器
这是我自己的虚拟机IP地址:http://192.168.206.134:80
虚拟机IP地址:192.168.206.134
80:Nginx默认的端口号
5.正文
-
ngnix的配置文件的介绍。
-
nginx中的核心业务功能 【1】反向代理 【2】负载均衡 【3】动静分离
-
nginx的高可用。
6.ngnix的配置文件的介绍
自定义了server
创建一个目录main 并在该目录下创建一个main.html
注意: 你修改了nginx配置文件,必须重新加载配置文件
/usr/soft/nginx/sbin/nginx -s reload
一个nginx对应多个server
7. nginx的核心功能
7.1 反向代理
(1)正向代理
拿借钱打个比方,A想向C借钱,但是C不认识A所以不借给他,然后A就通过B向C借钱,B借到钱之后再转交给A,在这个过程中B就扮演了一个正向代理的角色,这个过程中,真正借钱的人是谁,C是不知道的~ 我们常说的代理也就是指正向代理,正向代理的过程,它隐藏了真实的请求客户端,服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求.
比如我想访问www.google.com,要想翻越这堵墙,你可以在国外用Shadowsocks来搭建一台代理服务器,代理帮我们请求www.google.com,代理再把请求响应结果再返回给我。思考: 谷歌是否知道真正的访问者。
正向代理: 代理的客户端,对于服务器来说不知道真实的客户。
(2)反向代理
还用借钱的例子,A想向C借钱,然后C借给他了,但是实际上这个钱可能C向B借的~至于钱到底是谁的,A是不知道的~ 这里的C扮演着一个反向代理的角色,客户不知道真正提供服务的人是谁。 反向代理隐藏了真实的服务端,对于客户来说不知道访问的是哪台服务器。 可以使用nginx反向代理。
准备:
搞一台真实服务器----tomcat项目。----搞一个springboot项目并放入linux服务器系统
java -jar 项目jar包
java -jar springboot-demo01.jar
运行springboot项目
(2)配置nginx来代理上面springboot真实项目服务。
![]()
重新加载nginx配置文件
nginx -s reload
(3)浏览器访问nginx
7.2 负载均衡
配合反向代理+负载均衡
真实服务器准备2台。
nginx重新加载配置文件
/usr/soft/nginx/sbin/nginx -s reload
默认使用轮询策略。
还有哪些负载均衡策略:
(1)权重策略:----合适服务器的配置不同,被访问的频率不同。
nginx重新加载配置文件
/usr/soft/nginx/sbin/nginx -s reload
(2)ip_hash: ----根据客户端的ip分配相应真实服务器。
nginx重新加载配置文件
/usr/soft/nginx/sbin/nginx -s reload
(3)使用第三方插件:----大多数付费。
7.3 动静分离![](https://img-blog.csdnimg.cn/5dc65d33fdbf4021a55b8f8f29ca8d4f.png)
把静态资源【css,js,img】交于nginx来处理,而动态资源[接口,jsp]还是有真实服务器处理
好处: 当修改静态资源时,无需对每个真实服务器的静态资源做修改,只需要修改nginx一处的静态资源。
8.Nginx的高可用![](https://img-blog.csdnimg.cn/116cfcb2e16846958d3695cc09167be6.png)
准备服务器:
(1)准备两台nginx服务器. 192.168.206.134 192.168.206.135 必须安装了nginx
(2) 需要在每一个nginx服务器上安装keepalived
#安装keepalived
yum install -y keepalived
#检查是否安装keepalived
rpm -q -a keepalived
默认安装路径: /etc/keepalived
cd /etc/keepalived
(3)修改keepalived的配置文件内容。
! Configuration File for keepalived
# 全局配置
global_defs {
# 邮件通知信息
notification_email {
# 定义收件人
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
# 定义发件人
notification_email_from Alexandre.Cassen@firewall.loc
# SMTP服务器地址
smtp_server 192.168.206.134
smtp_connect_timeout 30
# 路由器标识,一般不用改,也可以写成每个主机自己的主机名
router_id 192.168.206.134
}
vrrp_skip_check_http_port{
script "usr/local/src/nginx_check.sh"
interval 2
#脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级-20
weight -20
}
# 一个vrrp_instance就是定义一个虚拟路由器的,实例名称
vrrp_instance VI_1 {
# 定义初始状态,可以是MASTER或者BACKUP
state MASTER
# 工作接口,通告选举使用哪个接口进行
interface ens33
# 虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,而且这个虚拟
# ID还是虚拟MAC最后一段地址的信息,取值范围0-255
virtual_router_id 51
# 如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高
priority 100
# 通告频率,单位为秒
advert_int 1
# 通信认证机制,这里是明文认证还有一种是加密认证
authentication {
auth_type PASS
auth_pass 1111
}
# 通信认证机制,这里是明文认证还有一种是加密认证
virtual_ipaddress {
192.168.206.50
}
#将 track_script块加入instance配置模块
track_script {
#执行Nginx监控的服务
chk_http_port
}
}
把上面修改好的内容,分别放到keepalived目录下替换原来的配置。
(4) nginx_check.sh脚本文件
#!/bin/bash
# 检查是否开启nginx
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
systemctl stop keepalived
# # 开启nginx nginx脚本所在的路径
# /usr/soft/nginx/sbin/nginx
# sleep 2
# # 开启nginx失败 则执行关闭keepalived
# if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
# pkill -9 keepalived
# fi
fi
切换至/usr/local/src/下把nginx_check.sh脚本文件放入
cd /usr/local/src/
分别在两台服务器上放入指定目录
分别启动---keepalived
systemctl start keepalived.service
开启两台nginx服务
访问虚拟ip
关闭主节点nginx
#关闭Nginx
/usr/soft/nginx/sbin/nginx -s stop
#关闭Keepalived
systemctl stop keepalived.service
如果两个人配合操作的话--防火墙需要关闭或端口放行--桥接网络
Keepalive配置文件说明
# 全局配置
global_defs {
# 邮件通知信息
notification_email {
# 定义收件人
acassen@firewall.loc
}
# 定义发件人
notification_email_from Alexandre.Cassen@firewall.loc
# SMTP服务器地址
smtp_server 192.168.200.1
smtp_connect_timeout 30
# 路由器标识,一般不用改,也可以写成每个主机自己的主机名
router_id LVS_DEVEL
# VRRP的ipv4和ipv6的广播地址,配置了VIP的网卡向这个地址广播来宣告自己的配置信息,下面是默认值
vrrp_mcast_group4 224.0.0.18
vrrp_mcast_group6 ff02::12
}
# 定义用于实例执行的脚本内容,比如可以在线降低优先级,用于强制切换
vrrp_script SCRIPT_NAME {
}
# 一个vrrp_instance就是定义一个虚拟路由器的,实例名称
vrrp_instance VI_1 {
# 定义初始状态,可以是MASTER或者BACKUP
state MASTER
# 工作接口,通告选举使用哪个接口进行
interface ens33
# 虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,而且这个虚拟
# ID还是虚拟MAC最后一段地址的信息,取值范围0-255
virtual_router_id 51
# 使用哪个虚拟MAC地址
use_vmac XX:XX:XX:XX:XX
# 监控本机上的哪个网卡,网卡一旦故障则需要把VIP转移出去
track_interface {
eth0
ens33
}
# 如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高
priority 100
# 通告频率,单位为秒
advert_int 1
# 通信认证机制,这里是明文认证还有一种是加密认证
authentication {
auth_type PASS
auth_pass 1111
}
# 设置虚拟VIP地址,一般就设置一个,在LVS中这个就是为LVS主机设置VIP的,这样你就不用自己手动设置了
virtual_ipaddress {
# IP/掩码 dev 配置在哪个网卡
192.168.200.16/24 dev eth1
# IP/掩码 dev 配置在哪个网卡的哪个别名上
192.168.200.17/24 dev label eth1:1
}
# 虚拟路由,在需要的情况下可以设置lvs主机 数据包在哪个网卡进来从哪个网卡出去
virtual_routes {
192.168.110.0/24 dev eth2
}
# 工作模式,nopreempt表示工作在非抢占模式,默认是抢占模式 preempt
nopreempt|preempt
# 如果是抢占默认则可以设置等多久再抢占,默认5分钟
preempt delay 300
# 追踪脚本,通常用于去执行上面的vrrp_script定义的脚本内容
track_script {
}
# 三个指令,如果主机状态变成Master|Backup|Fault之后会去执行的通知脚本,脚本要自己写
notify_master ""
notify_backup ""
notify_fault ""
}
# 定义LVS集群服务,可以是IP+PORT;也可以是fwmark 数字,也就是防火墙规则
# 所以通过这里就可以看出来keepalive天生就是为ipvs而设计的
virtual_server 10.10.10.2 1358 {
delay_loop 6
# 算法
lb_algo rr|wrr|lc|wlc|lblc|sh|dh
# LVS的模式
lb_kind NAT|DR|TUN
# 子网掩码,这个掩码是VIP的掩码
nat_mask 255.255.255.0
# 持久连接超时时间
persistence_timeout 50
# 定义协议
protocol TCP
# 如果后端应用服务器都不可用,就会定向到那个服务器上
sorry_server 192.168.200.200 1358
# 后端应用服务器 IP PORT
real_server 192.168.200.2 1358 {
# 权重
weight 1
# MSIC_CHECK|SMTP_CHEKC|TCP_CHECK|SSL_GET|HTTP_GET这些都是
# 针对应用服务器做健康检查的方法
MISC_CHECK {}
# 用于检查SMTP服务器的
SMTP_CHEKC {}
# 如果应用服务器不是WEB服务器,就用TCP_CHECK检查
TCP_CHECK {
# 向哪一个端口检查,如果不指定默认使用上面定义的端口
connect_port <PORT>
# 向哪一个IP检测,如果不指定默认使用上面定义的IP地址
bindto <IP>
# 连接超时时间
connect_timeout 3
}
# 如果对方是HTTPS服务器就用SSL_GET方法去检查,里面配置的内容和HTTP_GET一样
SSL_GET {}
# 应用服务器UP或者DOWN,就执行那个脚本
notify_up "这里写的是路径,如果脚本后有参数,整体路径+参数引起来"
notify_down "/PATH/SCRIPTS.sh 参数"
# 使用HTTP_GET方法去检查
HTTP_GET {
# 检测URL
url {
# 具体检测哪一个URL
path /testurl/test.jsp
# 检测内容的哈希值
digest 640205b7b0fc66c1ea91c463fac6334d
# 除了检测哈希值还可以检测状态码,比如HTTP的200 表示正常,两种方法二选一即可
status_code 200
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
# 向哪一个端口检查,如果不指定默认使用上面定义的端口
connect_port <PORT>
# 向哪一个IP检测,如果不指定默认使用上面定义的IP地址
bindto <IP>
# 连接超时时间
connect_timeout 3
# 尝试次数
nb_get_retry 3
# 每次尝试之间间隔几秒
delay_before_retry 3
}
}
real_server 192.168.200.3 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}