下载安装nginx
这里去参考https://www.runoob.com/linux/nginx-install-setup.html;
配置一个简单的反向代理
反向代理其实有点像我们java 中的代理,为啥这么讲反向代理其实就是我们访问代理的地址,然后又代理地址发送给指定的地址;如下
配置如下修改nginx.conf这个文件
#user nobody;
worker_processes 1; #nginx多少个工作组
events {
worker_connections 1024;#nginx的链接数,通过这个可以就算个理论并发数
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
上面没有修改的原本的配置文件我们只需要修改 servser_name 的localhost 一般会修改成域名地址,并在location 中添加proxy_pass http://127.0.0.1:8080 映射本地的端口 这样当你访问你的你server_name 配置的地址的时候就会代理访问到tomcat 的页面
配置一个负载均衡
由于我们的开发中不可能存在一个tomcat,当有多个tomcat 时候需要在暴露的一个端口下代理多个tomcat 这时候的图解如下:
还是修改nginx.conf 配置 这里还是修改只是添加了upstream 模块 并且 location /这个模块的 proxy_pass 的值为upstream 名
http {
include mime.types;
default_type application/octet-stream;
upstream tomcats{
server 192.168.0.100:8080;
server 192.168.0.100:8081;
}
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name 192.168.0.100;
location / {
root html;
proxy_pass http://tomcats;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
index index.html;
}
}
}
负载均衡也有几种配置默认的是轮询就是上面这种
第二种 权重配置
upstream tomcats{
server 192.168.0.100:8080 weight=1 # 请求次数1/3
server 192.168.0.100:8081 weight=2 # 请求次数 2/3
}
第三种 最少的连接数 当我们配置多个时候它会根据请求最少 的那个使用
upstream tomcats{
least_conn
server 192.168.0.100:8080 # 1
server 192.168.0.100:8081 # 2
}
假设链接1 被请求过三次链接2背请求了两个那么这次请求2
其他自己查一下都不难还有第三方的负载策略,但是我们钱接触的项目最多的就是上面三种还有一种backup 备份机
高可用的Nginx
上面使用了两个tomcat 通过nginx 代理多个tomcat,当一个tomcat 挂掉也没有关系,那么当一个nginx 挂了那么就出问题,为了解决这种问题所以出现了nginx 集群;
上面的流程图就是使用第三方keepalived 配置虚拟Ip并绑定了两个服务器,当nginx1宕机了2生效
下载keepalived 自行下载直接上配置
配置Master
! 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_server 192.168.200.1
smtp_connect_timeout 30
router_id TEWHJ
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ##执行脚本位置
interval 2 ##检测时间间隔
weight -20 ## 如果条件成立则权重减20(-20)
}
vrrp_instance VI_1 {
state MASTER # 指定主的 备份服务器 BACKUP
interface enp0s3 # 指定网卡
virtual_router_id 51
mcast_src_ip 192.168.0.100 ## 本机ip地址
priority 90 # 优先级
advert_int 1 ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.16 # 指定的虚拟Ip
}
}
配置backup
! 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_server 192.168.200.1
smtp_connect_timeout 30
router_id TEWHJ
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ##执行脚本位置
interval 2 ##检测时间间隔
weight -20 ## 如果条件成立则权重减20(-20)
}
vrrp_instance VI_1 {
state BACKUP# 指定主的 备份服务器 BACKUP
interface enp0s3 # 指定网卡
virtual_router_id 52
mcast_src_ip 192.168.0.101 ## 本机ip地址
priority 90 # 优先级
advert_int 1 ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.16 # 指定的虚拟Ip
}
}
两个服务配置好启动服务器服务就可以了这样就完成了一个简答的nginx 高可用;
可是随着并发的极具升高这种模式的弊端也就出现 因为主从关系他就会出现当主nginx 没有挂掉那么备份服务永远也不会被请求这样就会出现资源浪费这时候又有一种新的方式来解决这种问题就是给nginx1 服务,配置两个虚拟ip,在第一个虚拟IP中为主,第二个中为备份,同样的nginx2服务中第一个IP为备份第二个为主,然后通过域名DNS的配置轮询来实现nginx 轮询,这样及解决了资源浪费,也解决了nginx 的并发瓶颈,但是这种方式也是有问题和瓶颈的。每一种架构方式都有它的弊端,我们只有在不断解决bug 中进步