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

简介: 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。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
存储 应用服务中间件 nginx
在使用Nginx之后,如何在web应用中获取用户IP以及相关原理
但总的来说,通过理解网络通信的基础知识,了解http协议以及nginx的工作方式,我们已经能在大多数情况下准确地获取用户的真实IP地址了,在调试问题或者记录日志时会起到很大的帮助。
870 37
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
418 21
|
负载均衡 Java 应用服务中间件
Tomcat与Nginx的负载均衡与动静分离技巧
总的来说,Tomcat和Nginx各有各的优点,在负载均衡和动静分离这两方面它们都有很好的应用。灵活使用这两个工具能够让Web应用具有更好的扩展性和用户体验。
406 14
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
506 11
|
负载均衡 网络协议 关系型数据库
一口把LVS、Nginx及HAProxy工作原理讲清楚了。(附图)
一口把LVS、Nginx及HAProxy工作原理讲清楚了。(附图)
385 0
|
负载均衡 算法 应用服务中间件
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
819 5
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
负载均衡 网络协议
slb健康检查的基本原理
slb健康检查的基本原理
380 6
|
负载均衡 应用服务中间件 Apache
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
357 3
|
中间件 应用服务中间件 nginx
Nginx+uWSGI+Django原理
Nginx+uWSGI+Django原理