框架之—Nginx

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like
协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

一、Nginx实现反向代理

对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。

二、Nginx实现负载均衡

Nginx负载均衡就是一个web服务器解决不了的问题可以通过多个web服务器来平均分担压力来解决,并将发过来的请求被平均分配到多个后台web服务器来处理,这样压力就被分解开来。

三、为什么需要实现负载均衡

  1. 互联网飞速发展的今天,大用户量高并发已经成为互联网的主体.怎样能让一个网站能够承载几万个或几十万个用户的持续访问呢?这是一些中小网站急需解决的问题。用单机tomcat搭建的网站,在比较理想的状态下能够承受的并发访问量在150到200左右。按照并发访问量占总用户数量的5%到10%这样计算,单点tomcat网站的用户人数在1500到4000左右。对于一个为全国范围提供服务的网站显然是不够用的,为了解决这个问题引入了负载均衡方法。
  2. 负载均衡就是一个web服务器解决不了的问题可以通过多个web服务器来平均分担压力来解决,并将发过来的请求被平均分配到多个后台web服务器来处理,这样压力就被分解开来。
  3. 负载均衡服务器分为两种一种是通过硬件实现的负载均衡服务器,简称硬负载例如:f5。另一种是通过软件来实现的负载均衡,简称软负载:例如apache和nginx。硬负载和软负载相比前者作用的网络层次比较多可以作用到socket接口的数据链路层对发出的请求进行分组转发但是价格成本比较贵,而软负载作用的层次在http协议层之上可以对http请求进行分组转发并且因为是开源的所以几乎是0成本,并且阿里巴巴,京东等电商网站使用的都是Nginx服务器。
    集群中的应用服务器(节点)通常被设计成无状态,用户可以请求任何一个节点。
    负载均衡器会根据集群中每个节点的负载情况,将用户请求转发到合适的节点上。
    负载均衡器可以用来实现高可用以及伸缩性:
  4. 高可用:当某个节点故障时,负载均衡器会将用户请求转发到另外的节点上,从而保证所有服务持续可用;
  5. 伸缩性:根据系统整体负载情况,可以很容易地添加或移除节点。
    负载均衡器运行过程包含两个部分:
    根据负载均衡算法得到转发的节点;
    进行转发。

四、负载均衡算法

  1. 轮询(Round Robin)
    轮询算法把每个请求轮流发送到每个服务器上。
  2. 加权轮询(Weighted Round Robbin)
    加权轮询是在轮询的基础上,根据服务器的性能差异,为服务器赋予一定的权值,性能高的服务器分配更高的权值。
    例如服务器 1 被赋予的权值为 5,服务器 2 被赋予的权值为 1,那么 (1, 2, 3, 4, 5) 请求会被发送到服务器 1,(6) 请求会被发送到服务器 2。
  3. 最少连接(least Connections)
    由于每个请求的连接时间不一样,使用轮询或者加权轮询算法的话,可能会让一台服务器当前连接数过大,而另一台服务器的连接过小,造成负载不均衡。
    最少连接算法就是将请求发送给当前最少连接数的服务器上。
  4. 加权最少连接(Weighted Least Connection)
    在最少连接的基础上,根据服务器的性能为每台服务器分配权重,再根据权重计算出每台服务器能处理的连接数。
  5. 随机算法(Random)
    把请求随机发送到服务器上。
    和轮询算法类似,该算法比较适合服务器性能差不多的场景。
  6. 源地址哈希法 (IP Hash)
    源地址哈希通过对客户端 IP 计算哈希值之后,再对服务器数量取模得到目标服务器的序号。
    可以保证同一 IP 的客户端的请求会转发到同一台服务器上,用来实现会话粘滞(Sticky Session)
### 若依框架中的 Nginx 配置 对于若依框架而言,Nginx 的配置主要用于反向代理以及静态资源的处理。通过合理的 Nginx 设置能够提高应用性能并增强安全性。 #### 反向代理配置 为了使 Nginx 正确地将请求转发给后端服务器,在 `nginx.conf` 文件中需定义一个 location 块来匹配 URL 并指定目标地址: ```nginx server { listen 80; server_name localhost; location / { proxy_pass http://127.0.0.1:8080; # 后端服务的实际地址和端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; } } ``` 此段代码实现了基本的反向代理功能[^1]。 #### 处理静态资源 当项目中有大量的前端静态文件时,可以通过如下方式让 Nginx 来负责这些资源的分发工作: ```nginx location /static/ { alias /path/to/static/files/; expires 30d; } ``` 这里 `/static/` 是对外暴露路径前缀,而 `/path/to/static/files/` 则是要映射的真实物理位置;同时设置了缓存时间为 30 天以减少重复下载次数[^3]。 #### 安全加固措施 考虑到安全因素,建议启用 HTTPS 协议,并且可以考虑加入一些额外的安全头信息防止潜在攻击: ```nginx add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; add_header X-Frame-Options DENY; add_header Content-Security-Policy "default-src 'self'"; ssl_certificate /etc/nginx/cert.pem; ssl_certificate_key /etc/nginx/key.pem; listen 443 ssl; ``` 上述配置不仅启用了 SSL/TLS 加密通信还增加了 HSTS 政策和其他 HTTP 响应头部字段用于提升整体安全性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值