nginx的使用

发布于:2025-07-07 ⋅ 阅读:(18) ⋅ 点赞:(0)
        Nginx 是⼀个⾼性能的 HTTP 和反向代理 Web 服务器。它的主要功能包括反向代理、负载均衡和动静分离等。正因为 Nginx 的这些功能能够为系统带来性能和安全方面的诸多优势,我们在项⽬部署时需要引入 Nginx 组件。接下来我们会逐⼀向⼤家介绍nginx的核心功能。

nginx主要功能介绍

1. 反向代理

要搞清楚什么是反向代理,先要搞清楚什么是正向代理。
正向代理通常是指客户端(如浏览器)通过代理服务器来访问互联⽹上的其他服务器。在这种情 况下,客⼾端配置了代理设置(注意这个代理是在客户端配置的),所有对外的请求都会先发送到代 理服务器上,再由代理服务器转发到真正的目标服务器。这样做的好处包括但不限于:
  • 隐私保护:客户端的真实IP地址不会直接暴露给外部服务器。
  • 缓存:如果代理服务器具有缓存功能,那么对于频繁请求的数据,可以直接从缓存中返回结果,提高响应速度。
  • 内容过滤:组织或企业可以使⽤正向代理对员⼯的上⽹⾏为进⾏监控或者过滤不合适的⽹站内容。 
反向代理
反向代理则是指客⼾端直接访问的服务器实际上是⼀个代理服务器(注意代理服务器在服务器端
配置),这个代理服务器接收客⼾端的请求后,会将请求转发给真正的后端服务器。客⼾端本⾝是不知道这个代理服务器存在的。反向代理的应⽤场景包括:
  • 负载均衡:通过反向代理可以在多个后端服务器之间分配请求,以分散单个服务器的压⼒。这个也是我们下⼀个要讲到的功能。
  • 安全性:隐藏真实的后端服务器地址,增加了⼀层安全防护。
  • 缓存与加速:类似于正向代理,反向代理也可以实现缓存功能,减少后端服务器的负载并加快响应速度。

2. 负载均衡

为了避免单点故障或者现有的请求使服务器压⼒太⼤⽆法承受,所有我们需要搭建⼀个服务器集
群(如上图所⽰服务端有多个服务器),将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将“负载”均衡的分发到不同的服务器,也就是我们所说的负载均衡
那假如我们增加了A、B、C、D等等多台服务器,我们需要把请求分给这些服务器,但是每个服务
器也有自己的不同,性能也可能不均,所以怎么分?如何分配更好?⼜是⼀个问题。nginx提供了几种算法来解决这个问题:
轮询法(默认法)
  • 每个请求按时间顺序逐⼀分配到不同的后端服务器。
  • 适合服务器配置相当,性能⽆差异的情况。
weight (权重模式,加权轮询)
  • 指定轮询⼏率, weight 和 访问⽐率 成正⽐,⽤于后端服务器性能不均的情况。
  • 这种⽅式⽐较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利⽤资源。 weight 和 访问⽐率 成正⽐,权重越⾼,在被访问的概率越⼤。
•  ip_hash
  • 请求通过哈希算法,⾃动定位到该服务器。每个请求按访问 ip hash 结果分配,这样每个访客固定访问⼀个后端服务器。
最少连接(least_conn)
  • nginx 会统计每个后端服务器当前的活动连接数,当有新的请求到来时,将请求分配到活动连接数最少的服务器上。
  • 能够根据服务器的实际负载情况动态地分配请求,将新请求分配到当前连接数最少的服务器上,避免某些服务器负载过⾼⽽其他服务器负载过低的情况。

3. 动静分离

动:动态资源。 动态资源指的是通过请求服务器获取到的资源。
静:静态资源。静态资源指的是不需要通过请求服务器就可以得到的资源。如: css 、html 、 jpg js 等⽂件)。
        这些静态资源既然⽆需服务器处理,则可以由nginx直接来处理⽆需后端服务器介⼊。这样可以减轻后端服务器的负载,使其专注于处理动态内容,从⽽提⾼整体性能。并且们还可以根据 静态资源 的特点将其做缓存操作,以提⾼资源的响应速度。如下图所⽰:动态资源和静态资源的处理是分开的。
        在本地开发时,我们通常⽆需使⽤nginx。因为本地开发的时候我们专注于业务功能的实现。
        然⽽,⼀旦项⽬开发完成,并准备部署到服务器上,我们就需要考虑性能、安全等⼀系列的问题这个时候我们就需要部署nginx,以构建⼀个完整且稳定的运⾏环境。

docker运行nginx并代理服务 

1.通过docker安装运行nginx

#拉取nginx镜像
docker pull nginx:1.21
#启动nginx容器
docker run --name oj-nginx -d -p 5413:80 nginx:1.21
启动成功后访问nginx⾸⻚: http://localhost:5413/ ,注:我们向外暴漏的端⼝号是5413。出现下⾯ 的欢迎页说明安装成功了

 

2.配置代理

在nginx的配置文件里添加相应配置,如图所示

        上图中我们增加的两处配置。第⼀处我们需要增加upstream⽤来配置后端服务器组,其实这个服务器组就是我们请求动态资源时,请求的后端服务器的ip和端⼝。第⼆处是在server块当中增加location ⽤来配置所有以 /bitoj-dev/ 开头的请求都代理到我们 upstream 中配置的服务器组当中。修改完配置之后记得重启nginx容器或者重载 nginx。
nginx配置文件在什么位置?
  • 主配置⽂件: /etc/nginx/nginx.conf
  • 附加配置⽂件:在 /etc/nginx/conf.d/ ⽬录下,已经默认给我们提供了⼀个附加配置⽂件: /etc/nginx/conf.d/default.conf ,在主配置⽂件中会引⼊附加配置⽂件,如下。这样也就意味着nginx的完整的配置应该是主配置⽂件+附加配置⽂件。

如何修改nginx配置⽂件? 

  • 推荐(不是必须):你应该尽可能使⽤ /etc/nginx/conf.d/default.conf 或其他在/etc/nginx/conf.d/ ⽬录下的附加配置⽂件来添加或修改你的 Nginx 配置,⽽不是直接编辑 /etc/nginx/nginx.conf ⽂件。这样做可以保持主配置⽂件的清晰和整洁,并使得配置更易于管理和维护。
  • 注意:修改配置之后,还需要通过重载 Nginx 来应⽤更改:
nginx -s reload
我们是通过docker安装的nginx,也可以直接重启nginx服务
docker restart [容器名称或ID]命令
如何配置不同的负载均衡算法?
1.轮询
upstream bitoj {
 server 本机ip:9201;
 server 本机ip:9301;
}
2.ip_hash
upstream bitoj {
 server 本机ip:9201;
 server 本机ip:9301;
 ip_hash;
}
3.最小连接数
upstream bitoj {
 server 本机ip:9201;
 server 本机ip:9301;
 least_conn;
}
4.加权轮询
upstream bitoj {
 server 本机ip:9201 weight=1;
 server 本机ip:9301 weight=2;
}
        做完以上配置之后,访问 http://localhost:5413/newcode/test/nginx/info 进行测试。
        为什么访问地址是这个?原因是我们测试需要通过nginx调⽤这个接⼝⽽不是直接调⽤,这样才能测试处负载均衡反向代理的效果。加上我们在nginx配置⽂件中进⾏了配置以 /newcode/ 开头的请求都代理到我们 upstream 中配置的服务器组当中。实际上请求的地址会变成
http://localhost:9202/test/nginx/info 或者 http://localhost:19202/test/nginx/info

网站公告

今日签到

点亮在社区的每一天
去签到