nginx 是一款高性能的 http 服务器,反向代理服务器,电子邮件(IMAP/POP3)代理服务器;
它的特点就是高性能,占用内存少,支持高并发,运行稳定;
官方测试 可支持 5万 的并发量;
nginx 可以用于多种场景,最常用的是反向代理,其他场景也需要反向代理实现
http 服务器:nginx 是一个 http 服务器,可以独立提供 http 服务,可以做 web 静态资源服务器
正向代理:客户端代理
反向代理:反向代理是它最重要,也是最常用的一个场景
负载均衡:把多个请求近似平均的分配到多个服务器上
// 也就是说负载均衡需要多个服务器 【一个服务器多个端口应该也行,我没试过,使用时请自行测试】
// 负载均衡的本质其实也是反向代理
动静分离:把 web 静态资源和动态资源放在不同的服务器上,然后加上反向代理
配置高可用集群:组件分布式 nginx,防止 单 nginx 宕机导致 web 服务挂掉
我们先看下常规 web 服务的 请求响应 过程,加入后台需要操作数据库,如下图
开发环境的 web 服务器是单线程的,多个请求必须排队
nginx 作为反向代理,隐藏真实 IP,在 windows 上配置 域名-ip 解析器,使用域名通过 代理(nginx) 访问 真实服务(tomcat)
把 多个 request 平均分配到 多个 服务器上,避免单服务器的排队,提高并发
把 web 动态资源和静态资源 分开存储
nginx 安装有多种方式,详细过程 参照 官方安装文档,这里只简单介绍 tar 包安装。
nginx 需要安装依赖
//一键安装四个依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel下载 tar 包并解压,下载地址 官网下载,进入目录,执行如下命令
./configure make make install
解压后如下图
简单配置
nginx 默认 80 端口,这个端口一般被 apache 占用,默认 IP一般是 localhost,由于我们经常会搞一些其他事情把 hostname 改掉,所以这里先换成 IP
server { listen 8765; server_name localhost;启动并查看版本
[root@node conf]# /usr/local/nginx/sbin/nginx [root@node conf]# /usr/local/nginx/sbin/nginx -v nginx version: nginx/1.16.1/usr/local/nginx/sbin 就是上图那个解压后的 sbin
可以看到安装成功
web 端可访问
上面是 反向代理的 IP:PORT,下面是被代理的 服务, / 对应 url, 当访问 localhost:80 时,相当于访问 localhost:8080
负载均衡需要分配 request 到不同服务器,那如何分配呢?有几种策略
RR 策略
nginx 的默认策略,按时间顺序把请求逐个分配到不同服务器,如果某个服务器挂掉,会自动剔除。
upstream test { server localhost:8080; server localhost:8081; } server { listen 80; server_name localhost; client_max_body_size 1024M; location / { proxy_pass http://test; proxy_set_header Host $host:$server_port; } }upstream 代表多个服务器,假如有个服务器挂掉了,nginx 会自动判断,不给他分配 request,所以不影响 web 的使用。
注意 upstream 后面的 test 与 http 后面的要保持一致
权重策略
给每台服务器分配权重,权重大的越容易被分配 request,性能好的机器自然权重大,这种策略就是用于 服务器性能 差异较大的场景。
upstream test { server localhost:8080 weight=9; server localhost:8081 weight=1; } server { listen 80; server_name localhost; client_max_body_size 1024M; location / { proxy_pass http://test; proxy_set_header Host $host:$server_port; } }比如有 10 个 request,可能 8080 处理 9 个,8081 处理 1 个
还有 ip_hash 策略,包括上面两种是 nginx 自带的策略;
还有第三方策略 fair 策略、url_hash 策略,具体配置我就不写了,大同小异,参考 各种策略的详细配置
参考资料:
http://www.nginx.cn/doc/index.html Nginx中文文档
https://blog.csdn.net/weixin_41835612/article/details/83738188 有具体配置
https://www.cnblogs.com/xiaohuochai/p/9093819.html 有具体配置
https://www.jianshu.com/p/15e7f2adb463 有具体配置
https://www.jianshu.com/p/15e7f2adb463 有具体配置
https://www.cnblogs.com/ysocean/p/9392908.html 理论挺详细
https://blog.csdn.net/duguyuyun12345/article/details/83471821 Nginx使用教程
转载于:https://www.cnblogs.com/yanshw/p/11207756.html
相关资源:JAVA上百实例源码以及开源项目