nginx配置负载均衡时,如何根据不同请求类型动态调整权重?

摘要:技术人就得学的杂一点,看似在重视广度,而不是深度,实际上广度也是深度的一部分。君子不器,君子不像器具那样,作用仅仅限于某一方面。博学才能多才。 本文原文全文 URL 链接 : https:www.ccgxk.comemlog_dev
技术人就得学的杂一点,看似在重视广度,而不是深度,实际上广度也是深度的一部分。君子不器,君子不像器具那样,作用仅仅限于某一方面。博学才能多才。 本文原文全文 URL 链接 : https://www.ccgxk.com/emlog_dev/697.html 以前做反向代理,已经有了老牌 Apache 了,但这个 nginx 的出现,是解决【传统服务器在高并发连接下,性能不足问题】的。它的最初优势很明显,就是高并发下,内存占用小。随着不断更迭,它相较于 Apache 已经没有短板了。 配置 安装就不说了,首先是配置。配置文件就一个,一般在这里: /etc/nginx/nginx.conf 然后它的结果大概是这样: # Nginx 配置区域 events { } http { upstream backend { } server { location / { } } } stream { upstream backend { } server { } } 其中: event 是全局配置区域,比如:“每一个进程最多同时接客 1024 个” upstream backend 是代理池区域,比如“你可以打包三个 Java 服务成一个组” server 里的 location ,我们用的比较多,是 URI 路由配置区域,也就是根据 URL 的路径(URI)决定去向。 stream 是 流代理全局配置,是处理 TCP/UDP 协议的,比如你外网想访问内网的 MySQL(3306 端口)或 Redis,就在这里配置转发。 常用命令 一般有这几个: nginx -s stop 关闭 Nginx nginx -s quit 平稳关闭 Nginx (推荐,会等当前任务结束再关闭) nginx -s reopen 重新打开日志文件。 nginx -c filename 为 Nginx 指定一个配置文件,来代替默认的。 nginx -s reload 改配置后,重新加载 nginx -t 仅仅测试配置文件。 nginx -T 仅将 Nginx 启动时所加载的所有配置、模块等信息全部显示出来。 nginx -V 显示 nginx 的版本等 然后是使用。 模块 其实,nginx 的本体是很小的,功能全靠一大堆插件来运行! 这是很精妙的设计。我一直认为 模块化 是万能的,比设计严肃严格的赘余的类型更能支撑起大软件。 在 nginx 里,模块通常分为三类: 核心模块 HTTP 模块 Stream 模块 其中核心模块一般就一个,就是上面我们的配置区域。 额 stream 有两个。 stream,是 ngx_stream_core_module 模块,提供 TCP/UDP 流量代理服务最基本的功能。 proxy_pass ,是 ngx_stream_proxy_module 模块,为 Stream 服务提供反向代理的功能。 比如: stream { upstream mysql_cluster { server 192.168.1.10:3306; server 192.168.1.11:3306; } server { listen 3306; # 监听服务器的 3306 proxy_pass mysql_cluster; # 直接转发 TCP 流 } } 这就是一个流量的搬运工了,这里的 3306 是数据库的常用端口,以数据库举例,其他服务也一样。 你内网有两个数据库(一般来说是实时同步的),然后你接受到客户端的请求后,分发给这些数据库,如果 192.168.1.10:3306 宕机了,你可以直接转给 192.168.1.11:3306 。好处就是,你的数据库是公网不公开的,是私密的,而且能防止宕机。 HTTP 模块 而 HTTP 模块比较多。
阅读全文