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 模块比较多。
