Nginx快速入门(安装 负载均衡 动静分离 主备 原理)(下)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
云防火墙,500元 1000GB
应用型负载均衡 ALB,每月750个小时 15LCU
简介: Nginx快速入门(安装 负载均衡 动静分离 主备 原理)

启动成功访问 服务器ip:80

1673268024991.jpg

注意:如何连接不上,检查安全组是否开放端口,或者服务器防火墙是否开放端口!

相关命令:

# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙规则
firewall-cmd --list-all
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
# 参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;


Nginx配置之worker_processes


一般来说,worker_processes默认为1,官方说1一般情况足够了,也可以设置为cpu核心数,2或者4或者8再高没大意义,另外不要忘了设置worker_cpu_affinity,这个配置用于将worker process与指定cpu核绑定,降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗。


或者省事些,直接设置为auto,根据需求自动调整


1.9.10版本后可以配置

worker_processes auto;
worker_cpu_affinity auto;


解释:0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推


配置参考

worker_processes     4;
worker_cpu_affinity 0001 0010 0100 1000;


反向代理

server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            proxy_pass  http://127.0.0.1:8080;
            index  index.html index.htm;
        }


使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中

server {
         listen    9001;
         server_name  192.168.12.128;
         location ~ /edu/ {
            proxy_pass  http://127.0.0.1:8080;
           }
         location ~ /vod/ {
            proxy_pass http://127.0.0.1:8081;
          }
       }


location 指令说明:


该指令用于匹配 URL。

1673268104544.jpg

1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配

成功,就停止继续向下搜索并立即处理该请求。

2、~:用于表示 uri 包含正则表达式,并且区分大小写。

3、~:用于表示 uri 包含正则表达式,并且不区分大小写。

4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字

符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location

块中的正则 uri 和请求字符串做匹配。

注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~ 标识。


负载均衡


 

upstream myserver {
       server 192.168.12.128:8080;
       server 192.168.12.128:8081;
    }
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            proxy_pass  http://myserver;
            index  index.html index.htm;
        }


nginx 分配服务器策略


第一种 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。


第二种 weight

weight 代表权重默认为 1,权重越高被分配的客户端越多


第三种 ip_hash

每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器


第四种 fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分


动静分离


假设某些文件需要经常变更,可以通过设置 expires 起到控制页面缓存的作用,合理的配置缓存和压缩可以减少很多服务器的请求压力。

1673268174198.jpg

location /www/ {
            root   /data/;
            index  index.html index.htm;
            autoindex on;
        }
        location /image/ {
           root   /data/;
           autoindex   on;
           autoindex_exact_size off;
           autoindex_localtime on;
        }


Nginx默认是不允许列出整个目录的。如需此功能,打开nginx.conf文件,在location server 或 http段中加入

autoindex on;

另外两个参数最好也加上去:


autoindex_exact_size off;

默认为on,显示出文件的确切大小,单位是bytes。

改为off后,显示出文件的大概大小,单位是kB或者MB或者GB

autoindex_localtime on;

默认为off,显示的文件时间为GMT时间。

改为on后,显示的文件时间为文件的服务器时间

1673268220965.jpg

1673268232749.jpg


高可用主备模式

1673268244796.jpg

(1)需要两台 nginx 服务器,在两台服务器安装 nginx

(2)需要 keepalived,在两台服务器安装 keepalived

(3)需要虚拟 ip


使用 yum 命令进行安装

yum install keepalived –y

安装之后, 有/etc/keepalived/keepalived.conf文件


修改/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 192.168.17.129
 smtp_connect_timeout 30
 router_id LVS_DEVEL   # 访问到主机,也可以写ip,也可以修改/etc/hosts文件添加映射********
}
vrrp_script chk_http_port {
 script "/usr/local/src/nginx_check.sh"
 interval 2 #(检测脚本执行的间隔)
 weight 2
}
vrrp_instance VI_1 {
 state MASTER # 备份服务器上将 MASTER 改为 BACKUP *******
 interface ens33 //网卡,通过 ifconfig 查看网卡名 *******
 virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
 priority 100 # 主、备机取不同的优先级,主机值较大,备份机值(90)较小 ****
 advert_int 1
 authentication {
 auth_type PASS
 auth_pass 1111
 }
 virtual_ipaddress {
 192.168.17.50 // VRRP H 虚拟地址
 } }


在/usr/local/src 添加检测脚本,nginx_check.sh

#!/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


把两台服务器上 nginx 和 keepalived 启动

启动 nginx:./nginx

启动 keepalived:systemctl start keepalived.service


最终测试

(1)在浏览器地址栏输入 虚拟 ip 地址 192.168.17.50

(2)把主服务器(192.168.17.129)nginx 和 keepalived 停止,再输入 192.168.17.50


测试可以发现我们访问 keepalived 中配置的两个 VIP 都可以正常调度等,当我们停止任意一台 keepalived节点,同样还是正常访问;到此,keepalived+nginx 高可用集群(双主模式)就搭建完成了。


原理


mater 和 worker

1673268315593.jpg

1673268322542.jpg


worker是如何工作的?

1673268331384.jpg


一个 master 和多个 woker 有好处

(1)可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作

(2)每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的,继续进行争抢,实现请求过程,不会造成服务中断


设置多少个 woker 合适


worker 数和服务器的 cpu 数相等是最为适宜的


查看CPU个数:cat /proc/cpuinfo |grep “cores”|uniq

或者:top命令后 按1


连接数 worker_connection


第一个:发送请求,占用了 woker 的几个连接数?

答案:2 或者 4 个,如果是静态资源 则一个请求 一个响应 连接数2

如果是动态资源 则客户端与nginx的请求响应(2) + nginx和tomcat的连接(2) = 4


第二个:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的

最大并发数是多少?

普通的静态访问最大并发数是: worker_connections * worker_processes /2, 而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
8天前
|
负载均衡 算法 应用服务中间件
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
|
27天前
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
127 4
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
25天前
|
应用服务中间件 Linux nginx
Mac os 安装 nginx 教程(success)
这篇文章是关于如何在Mac OS系统上使用Homebrew安装nginx及其依赖,并解决安装过程中可能出现的权限问题。
59 0
Mac os 安装 nginx 教程(success)
|
1月前
|
负载均衡 应用服务中间件 Apache
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
34 3
|
1月前
|
Ubuntu 搜索推荐 应用服务中间件
Nginx安装与使用
Nginx安装与使用
|
1月前
|
负载均衡 算法 应用服务中间件
Nginx安装及配置详解
Nginx安装及配置详解
|
1月前
|
应用服务中间件 程序员 开发工具
mac下安装nginx
mac下安装nginx
|
1月前
|
应用服务中间件 Linux nginx
CentOS7安装Nginx
CentOS7安装Nginx
|
1月前
|
Ubuntu Unix 应用服务中间件
Ubuntu16.04.1 安装Nginx
Ubuntu16.04.1 安装Nginx
|
1月前
|
网络协议 应用服务中间件 Linux
Linux安装nginx
Linux安装nginx